浏览代码

* Patch from Ondrej Pokorny to fix TSQLScript in case of no final terminator

git-svn-id: trunk@37355 -
michael 7 年之前
父节点
当前提交
488e7af362
共有 2 个文件被更改,包括 11 次插入5 次删除
  1. 1 5
      packages/fcl-db/src/base/sqlscript.pp
  2. 10 0
      packages/fcl-db/tests/testsqlscript.pas

+ 1 - 5
packages/fcl-db/src/base/sqlscript.pp

@@ -519,10 +519,9 @@ function TCustomSQLScript.NextStatement: AnsiString;
 
 
 var
 var
   pnt: AnsiString;
   pnt: AnsiString;
-  b,isExtra,terminator_found: Boolean;
+  b,isExtra: Boolean;
 
 
 begin
 begin
-  terminator_found:=False;
   ClearStatement;
   ClearStatement;
   while FLine <= FSQL.Count do
   while FLine <= FSQL.Count do
     begin
     begin
@@ -530,7 +529,6 @@ begin
     if (pnt=FTerminator) then
     if (pnt=FTerminator) then
       begin
       begin
       FCol:=FCol + length(pnt);
       FCol:=FCol + length(pnt);
-      terminator_found:=True;
       break;
       break;
       end
       end
     else if pnt = '/*' then
     else if pnt = '/*' then
@@ -583,8 +581,6 @@ begin
         FCol:=FCol + length(pnt);
         FCol:=FCol + length(pnt);
       end;
       end;
     end;
     end;
-  if not terminator_found then
-    ClearStatement;
   while (FCurrentStatement.Count > 0) and (trim(FCurrentStatement.Strings[0]) = '') do
   while (FCurrentStatement.Count > 0) and (trim(FCurrentStatement.Strings[0]) = '') do
     FCurrentStatement.Delete(0);
     FCurrentStatement.Delete(0);
   while (FCurrentStripped.Count > 0) and (trim(FCurrentStripped.Strings[0]) = '') do
   while (FCurrentStripped.Count > 0) and (trim(FCurrentStripped.Strings[0]) = '') do

+ 10 - 0
packages/fcl-db/tests/testsqlscript.pas

@@ -76,6 +76,7 @@ type
   published
   published
     procedure TestCreateDefaults;
     procedure TestCreateDefaults;
     procedure TestTerminator;
     procedure TestTerminator;
+    procedure TestTerminatorNoFinal;
     procedure TestSetTerm;
     procedure TestSetTerm;
     procedure TestUseSetTerm;
     procedure TestUseSetTerm;
     procedure TestComments;
     procedure TestComments;
@@ -302,6 +303,15 @@ begin
   AssertStatDir('doe,iets,anders', '');
   AssertStatDir('doe,iets,anders', '');
 end;
 end;
 
 
+procedure TTestSQLScript.TestTerminatorNoFinal;
+begin
+  script.terminator := '!';
+  Add('doe!iets!');
+  Add('anders');
+  script.execute;
+  AssertStatDir('doe,iets,anders', '');
+end;
+
 procedure TTestSQLScript.TestSetTerm;
 procedure TTestSQLScript.TestSetTerm;
 begin
 begin
   script.UseSetTerm:=true;
   script.UseSetTerm:=true;