mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 12:11:34 +01:00 
			
		
		
		
	fcl-db: sqlite: cleanup + formatting
(use already defined constant JulianEpoch instead of own; use UnicodeCompareStr instead of WideCompareStr) git-svn-id: trunk@22981 -
This commit is contained in:
		
							parent
							
								
									1698673744
								
							
						
					
					
						commit
						56350aec8a
					
				| @ -86,7 +86,7 @@ type | ||||
|     procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction : TSQLTransaction); override; | ||||
|     // New methods | ||||
|     procedure execsql(const asql: string); | ||||
|     procedure UpdateIndexDefs(IndexDefs : TIndexDefs;TableName : string); override; // Differs from SQLDB. | ||||
|     procedure UpdateIndexDefs(IndexDefs : TIndexDefs; TableName : string); override; | ||||
|     function RowsAffected(cursor: TSQLCursor): TRowsCount; override; | ||||
|     function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override; | ||||
|     function StrToStatementType(s : string) : TStatementType; override; | ||||
| @ -122,8 +122,10 @@ implementation | ||||
| uses | ||||
|   dbconst, sysutils, dateutils, FmtBCD; | ||||
| 
 | ||||
| {$IF NOT DECLARED(JulianEpoch)} // sysutils/datih.inc | ||||
| const | ||||
|   JulianDateShift = 2415018.5; //distance from "julian day 0" (January 1, 4713 BC 12:00AM) to "1899-12-30 00:00AM" | ||||
|   JulianEpoch = TDateTime(-2415018.5); // "julian day 0" is January 1, 4713 BC 12:00AM | ||||
| {$ENDIF} | ||||
| 
 | ||||
| type | ||||
| 
 | ||||
| @ -139,7 +141,7 @@ type | ||||
|    fparambinding: array of Integer; | ||||
|    procedure checkerror(const aerror: integer); | ||||
|    procedure bindparams(AParams : TParams); | ||||
|    Procedure Prepare(Buf : String; APArams : TParams); | ||||
|    Procedure Prepare(Buf : String; AParams : TParams); | ||||
|    Procedure UnPrepare; | ||||
|    Procedure Execute; | ||||
|    Function Fetch : Boolean; | ||||
| @ -178,37 +180,34 @@ Procedure TSQLite3Cursor.bindparams(AParams : TParams); | ||||
| Var | ||||
|   I : Integer; | ||||
|   P : TParam;   | ||||
|   pc : pchar; | ||||
|   str1: string; | ||||
|   cu1: currency; | ||||
|   do1: double; | ||||
|   parms : array of Integer; | ||||
|   wstr1: widestring; | ||||
|    | ||||
| begin | ||||
|   for I:=1 to high(fparambinding)+1 do | ||||
|     begin | ||||
|     P:=aparams[fparambinding[I-1]]; | ||||
|     if P.isnull then  | ||||
|     P:=AParams[fparambinding[I-1]]; | ||||
|     if P.IsNull then | ||||
|       checkerror(sqlite3_bind_null(fstatement,I)) | ||||
|     else  | ||||
|       case P.datatype of | ||||
|         ftinteger, | ||||
|         ftboolean, | ||||
|         ftsmallint: checkerror(sqlite3_bind_int(fstatement,I,p.asinteger)); | ||||
|         ftword:     checkerror(sqlite3_bind_int(fstatement,I,P.asword)); | ||||
|         ftlargeint: checkerror(sqlite3_bind_int64(fstatement,I,P.aslargeint)); | ||||
|         ftbcd, | ||||
|         ftfloat, | ||||
|         ftcurrency: | ||||
|         ftInteger, | ||||
|         ftBoolean, | ||||
|         ftSmallint: checkerror(sqlite3_bind_int(fstatement,I,P.AsInteger)); | ||||
|         ftWord:     checkerror(sqlite3_bind_int(fstatement,I,P.AsWord)); | ||||
|         ftLargeint: checkerror(sqlite3_bind_int64(fstatement,I,P.AsLargeint)); | ||||
|         ftBcd, | ||||
|         ftFloat, | ||||
|         ftCurrency: | ||||
|                 begin | ||||
|                 do1:= P.AsFloat; | ||||
|                 checkerror(sqlite3_bind_double(fstatement,I,do1)); | ||||
|                 end; | ||||
|         ftdatetime, | ||||
|         ftdate, | ||||
|         fttime: begin | ||||
|                 do1:= P.AsFloat + JulianDateShift; | ||||
|         ftDateTime, | ||||
|         ftDate, | ||||
|         ftTime: begin | ||||
|                 do1:= P.AsFloat - JulianEpoch; | ||||
|                 checkerror(sqlite3_bind_double(fstatement,I,do1)); | ||||
|                 end; | ||||
|         ftFMTBcd: | ||||
| @ -216,9 +215,9 @@ begin | ||||
|                 str1:=BCDToStr(P.AsFMTBCD, Fconnection.FSQLFormatSettings); | ||||
|                 checkerror(sqlite3_bind_text(fstatement, I, PChar(str1), length(str1), sqlite3_destructor_type(SQLITE_TRANSIENT))); | ||||
|                 end; | ||||
|         ftstring, | ||||
|         ftString, | ||||
|         ftFixedChar, | ||||
|         ftmemo: begin // According to SQLite documentation, CLOB's (ftMemo) have the Text affinity | ||||
|         ftMemo: begin // According to SQLite documentation, CLOB's (ftMemo) have the Text affinity | ||||
|                 str1:= p.asstring; | ||||
|                 checkerror(sqlite3_bind_text(fstatement,I,pcharstr(str1), length(str1),@freebindstring)); | ||||
|                 end; | ||||
| @ -239,12 +238,12 @@ begin | ||||
|     end;    | ||||
| end; | ||||
| 
 | ||||
