From 70f562cec78fe11e3d634bb7cf362c60d527d55f Mon Sep 17 00:00:00 2001 From: joost Date: Mon, 7 Feb 2005 11:24:25 +0000 Subject: [PATCH] - Added support for SetSchemaInfo - Uses the aliasname as the displayname --- fcl/db/sqldb/interbase/ibconnection.pp | 83 ++++++++++++++++++++++---- 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/fcl/db/sqldb/interbase/ibconnection.pp b/fcl/db/sqldb/interbase/ibconnection.pp index 6a67691b27..7d00a0cd71 100644 --- a/fcl/db/sqldb/interbase/ibconnection.pp +++ b/fcl/db/sqldb/interbase/ibconnection.pp @@ -78,7 +78,7 @@ type procedure CommitRetaining(trans : TSQLHandle); override; procedure RollBackRetaining(trans : TSQLHandle); override; procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); override; - + function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override; published property Dialect : integer read FDialect write FDialect; property DatabaseName; @@ -478,6 +478,7 @@ var lenset : boolean; TransLen : word; TransType : TFieldType; + FD : TFieldDef; begin {$R-} @@ -486,13 +487,11 @@ begin for x := 0 to SQLDA^.SQLD - 1 do begin TranslateFldType(SQLDA^.SQLVar[x].SQLType, SQLDA^.SQLVar[x].SQLLen, SQLDA^.SQLVar[x].SQLScale, - lenset, TransType, TransLen); - if TransType = ftBCD then - TFieldDef.Create(FieldDefs, SQLDA^.SQLVar[x].SQLName, TransType, - TransLen, False, (x + 1)).precision := SQLDA^.SQLVar[x].SQLLen - else - TFieldDef.Create(FieldDefs, SQLDA^.SQLVar[x].SQLName, TransType, - TransLen, False, (x + 1)); + lenset, TransType, TransLen); + FD := TFieldDef.Create(FieldDefs, SQLDA^.SQLVar[x].SQLName, TransType, + TransLen, False, (x + 1)); + if TransType = ftBCD then FD.precision := SQLDA^.SQLVar[x].SQLLen; + FD.DisplayName := SQLDA^.SQLVar[x].AliasName; end; end; {$R+} @@ -531,9 +530,9 @@ begin begin {$R-} for x := 0 to SQLDA^.SQLD - 1 do - if SQLDA^.SQLVar[x].SQLName = FieldDef.Name then break; + if SQLDA^.SQLVar[x].AliasName = FieldDef.Name then break; - if SQLDA^.SQLVar[x].SQLName <> FieldDef.Name then + if SQLDA^.SQLVar[x].AliasName <> FieldDef.Name then DatabaseErrorFmt(SFieldNotFound,[FieldDef.Name],self); if SQLDA^.SQLVar[x].SQLInd^ = -1 then @@ -617,6 +616,70 @@ begin Move(PTime, Buffer^, SizeOf(PTime)); end; +function TIBConnection.GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; + +var s : string; + +begin + case SchemaType of + stTables : s := 'select '+ + 'rdb$relation_id as recno, '+ + '''' + DatabaseName + ''' as catalog_name, '+ + ''''' as schema_name, '+ + 'rdb$relation_name as table_name, '+ + '0 as table_type '+ + 'from '+ + 'rdb$relations '+ + 'where '+ + '(rdb$system_flag = 0 or rdb$system_flag is null)'; // and rdb$view_blr is null + stSysTables : s := 'select '+ + 'rdb$relation_id as recno, '+ + '''' + DatabaseName + ''' as catalog_name, '+ + ''''' as schema_name, '+ + 'rdb$relation_name as table_name, '+ + '0 as table_type '+ + 'from '+ + 'rdb$relations '+ + 'where '+ + '(rdb$system_flag > 0)'; // and rdb$view_blr is null + stProcedures : s := 'select '+ + 'rdb$procedure_id as recno, '+ + '''' + DatabaseName + ''' as catalog_name, '+ + ''''' as schema_name, '+ + 'rdb$procedure_name as proc_name, '+ + '0 as proc_type, '+ + 'rdb$procedure_inputs as in_params, '+ + 'rdb$procedure_outputs as out_params '+ + 'from '+ + 'rdb$procedures '+ + 'WHERE '+ + '(rdb$system_flag = 0 or rdb$system_flag is null)'; + stColumns : s := 'select '+ + 'rdb$procedure_id as recno, '+ + '''' + DatabaseName + ''' as catalog_name, '+ + ''''' as schema_name, '+ + 'rdb$relation_name as table_name, '+ + 'rdb$field_name as column name, '+ + 'rdb$field_position as column_position, '+ + '0 as column_type, '+ + '0 as column_datatype, '+ + ''''' as column_typename, '+ + '0 as column_subtype, '+ + '0 as column_precision, '+ + '0 as column_scale, '+ + '0 as column_length, '+ + '0 as column_nullable '+ + 'from '+ + 'rdb$relation_fields '+ + 'WHERE '+ + '(rdb$system_flag = 0 or rdb$system_flag is null)'; + else + DatabaseError(SMetadataUnavailable) + end; {case} + result := s; +end; + + procedure TIBConnection.UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); var qry : TSQLQuery;