Issue #12: Proper implementation of TSQLiteQuery.ColIsPrimaryKeyPart()

This commit is contained in:
Ansgar Becker
2020-01-01 19:12:10 +01:00
parent 7fc55c5da7
commit c9d3d3c38d
2 changed files with 23 additions and 0 deletions

View File

@@ -7137,8 +7137,26 @@ end;
function TSQLiteQuery.ColIsPrimaryKeyPart(Column: Integer): Boolean;
var
MetaResult: Integer;
TableNm, ColumnNm: String;
DataType, CollSeq: PAnsiChar;
NotNull, PrimaryKey, Autoinc: Integer;
begin
Result := False;
TableNm := TableName(Column);
ColumnNm := FColumnOrgNames[Column];
if not TableNm.IsEmpty then begin
MetaResult := FConnection.Lib.sqlite3_table_column_metadata(FConnection.FHandle,
PAnsiChar(Utf8Encode(FConnection.Database)),
PAnsiChar(Utf8Encode(TableNm)),
PAnsiChar(Utf8Encode(ColumnNm)),
DataType, CollSeq, NotNull, PrimaryKey, Autoinc
);
if MetaResult <> SQLITE_ERROR then begin
Result := PrimaryKey.ToBoolean;
end;
end;
end;

View File

@@ -536,6 +536,10 @@ const
sqlite3_column_database_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_table_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_origin_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_next_stmt: function(ppDb: Psqlite3; pStmt: Psqlite3_stmt): Psqlite3_stmt; cdecl;
sqlite3_table_column_metadata: function(ppDb: Psqlite3;
zDbName, zTableName, zColumnName: PAnsiChar;
var pzDataType, pzCollSeq: PAnsiChar; var pNotNull, pPrimaryKey, pAutoinc: Integer
): Integer; cdecl;
private
procedure AssignProcedures; override;
@@ -7949,6 +7953,7 @@ begin
AssignProc(@sqlite3_column_database_name, 'sqlite3_column_database_name');
AssignProc(@sqlite3_column_table_name, 'sqlite3_column_table_name');
AssignProc(@sqlite3_column_origin_name, 'sqlite3_column_origin_name');
AssignProc(@sqlite3_next_stmt, 'sqlite3_next_stmt');
AssignProc(@sqlite3_table_column_metadata, 'sqlite3_table_column_metadata');
end;