| Procedure TSQLite3Cursor.Prepare(Buf : String; APArams : TParams); | ||||
| Procedure TSQLite3Cursor.Prepare(Buf : String; AParams : TParams); | ||||
| 
 | ||||
| begin | ||||
|   if assigned(aparams) and (aparams.count > 0) then  | ||||
|     buf := aparams.parsesql(buf,false,false,false,psinterbase,fparambinding); | ||||
|   checkerror(sqlite3_prepare(fhandle,pchar(buf),length(buf),@fstatement,@ftail)); | ||||
|   if assigned(AParams) and (AParams.Count > 0) then | ||||
|     Buf := AParams.ParseSQL(Buf,false,false,false,psInterbase,fparambinding); | ||||
|   checkerror(sqlite3_prepare(fhandle,pchar(Buf),length(Buf),@fstatement,@ftail)); | ||||
|   FPrepared:=True; | ||||
| end; | ||||
| 
 | ||||
| @ -414,7 +413,6 @@ var | ||||
|  FN,FD : string; | ||||
|  ft1   : tfieldtype; | ||||
|  size1, size2 : integer; | ||||
|  ar1   : TStringArray; | ||||
|  fi    : integer; | ||||
|  st    : psqlite3_stmt; | ||||
| 
 | ||||
| @ -621,7 +619,7 @@ begin | ||||
|                begin | ||||
|                PDateTime(buffer)^ := sqlite3_column_double(st,fnum); | ||||
|                if PDateTime(buffer)^ > 1721059.5 {Julian 01/01/0000} then | ||||
|                   PDateTime(buffer)^ := PDateTime(buffer)^ - JulianDateShift; //backward compatibility hack | ||||
|                   PDateTime(buffer)^ := PDateTime(buffer)^ + JulianEpoch; //backward compatibility hack | ||||
|                end; | ||||
|     ftFixedChar, | ||||
|     ftString: begin | ||||
| @ -956,7 +954,7 @@ var S1, S2: AnsiString; | ||||
| begin | ||||
|   SetString(S1, data1, len1); | ||||
|   SetString(S2, data2, len2); | ||||
|   Result := WideCompareStr(UTF8Decode(S1), UTF8Decode(S2)); | ||||
|   Result := UnicodeCompareStr(UTF8Decode(S1), UTF8Decode(S2)); | ||||
| end; | ||||
| 
 | ||||
| procedure TSQLite3Connection.CreateCollation(const CollationName: string; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 lacak
						lacak