select 'TABLE' table_type from rdb$Relations where (rdb$System_Flag = 0 or rdb$System_Flag is null) AND rdb$View_Source is null and rdb$Relation_name = union all select 'VIEW' table_type from rdb$Relations where (rdb$System_Flag = 0 or rdb$System_Flag is null) AND rdb$View_Source is not null and rdb$Relation_name = SELECT trim( rdb$relations.rdb$relation_name ) as table_name, trim( col.rdb$field_name ) as name, pkColumn.rdb$field_name as primarykey, 'false' as identity, colcon.rdb$field_name as not_nullable, rdb$fields.rdb$field_type as dbdatatype, rdb$fields.rdb$field_length as length, col.rdb$default_value as first_default, rdb$fields.rdb$default_value as second_default from RDB$RELATIONS inner join RDB$RELATION_FIELDS as col on rdb$relations.rdb$relation_name = col.rdb$relation_name left join RDB$RELATION_CONSTRAINTS as tabCon on col.rdb$relation_name = tabcon.rdb$relation_name and tabCon.rdb$constraint_type = 6 left join RDB$RELATION_CONSTRAINT_FLDS as colCon on col.rdb$field_name = colcon.rdb$field_name and tabcon.rdb$constraint_type = 6 left join RDB$RELATION_CONSTRAINTS as pkTable on col.rdb$relation_name = pkTable.rdb$relation_name and pkTable.rdb$constraint_type = 2 left join RDB$RELATION_CONSTRAINT_FLDS as pkColumn on col.rdb$field_name = pkColumn.rdb$field_name and pkTable.rdb$constraint_name = pkColumn.rdb$constraint_name and pkTable.rdb$constraint_type = 2 left join RDB$FIELDS on col.rdb$field_source = rdb$fields.rdb$field_name where rdb$relations.rdb$relation_name = thisDefault = ""; if (first_default is "") { thisDefault = second_default; } else { thisDefault = first_default; }