From ce9b0808547d4f6492c55dc39510fedb8614e322 Mon Sep 17 00:00:00 2001 From: joost Date: Wed, 23 Jan 2008 09:14:07 +0000 Subject: [PATCH] * Always reset FUpdateable when calling the SQLParser (+test) git-svn-id: trunk@9878 - --- packages/fcl-db/src/sqldb/sqldb.pp | 8 ++++---- packages/fcl-db/tests/testsqlfieldtypes.pas | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/fcl-db/src/sqldb/sqldb.pp b/packages/fcl-db/src/sqldb/sqldb.pp index 70aa076aa9..8ccd129f4a 100644 --- a/packages/fcl-db/src/sqldb/sqldb.pp +++ b/packages/fcl-db/src/sqldb/sqldb.pp @@ -997,6 +997,7 @@ begin FWhereStopPos := 0; ConnOptions := TSQLConnection(DataBase).ConnOptions; + FUpdateable := False; repeat begin @@ -1074,10 +1075,9 @@ begin Setlength(FFromPart,StrLength); Move(PStatementPart^,FFromPart[1],(StrLength)); FFrompart := trim(FFrompart); - - if ExtractStrings([',',' '],[],pchar(FFromPart),nil) > 1 then - FUpdateable := False // select-statements from more then one table are not updateable - else + + // select-statements from more then one table are not updateable + if ExtractStrings([',',' '],[],pchar(FFromPart),nil) = 1 then begin FUpdateable := True; FTableName := FFromPart; diff --git a/packages/fcl-db/tests/testsqlfieldtypes.pas b/packages/fcl-db/tests/testsqlfieldtypes.pas index a1ee5a4af7..78d47750d0 100644 --- a/packages/fcl-db/tests/testsqlfieldtypes.pas +++ b/packages/fcl-db/tests/testsqlfieldtypes.pas @@ -26,6 +26,7 @@ type procedure TearDown; override; procedure RunTest; override; published + procedure TestClearUpdateableStatus; procedure TestParseJoins; // bug 10148 procedure TestInsertLargeStrFields; // bug 9600 procedure TestNumericNames; // Bug9661 @@ -876,6 +877,26 @@ begin inherited RunTest; end; +procedure TTestFieldTypes.TestClearUpdateableStatus; +// Test if CanModify is correctly disabled in case of a select query without +// a from-statement. +begin + if not (SQLDbType in MySQLdbTypes) then Ignore('This test does only apply to MySQL because the used SQL-statement is MySQL only.'); + with TSQLDBConnector(DBConnector) do + begin + with (GetNDataset(false,5) as TSQLQuery) do + begin + Open; + AssertEquals(True,CanModify); + Close; + SQL.Text:='select last_insert_id();'; + Open; + AssertEquals(False,CanModify); + close; + end; + end; +end; + procedure TTestFieldTypes.TestParseJoins; begin with TSQLDBConnector(DBConnector) do