|
| 1 | +// Copyright (C) 2021 Xtensive LLC. |
| 2 | +// This code is distributed under MIT license terms. |
| 3 | +// See the License.txt file in the project root for more information. |
| 4 | + |
| 5 | +namespace Xtensive.Sql.Drivers.Firebird.v3_0 |
| 6 | +{ |
| 7 | + internal partial class Extractor |
| 8 | + { |
| 9 | + protected override string GetExtractTableColumnsQuery() |
| 10 | + { |
| 11 | + return @" |
| 12 | +select schema |
| 13 | + ,table_name |
| 14 | + ,ordinal_position |
| 15 | + ,column_name |
| 16 | + ,field_type |
| 17 | + ,column_subtype |
| 18 | + ,column_size |
| 19 | + ,numeric_precision |
| 20 | + ,-numeric_scale as numeric_scale |
| 21 | + ,character_max_length |
| 22 | + ,(1 - coalesce(column_nullable,0)) as column_nullable |
| 23 | + ,column_default |
| 24 | + ,relation_type |
| 25 | +from (select cast(null as varchar(30)) as schema |
| 26 | + ,trim(rfr.rdb$relation_name) as table_name |
| 27 | + ,trim(rfr.rdb$field_name) as column_name |
| 28 | + ,fld.rdb$field_sub_type as column_subtype |
| 29 | + ,cast(fld.rdb$field_length as integer) as column_size |
| 30 | + ,cast(fld.rdb$field_precision as integer) as numeric_precision |
| 31 | + ,cast(fld.rdb$field_scale as integer) as numeric_scale |
| 32 | + ,cast(fld.rdb$character_length as integer) as character_max_length |
| 33 | + ,cast(fld.rdb$field_length as integer) as character_octet_length |
| 34 | + ,rfr.rdb$field_position as ordinal_position |
| 35 | + ,trim(rfr.rdb$field_source) as domain_name |
| 36 | + ,trim(rfr.rdb$default_source) as column_default |
| 37 | + ,trim(fld.rdb$computed_source) as computed_source |
| 38 | + ,fld.rdb$dimensions as column_array |
| 39 | + ,coalesce(fld.rdb$null_flag, rfr.rdb$null_flag) as column_nullable |
| 40 | + ,0 as is_readonly |
| 41 | + ,fld.rdb$field_type as field_type |
| 42 | + ,trim(cs.rdb$character_set_name) as character_set_name |
| 43 | + ,trim(coll.rdb$collation_name) as collation_name |
| 44 | + ,trim(rfr.rdb$description) as description |
| 45 | + ,cast(rr.rdb$relation_type as integer) as relation_type |
| 46 | + from rdb$relations rr join rdb$relation_fields rfr on rfr.rdb$relation_name = rr.rdb$relation_name |
| 47 | + left join rdb$fields fld on rfr.rdb$field_source = fld.rdb$field_name |
| 48 | + left join rdb$character_sets cs |
| 49 | + on cs.rdb$character_set_id = fld.rdb$character_set_id |
| 50 | + left join rdb$collations coll |
| 51 | + on (coll.rdb$collation_id = fld.rdb$collation_id |
| 52 | + and coll.rdb$character_set_id = fld.rdb$character_set_id) |
| 53 | + where rr.rdb$relation_type in (0, 4, 5) and rr.rdb$relation_name not starts with 'RDB$' and rr.rdb$relation_name not starts with 'MON$' |
| 54 | + order by table_name, ordinal_position)"; |
| 55 | + } |
| 56 | + |
| 57 | + protected override string GetExtractUniqueAndPrimaryKeyConstraintsQuery() |
| 58 | + { |
| 59 | + return @" |
| 60 | +select cast(null as varchar(30)) as schema |
| 61 | + ,trim(rel.rdb$relation_name) as table_name |
| 62 | + ,trim(rel.rdb$constraint_name) as constraint_name |
| 63 | + ,trim(rel.rdb$constraint_type) constraint_type |
| 64 | + ,trim(seg.rdb$field_name) as column_name |
| 65 | + ,seg.rdb$field_position as column_position |
| 66 | +from rdb$relation_constraints rel |
| 67 | +left join rdb$indices idx on rel.rdb$index_name = idx.rdb$index_name |
| 68 | +left join rdb$index_segments seg on idx.rdb$index_name = seg.rdb$index_name |
| 69 | +where rel.rdb$constraint_type in ('PRIMARY KEY', 'UNIQUE') |
| 70 | + and rel.rdb$relation_name not starts with 'RDB$' |
| 71 | + and rel.rdb$relation_name not starts with 'MON$' |
| 72 | +order by rel.rdb$relation_name, rel.rdb$constraint_name, seg.rdb$field_position"; |
| 73 | + } |
| 74 | + } |
| 75 | +} |
0 commit comments