Skip to content

Commit e9beaeb

Browse files
committed
Substring fix+refactoring & expand META IDs
1. Substring() works more accurate way 2. Meta IDs are expanded from 31->63 everywhere. 3. Build number 3.0.0.4
1 parent acec070 commit e9beaeb

15 files changed

+144
-113
lines changed

IscDbc/IscColumnPrivilegesResultSet.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ IscColumnPrivilegesResultSet::IscColumnPrivilegesResultSet(IscDatabaseMetaData *
4646
void IscColumnPrivilegesResultSet::getColumnPrivileges(const char * catalog, const char * schemaPattern, const char * tableNamePattern, const char * columnNamePattern)
4747
{
4848
char sql[4096] = "select cast ('' as varchar(7)) as table_cat,"
49-
"cast (tbl.rdb$owner_name as varchar(31)) as table_schem,"
50-
"cast (rfr.rdb$relation_name as varchar(31)) as table_name,"
51-
"cast (rfr.rdb$field_name as varchar(31)) as column_name,"
52-
"cast (priv.rdb$grantor as varchar(31)) as grantor,"
53-
"cast (priv.rdb$user as varchar(31)) as grantee,"
49+
"cast (tbl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_schem,"
50+
"cast (rfr.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_name,"
51+
"cast (rfr.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name,"
52+
"cast (priv.rdb$grantor as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as grantor,"
53+
"cast (priv.rdb$user as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as grantee,"
5454
"cast( priv.rdb$privilege as varchar(11) ) as privilege,"
5555
"cast ( priv.rdb$grant_option as varchar(3) ) as is_grantable "
5656
"from rdb$relation_fields rfr, rdb$user_privileges priv, rdb$relations tbl\n"

IscDbc/IscColumnsResultSet.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ void IscColumnsResultSet::getColumns(const char * catalog, const char * schemaPa
8484
if (catalog && *catalog)
8585
addString(pt, catalog);
8686
addString(pt, "' as varchar(255)) as table_cat,\n" // 1 - VARCHAR
87-
"\tcast (tbl.rdb$owner_name as varchar(31)) as table_schem,\n" // 2 - VARCHAR
88-
"\tcast (rfr.rdb$relation_name as varchar(31)) as table_name,\n" // 3 - VARCHAR NOT NULL
89-
"\tcast (rfr.rdb$field_name as varchar(31)) as column_name,\n" // 4 - VARCHAR NOT NULL
87+
"\tcast (tbl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_schem,\n" // 2 - VARCHAR
88+
"\tcast (rfr.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_name,\n" // 3 - VARCHAR NOT NULL
89+
"\tcast (rfr.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name,\n" // 4 - VARCHAR NOT NULL
9090
"\tfld.rdb$field_type as data_type,\n" // 5 - SMALLINT NOT NULL
91-
"\tcast (fld.rdb$field_name as varchar(31)) as type_name,\n" // 6 - VARCHAR NOT NULL
91+
"\tcast (fld.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as type_name,\n" // 6 - VARCHAR NOT NULL
9292
"\tcast (fld.rdb$collation_id as integer) as column_size,\n" // 7 - INTEGER
9393
"\tcast (fld.rdb$character_set_id as integer) as buffer_length,\n" // 8 - INTEGER
9494
"\tcast (fld.rdb$field_scale as smallint) as decimal_digits,\n" // 9 - SMALLINT

IscDbc/IscCrossReferenceResultSet.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,18 @@ void IscCrossReferenceResultSet::getCrossReference (const char * primaryCatalog,
5757
{
5858
char sql[4096] =
5959
"select cast ('' as varchar(7)) as pktable_cat,\n" // 1
60-
" cast (ptbl.rdb$owner_name as varchar(31)) as pktable_schem,\n" // 2
61-
" cast (pidx.rdb$relation_name as varchar(31)) as pktable_name,\n" // 3
62-
" cast (pseg.rdb$field_name as varchar(31)) as pkcolumn_name,\n" // 4
60+
" cast (ptbl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as pktable_schem,\n" // 2
61+
" cast (pidx.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as pktable_name,\n" // 3
62+
" cast (pseg.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as pkcolumn_name,\n" // 4
6363
" cast ('' as varchar(7)) as fktable_cat,\n" // 5
64-
" cast (ftbl.rdb$owner_name as varchar(31)) as fktable_schem,\n"// 6
65-
" cast (fidx.rdb$relation_name as varchar(31)) as fktable_name,\n" // 7
66-
" cast (fseg.rdb$field_name as varchar(31)) as fkcolumn_name,\n" // 8
64+
" cast (ftbl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as fktable_schem,\n" // 6
65+
" cast (fidx.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as fktable_name,\n" // 7
66+
" cast (fseg.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as fkcolumn_name,\n" // 8
6767
" cast (pseg.rdb$field_position+1 as smallint) as key_seq,\n" // 9
6868
" cast (0 as smallint) as update_rule,\n" // 10
6969
" cast (0 as smallint) as delete_rule,\n" // 11
70-
" cast (fkey.rdb$constraint_name as varchar(31)) as fk_name,\n" // 12
71-
" cast (refc.rdb$const_name_uq as varchar(31)) as pk_name,\n" // 13
70+
" cast (fkey.rdb$constraint_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as fk_name,\n" // 12
71+
" cast (refc.rdb$const_name_uq as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as pk_name,\n" // 13
7272
" 7 as deferrability,\n" // 14 SQL_NOT_DEFERRABLE
7373
" refc.rdb$update_rule,\n" // 15
7474
" refc.rdb$delete_rule\n" // 16

IscDbc/IscDatabaseMetaData.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,7 @@ int IscDatabaseMetaData::getMaxCharLiteralLength()
826826

827827
int IscDatabaseMetaData::getMaxColumnNameLength()
828828
{
829-
return 31;
829+
return MAX_META_IDENT_LEN;
830830
}
831831

832832
int IscDatabaseMetaData::getMaxColumnsInGroupBy()
@@ -864,7 +864,7 @@ int IscDatabaseMetaData::getMaxConnections()
864864

865865
int IscDatabaseMetaData::getMaxCursorNameLength()
866866
{
867-
return 31;
867+
return MAX_META_IDENT_LEN;
868868
}
869869

870870
int IscDatabaseMetaData::getMaxIndexLength()
@@ -879,7 +879,7 @@ int IscDatabaseMetaData::getMaxSchemaNameLength()
879879

880880
int IscDatabaseMetaData::getMaxProcedureNameLength()
881881
{
882-
return 31;
882+
return MAX_META_IDENT_LEN;
883883
}
884884

885885
int IscDatabaseMetaData::getMaxCatalogNameLength()
@@ -910,7 +910,7 @@ int IscDatabaseMetaData::getMaxStatements()
910910

911911
int IscDatabaseMetaData::getMaxTableNameLength()
912912
{
913-
return 31;
913+
return MAX_META_IDENT_LEN;
914914
}
915915

916916
int IscDatabaseMetaData::getMaxTablesInSelect()
@@ -920,7 +920,7 @@ int IscDatabaseMetaData::getMaxTablesInSelect()
920920

921921
int IscDatabaseMetaData::getMaxUserNameLength()
922922
{
923-
return 31;
923+
return MAX_META_IDENT_LEN;
924924
}
925925

926926
int IscDatabaseMetaData::getDefaultTransactionIsolation()

IscDbc/IscDbc.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ typedef unsigned __int64 UQUAD;
166166
#define MAX_TIMESTAMP_LENGTH 24
167167
#define MAX_QUAD_LENGTH 18
168168

169+
#define MAX_META_IDENT_LEN 63
170+
#define MACRO_TO_STR_(s) #s
171+
#define MACRO_TO_STR(s) MACRO_TO_STR_(s)
172+
169173
namespace IscDbcLibrary
170174
{
171175
int getTypeStatement(IscConnection *connection, Firebird::IStatement* Stmt,const void * buffer, int bufferLength, int *lengthPtr);

IscDbc/IscIndexInfoResultSet.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,41 +69,41 @@ void IscIndexInfoResultSet::getIndexInfo(const char * catalog,
6969
const char *szAnd = " and ";
7070
char sqlQuery[4096] =
7171
"select cast('' as varchar(7)) as table_cat,\n" // 1
72-
"\tcast(rl.rdb$owner_name as varchar(31)) as table_schem,\n" // 2
73-
"\tcast(rl.rdb$relation_name as varchar(31)) as table_name,\n" // 3
72+
"\tcast(rl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_schem,\n" // 2
73+
"\tcast(rl.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_name,\n" // 3
7474
"\tcast(0 as smallint) as non_unique,\n" // 4
75-
"\tcast(NULL as varchar(31)) as index_qualifier,\n" // 5
76-
"\tcast(NULL as varchar(31)) index_name,\n" // 6
75+
"\tcast(NULL as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as index_qualifier,\n" // 5
76+
"\tcast(NULL as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) index_name,\n" // 6
7777
"\tcast(0 as smallint) as index_type,\n" // 7 SQL_TABLE_STAT
7878
"\tcast(NULL as smallint) as ordinal_position,\n" // 8
79-
"\tcast(NULL as varchar(31)) as column_name,\n" // 9
79+
"\tcast(NULL as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name,\n" // 9
8080
"\tcast(NULL as char CHARACTER SET NONE) as asc_or_desc,\n" // 10
8181
"\tcast(NULL as integer) as cardinality,\n" // 11
8282
"\tcast(NULL as integer) as index_pages,\n" // 12
83-
"\tcast(NULL as varchar(31)) as filter_condition,\n" // 13
83+
"\tcast(NULL as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as filter_condition,\n" // 13
8484
"\tcast(NULL as smallint) as index_type,\n" // 14
85-
"\tcast(NULL as varchar(31)) as constraint_type\n" // 15
85+
"\tcast(NULL as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as constraint_type\n" // 15
8686
"from rdb$relations rl\n";
8787

8888
char sql[2048] =
8989
"\tunion\n"
9090
"select cast('' as varchar(7)) as table_cat,\n" // 1
91-
"\tcast(tbl.rdb$owner_name as varchar(31)) as table_schem,\n" // 2
92-
"\tcast(idx.rdb$relation_name as varchar(31)) as table_name,\n" // 3
91+
"\tcast(tbl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_schem,\n" // 2
92+
"\tcast(idx.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_name,\n" // 3
9393
"\tcast((1-idx.rdb$unique_flag) as smallint) as non_unique,\n" // 4
94-
"\tcast(idx.rdb$index_name as varchar(31)) as index_qualifier,\n" // 5
95-
"\tcast(idx.rdb$index_name as varchar(31)) as index_name,\n" // 6
94+
"\tcast(idx.rdb$index_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as index_qualifier,\n" // 5
95+
"\tcast(idx.rdb$index_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as index_name,\n" // 6
9696
"\tcast(3 as smallint) as index_type,\n" // 7 (SQL_INDEX_OTHER)
9797
"\tcast(seg.rdb$field_position as smallint) as ordinal_position,\n" // 8
9898
"\tcast(coalesce(seg.rdb$field_name,\n"
99-
"substring(idx.rdb$expression_source from 1 for 31)) as varchar(31)) as column_name,\n" // 9
99+
"substring(idx.rdb$expression_source from 1 for " MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name,\n" // 9
100100
"\tcast(NULL as char CHARACTER SET NONE) as asc_or_desc,\n" // 10
101101
"\tcast((case when idx.rdb$statistics = 0 then 0 else\n"
102102
"1/idx.rdb$statistics end) as integer) as cardinality,\n" // 11
103103
"\tcast(NULL as integer) as index_pages,\n" // 12
104-
"\tcast(NULL as varchar(31)) as filter_condition,\n" // 13
104+
"\tcast(NULL as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as filter_condition,\n" // 13
105105
"\tcast(idx.rdb$index_type as smallint) as index_type,\n" // 14
106-
"\tcast(relc.rdb$constraint_type as varchar(31)) as constraint_type\n" // 15
106+
"\tcast(relc.rdb$constraint_type as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as constraint_type\n" // 15
107107
"from rdb$indices idx\n"
108108
"\tleft join rdb$relations tbl on tbl.rdb$relation_name = idx.rdb$relation_name\n"
109109
"\tleft join rdb$index_segments seg on idx.rdb$index_name = seg.rdb$index_name\n"

IscDbc/IscPrimaryKeysResultSet.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ void IscPrimaryKeysResultSet::getPrimaryKeys(const char * catalog, const char *
4343
{
4444
char sql[2048] =
4545
"select cast ('' as varchar(7)) as table_cat,\n" // 1
46-
"\tcast (tbl.rdb$owner_name as varchar(31)) as table_schem,\n" // 2
47-
"\tcast (rel.rdb$relation_name as varchar(31)) as table_name,\n" // 3
48-
"\tcast (seg.rdb$field_name as varchar(31)) as column_name,\n" // 4
46+
"\tcast (tbl.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_schem,\n" // 2
47+
"\tcast (rel.rdb$relation_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as table_name,\n" // 3
48+
"\tcast (seg.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name,\n" // 4
4949
"\tcast (seg.rdb$field_position+1 as smallint) as key_seq,\n" // 5
50-
"\tcast (rel.rdb$constraint_name as varchar(31)) as pk_name\n" // 6
50+
"\tcast (rel.rdb$constraint_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as pk_name\n" // 6
5151
"from rdb$relation_constraints rel, rdb$indices idx, rdb$index_segments seg,\n"
5252
" rdb$relations tbl\n"
5353
" where rel.rdb$constraint_type = 'PRIMARY KEY'\n"

IscDbc/IscProcedureColumnsResultSet.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ void IscProcedureColumnsResultSet::getProcedureColumns(const char * catalog,
8686
if (catalog && *catalog)
8787
addString(pt, catalog);
8888
addString(pt, "' as varchar(255)) as procedure_cat,\n" // 1
89-
"\tcast (p.rdb$owner_name as varchar(31)) as procedure_schem,\n" // 2
90-
"\tcast (pp.rdb$procedure_name as varchar(31)) as procedure_name,\n" // 3
91-
"\tcast (pp.rdb$parameter_name as varchar(31)) as column_name,\n" // 4
89+
"\tcast (p.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as procedure_schem,\n" // 2
90+
"\tcast (pp.rdb$procedure_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as procedure_name,\n" // 3
91+
"\tcast (pp.rdb$parameter_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name,\n" // 4
9292
"\tpp.rdb$parameter_type as column_type,\n" // 5
9393
"\tf.rdb$field_type as data_type,\n" // 6
94-
"\tcast (pp.rdb$procedure_name as varchar(31)) as type_name,\n" // 7
94+
"\tcast (pp.rdb$procedure_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as type_name,\n" // 7
9595
"\tcast ( f.rdb$field_length as integer ) as column_size,\n" // 8
9696
"\tcast ( null as integer ) as buffer_length,\n" // 9
9797
"\tcast ( f.rdb$field_scale as smallint) as decimal_digits,\n" // 10

IscDbc/IscProceduresResultSet.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ void IscProceduresResultSet::getProcedures(const char * catalog, const char * sc
5151
if (catalog && *catalog)
5252
addString(pt, catalog);
5353
addString(pt, "' as varchar(255)) as procedure_cat,\n" // 1
54-
"\tcast (proc.rdb$owner_name as varchar(31)) as procedure_schem,\n" // 2
55-
"\tcast (proc.rdb$procedure_name as varchar(31)) as procedure_name,\n" // 3
54+
"\tcast (proc.rdb$owner_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as procedure_schem,\n" // 2
55+
"\tcast (proc.rdb$procedure_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as procedure_name,\n" // 3
5656
"\tproc.rdb$procedure_inputs as num_input_params,\n" // 4
5757
"\tproc.rdb$procedure_outputs as num_output_params,\n" // 5
5858
"\t1 as num_result_sets,\n" // 6

IscDbc/IscSpecialColumnsResultSet.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ void IscSpecialColumnsResultSet::specialColumns (const char * catalog, const cha
6060
{
6161
char sql[2048] =
6262
"select distinct f.rdb$field_type as scope,\n" // 1
63-
"\tcast (rfr.rdb$field_name as varchar(31)) as column_name, \n" // 2
63+
"\tcast (rfr.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as column_name, \n" // 2
6464
"\tf.rdb$field_type as data_type,\n" // 3
65-
"\tcast (rfr.rdb$field_name as varchar(31)) as type_name,\n" // 4
65+
"\tcast (rfr.rdb$field_name as varchar(" MACRO_TO_STR(MAX_META_IDENT_LEN) ")) as type_name,\n" // 4
6666
"\t0 as column_size,\n" // 5
6767
"\t0 as buffer_length,\n" // 6
6868
"\t0 as decimal_digits,\n" // 7

0 commit comments

Comments
 (0)