@@ -474,11 +474,11 @@ int EXTRACT_list_table(const QualifiedMetaString& relation_name,
474474 if (!FLD.RDB$CHARACTER_SET_ID.NULL)
475475 char_set_id = FLD.RDB$CHARACTER_SET_ID;
476476
477- ISQL_get_character_sets(char_set_id, collation, getDefaultCharSetForSchemaFunc(relation_name.schema),
478- Get::CHARSET_ONLY, false, char_sets);
479-
480- if (char_sets.hasData())
477+ if (ISQL_get_character_sets(char_set_id, collation,
478+ getDefaultCharSetForSchemaFunc(relation_name.schema), Get::CHARSET_ONLY, false, char_sets))
479+ {
481480 isqlGlob.prints(char_sets.c_str());
481+ }
482482
483483 // CVC: Someone deleted the code that checks intchar when handling collations
484484 // several lines below, so it didn't have any effect. Commented it.
@@ -501,10 +501,8 @@ int EXTRACT_list_table(const QualifiedMetaString& relation_name,
501501 {
502502 string collate_name;
503503
504- ISQL_get_character_sets(char_set_id, collation, getDefaultCharSetForSchemaFunc(relation_name.schema),
505- Get::COLLATE_ONLY, false, collate_name);
506-
507- if (collate_name.hasData())
504+ if (ISQL_get_character_sets(char_set_id, collation,
505+ getDefaultCharSetForSchemaFunc(relation_name.schema), Get::COLLATE_ONLY, false, collate_name))
508506 {
509507 isqlGlob.printf("(CAST(NULL AS VARCHAR(1)%s)", char_sets.c_str());
510508 isqlGlob.printf("%s)", collate_name.c_str());
@@ -598,11 +596,11 @@ int EXTRACT_list_table(const QualifiedMetaString& relation_name,
598596
599597 if (!RFR.RDB$COLLATION_ID.NULL)
600598 {
601- ISQL_get_character_sets(char_set_id, collation, getDefaultCharSetForSchemaFunc(relation_name.schema),
602- Get::COLLATE_ONLY, false, char_sets);
603-
604- if (char_sets.hasData())
599+ if (ISQL_get_character_sets(char_set_id, collation,
600+ getDefaultCharSetForSchemaFunc(relation_name.schema), Get::COLLATE_ONLY, false, char_sets))
601+ {
605602 isqlGlob.prints(char_sets.c_str());
603+ }
606604 }
607605 }
608606 END_FOR
@@ -803,12 +801,12 @@ static void get_procedure_args(const QualifiedMetaString& proc_name,
803801 if ((FLD.RDB$FIELD_TYPE == blr_text || FLD.RDB$FIELD_TYPE == blr_varying) &&
804802 !prm_collation_id_null)
805803 {
806- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, prm_collation_id,
807- getDefaultCharSetForSchemaFunc(proc_name.schema),
808- Get::COLLATE_ONLY, !prm_null_flag_null && prm_null_flag, char_sets);
809-
810- if (char_sets.hasData())
804+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, prm_collation_id,
805+ getDefaultCharSetForSchemaFunc(proc_name.schema),
806+ Get::COLLATE_ONLY, !prm_null_flag_null && prm_null_flag, char_sets))
807+ {
811808 isqlGlob.prints(char_sets.c_str());
809+ }
812810 }
813811 else if (!prm_null_flag_null && prm_null_flag)
814812 isqlGlob.printf(" NOT NULL");
@@ -859,12 +857,12 @@ static void get_procedure_args(const QualifiedMetaString& proc_name,
859857 if (FLD.RDB$CHARACTER_SET_ID.NULL)
860858 FLD.RDB$CHARACTER_SET_ID = 0;
861859
862- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, collation,
863- getDefaultCharSetForSchemaFunc(proc_name.schema),
864- Get::BOTH, !prm_null_flag_null && prm_null_flag, char_sets);
865-
866- if (char_sets.hasData())
860+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, collation,
861+ getDefaultCharSetForSchemaFunc(proc_name.schema),
862+ Get::BOTH, !prm_null_flag_null && prm_null_flag, char_sets))
863+ {
867864 isqlGlob.prints(char_sets.c_str());
865+ }
868866 }
869867 else if (!prm_null_flag_null && prm_null_flag)
870868 isqlGlob.printf(" NOT NULL");
@@ -999,12 +997,12 @@ static void get_function_args_ods12(const QualifiedMetaString& func_name, USHORT
999997 if ((FLD.RDB$FIELD_TYPE == blr_text || FLD.RDB$FIELD_TYPE == blr_varying) &&
1000998 !prm_collation_id_null)
1001999 {
1002- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, prm_collation_id,
1003- getDefaultCharSetForSchemaFunc(func_name.schema),
1004- Get::COLLATE_ONLY, !prm_null_flag_null && prm_null_flag, char_sets);
1005-
1006- if (char_sets.hasData())
1000+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, prm_collation_id,
1001+ getDefaultCharSetForSchemaFunc(func_name.schema),
1002+ Get::COLLATE_ONLY, !prm_null_flag_null && prm_null_flag, char_sets))
1003+ {
10071004 isqlGlob.prints(char_sets.c_str());
1005+ }
10081006 }
10091007 else if (!prm_null_flag_null && prm_null_flag)
10101008 isqlGlob.printf(" NOT NULL");
@@ -1055,12 +1053,12 @@ static void get_function_args_ods12(const QualifiedMetaString& func_name, USHORT
10551053 if (FLD.RDB$CHARACTER_SET_ID.NULL)
10561054 FLD.RDB$CHARACTER_SET_ID = 0;
10571055
1058- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, collation,
1059- getDefaultCharSetForSchemaFunc(func_name.schema), Get::BOTH,
1060- !prm_null_flag_null && prm_null_flag, char_sets);
1061-
1062- if (char_sets.hasData())
1056+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, collation,
1057+ getDefaultCharSetForSchemaFunc(func_name.schema), Get::BOTH,
1058+ !prm_null_flag_null && prm_null_flag, char_sets))
1059+ {
10631060 isqlGlob.prints(char_sets.c_str());
1061+ }
10641062 }
10651063 else if (!prm_null_flag_null && prm_null_flag)
10661064 isqlGlob.printf(" NOT NULL");
@@ -2185,12 +2183,11 @@ static void list_domain_table(const QualifiedMetaString& table_name,
21852183 !(((FLD.RDB$FIELD_TYPE == blr_text) || (FLD.RDB$FIELD_TYPE == blr_varying)) &&
21862184 FLD.RDB$FIELD_SUB_TYPE != fb_text_subtype_text))
21872185 {
2188- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2189- getDefaultCharSetForSchemaFunc(name.schema),
2190- Get::CHARSET_ONLY, false, char_sets);
2191-
2192- if (char_sets.hasData())
2186+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2187+ getDefaultCharSetForSchemaFunc(name.schema), Get::CHARSET_ONLY, false, char_sets))
2188+ {
21932189 isqlGlob.prints(char_sets.c_str());
2190+ }
21942191 }
21952192
21962193 if (!FLD.RDB$DEFAULT_SOURCE.NULL)
@@ -2215,12 +2212,11 @@ static void list_domain_table(const QualifiedMetaString& table_name,
22152212
22162213 if (!FLD.RDB$COLLATION_ID.NULL)
22172214 {
2218- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2219- getDefaultCharSetForSchemaFunc(name.schema),
2220- Get::COLLATE_ONLY, false, char_sets);
2221-
2222- if (char_sets.hasData())
2215+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2216+ getDefaultCharSetForSchemaFunc(name.schema), Get::COLLATE_ONLY, false, char_sets))
2217+ {
22232218 isqlGlob.prints(char_sets.c_str());
2219+ }
22242220 }
22252221
22262222 isqlGlob.printf("%s%s", isqlGlob.global_Term, NEWLINE);
@@ -2304,12 +2300,12 @@ static void list_domains(GetDefaultCharSetForSchemaFunc getDefaultCharSetForSche
23042300 !(((FLD.RDB$FIELD_TYPE == blr_text) || (FLD.RDB$FIELD_TYPE == blr_varying)) &&
23052301 FLD.RDB$FIELD_SUB_TYPE != fb_text_subtype_text))
23062302 {
2307- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2308- getDefaultCharSetForSchemaFunc(name.schema),
2309- Get::CHARSET_ONLY, false, char_sets);
2310-
2311- if (char_sets.hasData())
2303+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2304+ getDefaultCharSetForSchemaFunc(name.schema),
2305+ Get::CHARSET_ONLY, false, char_sets))
2306+ {
23122307 isqlGlob.prints(char_sets.c_str());
2308+ }
23132309 }
23142310
23152311 if (!FLD.RDB$DEFAULT_SOURCE.NULL)
@@ -2330,12 +2326,11 @@ static void list_domains(GetDefaultCharSetForSchemaFunc getDefaultCharSetForSche
23302326
23312327 if (!FLD.RDB$COLLATION_ID.NULL)
23322328 {
2333- ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2334- getDefaultCharSetForSchemaFunc(name.schema),
2335- Get::COLLATE_ONLY, false, char_sets);
2336-
2337- if (char_sets.hasData())
2329+ if (ISQL_get_character_sets(FLD.RDB$CHARACTER_SET_ID, FLD.RDB$COLLATION_ID,
2330+ getDefaultCharSetForSchemaFunc(name.schema), Get::COLLATE_ONLY, false, char_sets))
2331+ {
23382332 isqlGlob.prints(char_sets.c_str());
2333+ }
23392334 }
23402335
23412336 isqlGlob.printf("%s%s", isqlGlob.global_Term, NEWLINE);
@@ -2453,12 +2448,12 @@ static void listRelationComputed(LegacyTables flag, GetDefaultCharSetForSchemaFu
24532448 {
24542449 collation = RFR.RDB$COLLATION_ID;
24552450 char_set_id = FLD.RDB$CHARACTER_SET_ID;
2456- ISQL_get_character_sets(char_set_id, collation,
2457- getDefaultCharSetForSchemaFunc(relationName.schema),
2458- Get::COLLATE_ONLY, false, char_sets);
24592451
2460- if (char_sets.hasData())
2452+ if (ISQL_get_character_sets(char_set_id, collation,
2453+ getDefaultCharSetForSchemaFunc(relationName.schema), Get::COLLATE_ONLY, false, char_sets))
2454+ {
24612455 isqlGlob.prints(char_sets.c_str());
2456+ }
24622457 }
24632458 }
24642459 else
@@ -2515,16 +2510,18 @@ static void listRelationComputed(LegacyTables flag, GetDefaultCharSetForSchemaFu
25152510
25162511 if (!FLD.RDB$CHARACTER_SET_ID.NULL)
25172512 char_set_id = FLD.RDB$CHARACTER_SET_ID;
2513+
25182514 if (char_set_id != getDefaultCharSetForSchemaFunc(relationName.schema))
25192515 {
25202516 // Currently ALTER TABLE syntax doesn't allow collation here.
2521- ISQL_get_character_sets(char_set_id, collation,
2522- getDefaultCharSetForSchemaFunc(relationName.schema),
2523- Get::CHARSET_ONLY, false, char_sets);
2517+ if (ISQL_get_character_sets(char_set_id, collation,
2518+ getDefaultCharSetForSchemaFunc(relationName.schema),
2519+ Get::CHARSET_ONLY, false, char_sets))
2520+ {
2521+ isqlGlob.prints(char_sets.c_str());
2522+ }
25242523 }
25252524
2526- if (char_sets.hasData())
2527- isqlGlob.prints(char_sets.c_str());
25282525 // CVC: Someone deleted the code that checks intchar when handling collations
25292526 // several lines below, so it didn't have any effect. Commented it.
25302527 //if (!char_set_id)
@@ -2770,7 +2767,7 @@ static void list_functions_legacy()
27702767 bool firstarg = true;
27712768
27722769 FOR FNA IN RDB$FUNCTION_ARGUMENTS
2773- WITH FNA.RDB$SCHEMA_NAME EQUIV FUN.RDB$SCHEMA_NAME AND
2770+ WITH FNA.RDB$SCHEMA_NAME EQUIV NULLIF( FUN.RDB$SCHEMA_NAME, '') AND
27742771 FNA.RDB$FUNCTION_NAME EQ FUN.RDB$FUNCTION_NAME AND
27752772 FNA.RDB$PACKAGE_NAME MISSING
27762773 SORTED BY FNA.RDB$ARGUMENT_POSITION
@@ -3298,7 +3295,6 @@ static void list_schemas()
32983295 bool first = true;
32993296
33003297 FOR SCH IN RDB$SCHEMAS
3301- CROSS DB IN RDB$DATABASE
33023298 WITH (SCH.RDB$SYSTEM_FLAG NE 1 OR SCH.RDB$SYSTEM_FLAG MISSING)
33033299 SORTED BY SCH.RDB$SCHEMA_NAME
33043300 {
0 commit comments