unit dbstructures.interbase;interfaceusesdbstructures, StrUtils;typeTInterbaseProvider = class(TSqlProvider)publicfunction GetSql(AId: TQueryId): string; override;end;var// Interbase field types// Taken from https://docwiki.embarcadero.com/InterBase/2020/en/RDB$FIELDSInterbaseDatatypes: 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;begincase AId ofqDatabaseDrop: Result := 'DROP DATABASE %s';qEmptyTable: Result := 'TRUNCATE %s';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';else Result := inherited;end;end;end.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。