Browse Source

* PChar -> PAnsiChar

Michaël Van Canneyt 2 years ago
parent
commit
b3f8270ea6

+ 27 - 22
packages/fcl-db/src/sql/fpsqlscanner.pp

@@ -82,7 +82,7 @@ const
   sqlInvertableComparisons = [tsqlLike,tsqlContaining,tsqlStarting,tsqlIN,tsqlIS, tsqlBetween];
 
   // Strings that represent tokens in TSQLToken
-  TokenInfos: array[TSQLToken] of string = ('unknown',
+  TokenInfos: array[TSQLToken] of shortstring = ('unknown',
        // Specials
        'EOF','whitespace',
        'String',
@@ -359,7 +359,7 @@ begin
   Len:=TokenStr-TokenStart;
   SetLength(FCurTokenString, Len);
   if (Len>0) then
-    Move(TokenStart^,FCurTokenString[1],Len);
+    Move(TokenStart^,FCurTokenString[1],Len * SizeOf(Char));
   Result := tsqlComment;
 end;
 
@@ -383,7 +383,7 @@ begin
       Len:=TokenStr-TokenStart+1;
       SetLength(FCurTokenString,OLen+Len);
       if Len>1 then
-        Move(TokenStart^,FCurTokenString[OLen+1],Len-1);
+        Move(TokenStart^,FCurTokenString[OLen+1],(Len-1)*SizeOf(Char));
       Inc(OLen,Len);
       FCurTokenString[OLen]:=#10;
       if not FetchLine then
@@ -405,7 +405,7 @@ begin
   SetLength(FCurTokenString, Olen+Len);
   if (Len>0) then
     begin
-    Move(TokenStart^, FCurTokenString[Olen + 1], Len);
+    Move(TokenStart^, FCurTokenString[Olen + 1], Len*SizeOf(Char));
     end;
   If TokenStr[0]<>#0 then
     Inc(TokenStr);
@@ -493,9 +493,9 @@ Var
   begin
     SetLength(FCurTokenString, OLen + Len+Length(S));
     if Len > 0 then
-      Move(TokenStart^, FCurTokenString[OLen + 1], Len);
+      Move(TokenStart^, FCurTokenString[OLen + 1], Len*Sizeof(Char));
     If Length(S)>0 then
-      Move(S[1],FCurTokenString[OLen + Len+1],Length(S));
+      Move(S[1],FCurTokenString[OLen + Len+1],Length(S)*Sizeof(Char));
     Inc(OLen, Len+Length(S));
     If DoNextToken then
       Inc(TokenStr);
@@ -628,7 +628,7 @@ begin
   Len:=TokenStr-TokenStart;
   Setlength(FCurTokenString, Len);
   if (Len>0) then
-  Move(TokenStart^,FCurTokenString[1],Len);
+    Move(TokenStart^,FCurTokenString[1],Len*Sizeof(Char));
   If IsFloat then
     Result := tsqlFloatNumber
   else
@@ -654,7 +654,7 @@ begin
   Len:=(TokenStr-TokenStart);
   SetLength(FCurTokenString,Len);
   if Len > 0 then
-    Move(TokenStart^,FCurTokenString[1],Len);
+    Move(TokenStart^,FCurTokenString[1],Len*SizeOf(Char));
   S:=UpperCase(FCurTokenString);
   // Check if this is a keyword or identifier
   // to do: Optimize this!
@@ -698,7 +698,7 @@ begin
     begin
     result:=tsqlSymbolString;
     SetLength(FCurTokenString,Len);
-    Move(TokenStart^,FCurTokenString[1],Len);
+    Move(TokenStart^,FCurTokenString[1],Len*SizeOf(Char));
     if (AlternateTerminator<>'') and (CurtokenString=AlternateTerminator) then
       Exit(tsqlTerminator);
 
@@ -969,12 +969,24 @@ end;
 function TStreamLineReader.ReadLine: string;
 
 Var
-  FPos,OLen,Len: Integer;
+  FPos,Len: Integer;
   PRun : PByte;
+  Res : AnsiString;
+
+  Procedure AddToRes; inline;
+
+  Var
+    OLen : integer;
+
+  begin
+    Olen:=Length(Res);
+    SetLength(Res,OLen+Len);
+    Move(Buffer[FPos],Res[OLen+1],Len);
+  end;
 
 begin
   FPos:=FBufPos;
-  Result:='';
+  Res:='';
   Repeat
     PRun:=@Buffer[FBufPos];
     While (FBufPos<FBufLen) and Not (PRun^ in [10,13]) do
@@ -986,22 +998,14 @@ begin
       begin
       Len:=FBufPos-FPos;
       If (Len>0) then
-        begin
-        Olen:=Length(Result);
-        SetLength(Result,OLen+Len);
-        Move(Buffer[FPos],Result[OLen+1],Len);
-        end;
+        AddToRes;
       FillBuffer;
       FPos:=FBufPos;
       end;
   until (FBufPos=FBufLen) or (PRun^ in [10,13]);
   Len:=FBufPos-FPos+1;
   If (Len>0) then
-    begin
-    Olen:=Length(Result);
-    SetLength(Result,OLen+Len);
-    Move(Buffer[FPos],Result[OLen+1],Len);
-    end;
+    AddToRes;
   If (PRun^ in [10,13]) and (FBufPos<FBufLen) then
     begin
     Inc(FBufPos);
@@ -1013,10 +1017,11 @@ begin
       If (FBufPos<FBufLen) and (Buffer[FBufpos]=10) then
         begin
         Inc(FBufPos);
-        Result:=Result+#10;
+        Res:=Res+#10;
         end;
       end;
     end;
+  Result:=Res;
 end;
 
 end.

+ 1 - 1
packages/fcl-db/tests/tcparser.pas

@@ -1293,7 +1293,7 @@ begin
   CreateParser(ASOURCE);
   Parser.GetNextToken;
   Parser.ParseStringDef(dt,l,cs);
-  AssertEquals('Datatype is CHAR',ExpectDT,Dt);
+  AssertEquals('Datatype is AnsiChar',ExpectDT,Dt);
   AssertEquals('Length is 1',ExpectLen,l);
   AssertEquals('End of Stream reached',tsqlEOF,Parser.CurrentToken);
   AssertEquals('Correct character set',ExpectCharset,CS);

+ 1 - 1
packages/fcl-db/tests/tcsqlscanner.pas

@@ -338,7 +338,7 @@ end;
 procedure TTestSQLScanner.DoTestString(S: String; DoubleDelim : Boolean = False);
 Var
   J : TSQLToken;
-  C : Char;
+  C : AnsiChar;
 
 begin
   CreateScanner(S);

+ 19 - 25
packages/fcl-db/tests/testsqlscanner.lpi

@@ -1,17 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <CONFIG>
   <ProjectOptions>
-    <Version Value="9"/>
+    <Version Value="12"/>
     <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
       <SessionStorage Value="InProjectDir"/>
-      <MainUnit Value="0"/>
       <ResourceType Value="res"/>
       <UseXPManifest Value="True"/>
     </General>
     <VersionInfo>
       <Language Value=""/>
       <CharSet Value=""/>
-      <StringTable ProductVersion=""/>
     </VersionInfo>
     <BuildModes Count="2">
       <Item1 Name="Debug" Default="True"/>
@@ -40,65 +44,55 @@
             </Debugging>
             <LinkSmart Value="True"/>
           </Linking>
-          <Other>
-            <CompilerPath Value="$(CompPath)"/>
-          </Other>
         </CompilerOptions>
       </Item2>
     </BuildModes>
     <PublishOptions>
       <Version Value="2"/>
-      <IgnoreBinaries Value="False"/>
-      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
-      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
     </PublishOptions>
     <RunParams>
       <local>
-        <FormatVersion Value="1"/>
-        <CommandLineParams Value="--skiptiming --format=plain --all"/>
-        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+        <CommandLineParams Value="--skiptiming --format=plain --suite=TTestSQLScanner.TestAction"/>
+        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T &apos;Lazarus Run Output&apos; -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
       </local>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default">
+          <local>
+            <CommandLineParams Value="--skiptiming --format=plain --suite=TTestSQLScanner.TestAction"/>
+            <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T &apos;Lazarus Run Output&apos; -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+          </local>
+        </Mode0>
+      </Modes>
     </RunParams>
-    <RequiredPackages Count="1">
-      <Item1>
-        <PackageName Value="FCL"/>
-      </Item1>
-    </RequiredPackages>
     <Units Count="7">
       <Unit0>
         <Filename Value="testsqlscanner.lpr"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="testsqlscanner"/>
       </Unit0>
       <Unit1>
         <Filename Value="tcsqlscanner.pas"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="tcsqlscanner"/>
       </Unit1>
       <Unit2>
         <Filename Value="../src/sql/fpsqltree.pp"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="fpsqltree"/>
       </Unit2>
       <Unit3>
         <Filename Value="../src/sql/fpsqlscanner.pp"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="fpsqlscanner"/>
       </Unit3>
       <Unit4>
         <Filename Value="../src/sql/fpsqlparser.pas"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="fpsqlparser"/>
       </Unit4>
       <Unit5>
         <Filename Value="tcparser.pas"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="tcparser"/>
       </Unit5>
       <Unit6>
         <Filename Value="tcgensql.pas"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="tcgensql"/>
       </Unit6>
     </Units>
   </ProjectOptions>
@@ -130,7 +124,7 @@
       </Optimizations>
     </CodeGeneration>
     <Other>
-      <CompilerPath Value="$(CompPath)"/>
+      <CustomOptions Value="-tunicodertl"/>
     </Other>
   </CompilerOptions>
   <Debugging>

+ 3 - 0
packages/fcl-db/tests/testsqlscanner.lpr

@@ -3,6 +3,9 @@ program testsqlscanner;
 {$mode objfpc}{$H+}
 
 uses
+  {$ifdef unix}
+  cwstring,
+  {$endif}
   Classes, consoletestrunner, tcsqlscanner, 
   fpsqltree, fpsqlscanner, fpsqlparser,
   tcparser, tcgensql;