mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-28 13:01:35 +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;
|
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction : TSQLTransaction); override;
|
||||||
// New methods
|
// New methods
|
||||||
procedure execsql(const asql: string);
|
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 RowsAffected(cursor: TSQLCursor): TRowsCount; override;
|
||||||
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
|
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
|
||||||
function StrToStatementType(s : string) : TStatementType; override;
|
function StrToStatementType(s : string) : TStatementType; override;
|
||||||
@ -122,8 +122,10 @@ implementation
|
|||||||
uses
|
uses
|
||||||
dbconst, sysutils, dateutils, FmtBCD;
|
dbconst, sysutils, dateutils, FmtBCD;
|
||||||
|
|
||||||
|
{$IF NOT DECLARED(JulianEpoch)} // sysutils/datih.inc
|
||||||
const
|
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
|
type
|
||||||
|
|
||||||
@ -139,7 +141,7 @@ type
|
|||||||
fparambinding: array of Integer;
|
fparambinding: array of Integer;
|
||||||
procedure checkerror(const aerror: integer);
|
procedure checkerror(const aerror: integer);
|
||||||
procedure bindparams(AParams : TParams);
|
procedure bindparams(AParams : TParams);
|
||||||
Procedure Prepare(Buf : String; APArams : TParams);
|
Procedure Prepare(Buf : String; AParams : TParams);
|
||||||
Procedure UnPrepare;
|
Procedure UnPrepare;
|
||||||
Procedure Execute;
|
Procedure Execute;
|
||||||
Function Fetch : Boolean;
|
Function Fetch : Boolean;
|
||||||
@ -178,37 +180,34 @@ Procedure TSQLite3Cursor.bindparams(AParams : TParams);
|
|||||||
Var
|
Var
|
||||||
I : Integer;
|
I : Integer;
|
||||||
P : TParam;
|
P : TParam;
|
||||||
pc : pchar;
|
|
||||||
str1: string;
|
str1: string;
|
||||||
cu1: currency;
|
|
||||||
do1: double;
|
do1: double;
|
||||||
parms : array of Integer;
|
|
||||||
wstr1: widestring;
|
wstr1: widestring;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
for I:=1 to high(fparambinding)+1 do
|
for I:=1 to high(fparambinding)+1 do
|
||||||
begin
|
begin
|
||||||
P:=aparams[fparambinding[I-1]];
|
P:=AParams[fparambinding[I-1]];
|
||||||
if P.isnull then
|
if P.IsNull then
|
||||||
checkerror(sqlite3_bind_null(fstatement,I))
|
checkerror(sqlite3_bind_null(fstatement,I))
|
||||||
else
|
else
|
||||||
case P.datatype of
|
case P.datatype of
|
||||||
ftinteger,
|
ftInteger,
|
||||||
ftboolean,
|
ftBoolean,
|
||||||
ftsmallint: checkerror(sqlite3_bind_int(fstatement,I,p.asinteger));
|
ftSmallint: checkerror(sqlite3_bind_int(fstatement,I,P.AsInteger));
|
||||||
ftword: checkerror(sqlite3_bind_int(fstatement,I,P.asword));
|
ftWord: checkerror(sqlite3_bind_int(fstatement,I,P.AsWord));
|
||||||
ftlargeint: checkerror(sqlite3_bind_int64(fstatement,I,P.aslargeint));
|
ftLargeint: checkerror(sqlite3_bind_int64(fstatement,I,P.AsLargeint));
|
||||||
ftbcd,
|
ftBcd,
|
||||||
ftfloat,
|
ftFloat,
|
||||||
ftcurrency:
|
ftCurrency:
|
||||||
begin
|
begin
|
||||||
do1:= P.AsFloat;
|
do1:= P.AsFloat;
|
||||||
checkerror(sqlite3_bind_double(fstatement,I,do1));
|
checkerror(sqlite3_bind_double(fstatement,I,do1));
|
||||||
end;
|
end;
|
||||||
ftdatetime,
|
ftDateTime,
|
||||||
ftdate,
|
ftDate,
|
||||||
fttime: begin
|
ftTime: begin
|
||||||
do1:= P.AsFloat + JulianDateShift;
|
do1:= P.AsFloat - JulianEpoch;
|
||||||
checkerror(sqlite3_bind_double(fstatement,I,do1));
|
checkerror(sqlite3_bind_double(fstatement,I,do1));
|
||||||
end;
|
end;
|
||||||
ftFMTBcd:
|
ftFMTBcd:
|
||||||
@ -216,9 +215,9 @@ begin
|
|||||||
str1:=BCDToStr(P.AsFMTBCD, Fconnection.FSQLFormatSettings);
|
str1:=BCDToStr(P.AsFMTBCD, Fconnection.FSQLFormatSettings);
|
||||||
checkerror(sqlite3_bind_text(fstatement, I, PChar(str1), length(str1), sqlite3_destructor_type(SQLITE_TRANSIENT)));
|
checkerror(sqlite3_bind_text(fstatement, I, PChar(str1), length(str1), sqlite3_destructor_type(SQLITE_TRANSIENT)));
|
||||||
end;
|
end;
|
||||||
ftstring,
|
ftString,
|
||||||
ftFixedChar,
|
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;
|
str1:= p.asstring;
|
||||||
checkerror(sqlite3_bind_text(fstatement,I,pcharstr(str1), length(str1),@freebindstring));
|
checkerror(sqlite3_bind_text(fstatement,I,pcharstr(str1), length(str1),@freebindstring));
|
||||||
end;
|
end;
|
||||||
@ -239,12 +238,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TSQLite3Cursor.Prepare(Buf : String; APArams : TParams);
|
Procedure TSQLite3Cursor.Prepare(Buf : String; AParams : TParams);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if assigned(aparams) and (aparams.count > 0) then
|
if assigned(AParams) and (AParams.Count > 0) then
|
||||||
buf := aparams.parsesql(buf,false,false,false,psinterbase,fparambinding);
|
Buf := AParams.ParseSQL(Buf,false,false,false,psInterbase,fparambinding);
|
||||||
checkerror(sqlite3_prepare(fhandle,pchar(buf),length(buf),@fstatement,@ftail));
|
checkerror(sqlite3_prepare(fhandle,pchar(Buf),length(Buf),@fstatement,@ftail));
|
||||||
FPrepared:=True;
|
FPrepared:=True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -414,7 +413,6 @@ var
|
|||||||
FN,FD : string;
|
FN,FD : string;
|
||||||
ft1 : tfieldtype;
|
ft1 : tfieldtype;
|
||||||
size1, size2 : integer;
|
size1, size2 : integer;
|
||||||
ar1 : TStringArray;
|
|
||||||
fi : integer;
|
fi : integer;
|
||||||
st : psqlite3_stmt;
|
st : psqlite3_stmt;
|
||||||
|
|
||||||
@ -621,7 +619,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
PDateTime(buffer)^ := sqlite3_column_double(st,fnum);
|
PDateTime(buffer)^ := sqlite3_column_double(st,fnum);
|
||||||
if PDateTime(buffer)^ > 1721059.5 {Julian 01/01/0000} then
|
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;
|
end;
|
||||||
ftFixedChar,
|
ftFixedChar,
|
||||||
ftString: begin
|
ftString: begin
|
||||||
@ -956,7 +954,7 @@ var S1, S2: AnsiString;
|
|||||||
begin
|
begin
|
||||||
SetString(S1, data1, len1);
|
SetString(S1, data1, len1);
|
||||||
SetString(S2, data2, len2);
|
SetString(S2, data2, len2);
|
||||||
Result := WideCompareStr(UTF8Decode(S1), UTF8Decode(S2));
|
Result := UnicodeCompareStr(UTF8Decode(S1), UTF8Decode(S2));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSQLite3Connection.CreateCollation(const CollationName: string;
|
procedure TSQLite3Connection.CreateCollation(const CollationName: string;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user