mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2026-03-13 09:24:25 +08:00
243 lines
7.2 KiB
ObjectPascal
243 lines
7.2 KiB
ObjectPascal
unit dbstructures.interbase;
|
|
|
|
|
|
{$mode delphi}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
dbstructures, StrUtils;
|
|
|
|
type
|
|
TInterbaseProvider = class(TSqlProvider)
|
|
public
|
|
function GetSql(AId: TQueryId): string; override;
|
|
end;
|
|
|
|
var
|
|
|
|
// Interbase field types
|
|
// Taken from https://docwiki.embarcadero.com/InterBase/2020/en/RDB$FIELDS
|
|
InterbaseDatatypes: Array[0..13] of TDBDatatype =
|
|
(
|
|
(
|
|
Index: dbdtUnknown;
|
|
Name: 'UNKNOWN';
|
|
Description: 'Unknown data type';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcOther;
|
|
),
|
|
(
|
|
Index: dbdtBlob;
|
|
NativeTypes: '261';
|
|
Name: 'BLOB';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: True;
|
|
Category: dtcBinary;
|
|
),
|
|
(
|
|
Index: dbdtBool;
|
|
NativeTypes: '17';
|
|
Name: 'BOOLEAN';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcOther;
|
|
),
|
|
(
|
|
Index: dbdtChar;
|
|
NativeTypes: '14';
|
|
Name: 'CHAR';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcText;
|
|
),
|
|
(
|
|
Index: dbdtVarchar;
|
|
NativeTypes: '37|40';
|
|
Name: 'VARCHAR';
|
|
HasLength: True;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: True;
|
|
Category: dtcText;
|
|
),
|
|
(
|
|
Index: dbdtFloat;
|
|
NativeTypes: '10|11';
|
|
Name: 'FLOAT';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcReal;
|
|
),
|
|
(
|
|
Index: dbdtDouble;
|
|
NativeTypes: '27';
|
|
Name: 'DOUBLE PRECISION';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcReal;
|
|
),
|
|
(
|
|
Index: dbdtBigint;
|
|
NativeTypes: '16';
|
|
Name: 'INT64';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcInteger;
|
|
),
|
|
(
|
|
Index: dbdtInt;
|
|
NativeTypes: '8';
|
|
Name: 'INTEGER';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcInteger;
|
|
),
|
|
(
|
|
Index: dbdtNumeric;
|
|
NativeTypes: '9';
|
|
Name: 'QUAD';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcInteger;
|
|
),
|
|
(
|
|
Index: dbdtSmallint;
|
|
NativeTypes: '7';
|
|
Name: 'SMALLINT';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcInteger;
|
|
),
|
|
(
|
|
Index: dbdtDate;
|
|
NativeTypes: '12';
|
|
Name: 'DATE';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcTemporal;
|
|
),
|
|
(
|
|
Index: dbdtTime;
|
|
NativeTypes: '13';
|
|
Name: 'TIME';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcTemporal;
|
|
),
|
|
(
|
|
Index: dbdtTimestamp;
|
|
NativeTypes: '35';
|
|
Name: 'TIMESTAMP';
|
|
HasLength: False;
|
|
RequiresLength: False;
|
|
HasBinary: False;
|
|
HasDefault: False;
|
|
LoadPart: False;
|
|
Category: dtcTemporal;
|
|
)
|
|
);
|
|
|
|
|
|
implementation
|
|
|
|
|
|
{ TInterbaseProvider }
|
|
|
|
function TInterbaseProvider.GetSql(AId: TQueryId): string;
|
|
begin
|
|
case AId of
|
|
qDatabaseDrop: Result := 'DROP DATABASE %s';
|
|
qEmptyTable: Result := 'TRUNCATE ';
|
|
qRenameTable: Result := 'RENAME TABLE %s TO %s';
|
|
qRenameView: Result := 'RENAME TABLE %s TO %s';
|
|
qCurrentUserHost: Result := IfThen(
|
|
FNetType in [ntInterbase_TCPIP, ntInterbase_Local],
|
|
'select user from rdb$database',
|
|
'select current_user || ''@'' || mon$attachments.mon$remote_host from mon$attachments where mon$attachments.mon$attachment_id = current_connection'
|
|
);
|
|
qLikeCompare: Result := '%s LIKE %s';
|
|
qAddColumn: Result := 'ADD COLUMN %s';
|
|
qChangeColumn: Result := 'CHANGE COLUMN %s %s';
|
|
qRenameColumn: Result := '';
|
|
qSessionVariables: Result := 'SHOW VARIABLES';
|
|
qGlobalVariables: Result := 'SHOW GLOBAL VARIABLES';
|
|
qISSchemaCol: Result := '%s_SCHEMA';
|
|
qUSEQuery: Result := '';
|
|
qKillQuery: Result := 'KILL %d';
|
|
qKillProcess: Result := 'KILL %d';
|
|
qFuncLength: Result := 'LENGTH';
|
|
qFuncCeil: Result := 'CEIL';
|
|
qFuncLeft: Result := 'SUBSTR(%s, 1, %d)';
|
|
qFuncNow: Result := ' cast(''now'' as timestamp) from rdb$database';
|
|
qFuncLastAutoIncNumber: Result := 'LAST_INSERT_ID()';
|
|
qLockedTables: Result := '';
|
|
qDisableForeignKeyChecks: Result := '';
|
|
qEnableForeignKeyChecks: Result := '';
|
|
qForeignKeyDrop: Result := 'DROP FOREIGN KEY %s';
|
|
qGetTableColumns: Result := 'SELECT r.RDB$FIELD_NAME AS field_name,'+
|
|
' r.RDB$DESCRIPTION AS field_description,'+
|
|
' r.RDB$DEFAULT_VALUE AS field_default_value,'+
|
|
' r.RDB$NULL_FLAG AS null_flag,'+
|
|
' f.RDB$FIELD_LENGTH AS field_length,'+
|
|
' f.RDB$FIELD_PRECISION AS field_precision,'+
|
|
' f.RDB$FIELD_SCALE AS field_scale,'+
|
|
' f.RDB$FIELD_TYPE AS field_type,'+
|
|
' f.RDB$FIELD_SUB_TYPE AS field_subtype,'+
|
|
' coll.RDB$COLLATION_NAME AS field_collation,'+
|
|
' cset.RDB$CHARACTER_SET_NAME AS field_charset'+
|
|
' FROM RDB$RELATION_FIELDS r'+
|
|
' LEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME'+
|
|
' LEFT JOIN RDB$CHARACTER_SETS cset ON f.RDB$CHARACTER_SET_ID = cset.RDB$CHARACTER_SET_ID'+
|
|
' LEFT JOIN RDB$COLLATIONS coll ON f.RDB$COLLATION_ID = coll.RDB$COLLATION_ID'+
|
|
' AND F.RDB$CHARACTER_SET_ID = COLL.RDB$CHARACTER_SET_ID'+
|
|
' WHERE r.RDB$RELATION_NAME=%s'+
|
|
' ORDER BY r.RDB$FIELD_POSITION';
|
|
qGetCollations: Result := 'SELECT RDB$COLLATION_NAME AS "Collation",'+
|
|
' RDB$COLLATION_ID AS "Id",'+
|
|
' RDB$CHARACTER_SET_ID'+
|
|
' FROM RDB$COLLATIONS';
|
|
qGetCharsets: Result := 'SELECT RDB$CHARACTER_SET_NAME AS "Charset", RDB$CHARACTER_SET_NAME AS "Description" FROM RDB$CHARACTER_SETS';
|
|
end;
|
|
end;
|
|
|
|
|
|
end. |