Skip to content

Commit 5a4e3b5

Browse files
committed
Corrections and simplifications.
1 parent 2d8c902 commit 5a4e3b5

File tree

4 files changed

+77
-81
lines changed

4 files changed

+77
-81
lines changed

src/dsql/metd.epp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ dsql_udf* METD_get_function(jrd_tra* transaction, DsqlCompilerScratch* dsqlScrat
706706

707707
FOR(REQUEST_HANDLE handle3 TRANSACTION_HANDLE transaction)
708708
F IN RDB$FIELDS WITH
709-
F.RDB$SCHEMA_NAME EQUIV X.RDB$FIELD_SOURCE_SCHEMA_NAME AND
709+
F.RDB$SCHEMA_NAME EQ X.RDB$FIELD_SOURCE_SCHEMA_NAME AND
710710
F.RDB$FIELD_NAME EQ X.RDB$FIELD_SOURCE
711711
{
712712
if (X.RDB$ARGUMENT_POSITION == return_arg)
@@ -1076,7 +1076,7 @@ dsql_prc* METD_get_procedure(jrd_tra* transaction, DsqlCompilerScratch* dsqlScra
10761076
PR.RDB$PROCEDURE_NAME EQ qualifiedName.object.c_str() AND
10771077
PR.RDB$PARAMETER_TYPE = type AND
10781078
PR.RDB$PACKAGE_NAME EQUIV NULLIF(qualifiedName.package.c_str(), '') AND
1079-
FLD.RDB$SCHEMA_NAME EQUIV PR.RDB$FIELD_SOURCE_SCHEMA_NAME AND
1079+
FLD.RDB$SCHEMA_NAME EQ PR.RDB$FIELD_SOURCE_SCHEMA_NAME AND
10801080
FLD.RDB$FIELD_NAME EQ PR.RDB$FIELD_SOURCE
10811081
SORTED BY DESCENDING PR.RDB$PARAMETER_NUMBER
10821082
{
@@ -1134,10 +1134,7 @@ dsql_prc* METD_get_procedure(jrd_tra* transaction, DsqlCompilerScratch* dsqlScra
11341134
parameter->segLength = FLD.RDB$SEGMENT_LENGTH;
11351135

11361136
if (!PR.RDB$FIELD_NAME.NULL)
1137-
{
1138-
fb_utils::exact_name(PR.RDB$FIELD_NAME);
11391137
parameter->typeOfName = QualifiedName(PR.RDB$FIELD_NAME, PR.RDB$FIELD_SOURCE_SCHEMA_NAME);
1140-
}
11411138

11421139
if (!PR.RDB$RELATION_NAME.NULL)
11431140
parameter->typeOfTable = QualifiedName(PR.RDB$RELATION_NAME, PR.RDB$RELATION_SCHEMA_NAME);
@@ -1478,7 +1475,7 @@ dsql_rel* METD_get_view_base(jrd_tra* transaction, DsqlCompilerScratch* dsqlScra
14781475

14791476
FOR(REQUEST_HANDLE handle2 TRANSACTION_HANDLE transaction)
14801477
RFL IN RDB$RELATION_FIELDS
1481-
WITH RFL.RDB$SCHEMA_NAME EQUIV X.RDB$SCHEMA_NAME AND
1478+
WITH RFL.RDB$SCHEMA_NAME EQ X.RDB$SCHEMA_NAME AND
14821479
RFL.RDB$RELATION_NAME EQ X.RDB$VIEW_NAME
14831480
{
14841481
if (RFL.RDB$BASE_FIELD.NULL || RFL.RDB$FIELD_NAME.NULL)
@@ -1575,8 +1572,7 @@ bool METD_get_view_relation(jrd_tra* transaction, DsqlCompilerScratch* dsqlScrat
15751572
if ((relation = METD_get_relation(transaction, dsqlScratch, relationName)))
15761573
return true;
15771574

1578-
const QualifiedName procName(X.RDB$RELATION_NAME, X.RDB$RELATION_SCHEMA_NAME,
1579-
X.RDB$PACKAGE_NAME.NULL ? nullptr : X.RDB$PACKAGE_NAME);
1575+
const QualifiedName procName(X.RDB$RELATION_NAME, X.RDB$RELATION_SCHEMA_NAME, X.RDB$PACKAGE_NAME);
15801576

15811577
if ( (procedure = METD_get_procedure(transaction, dsqlScratch, procName)) )
15821578
return true;

src/isql/extract.epp

Lines changed: 59 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{

src/isql/isql.epp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,7 +1438,7 @@ SSHORT ISQL_get_char_length(
14381438
}
14391439

14401440

1441-
void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
1441+
bool ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
14421442
SSHORT default_char_set_id, Get what,
14431443
bool not_null, string& text)
14441444
{
@@ -1459,7 +1459,7 @@ void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
14591459
text.clear();
14601460

14611461
if (!frontendTransaction())
1462-
return;
1462+
return false;
14631463

14641464
FOR FIRST 1
14651465
COL IN RDB$COLLATIONS CROSS
@@ -1491,7 +1491,7 @@ void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
14911491
if (!charsetIsDefault || !collationIsDefault)
14921492
{
14931493
text.printf(" CHARACTER SET %s%s", IUTILS_name_to_string(charSetName).c_str(), notNullStr);
1494-
return;
1494+
return true;
14951495
}
14961496
break;
14971497

@@ -1500,7 +1500,7 @@ void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
15001500
if (!collationIsDefault)
15011501
{
15021502
text.printf("%s COLLATE %s%s", notNullStr, IUTILS_name_to_string(collationName).c_str());
1503-
return;
1503+
return true;
15041504
}
15051505
break;
15061506

@@ -1518,7 +1518,7 @@ void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
15181518
notNullStr,
15191519
IUTILS_name_to_string(collationName).c_str());
15201520
}
1521-
return;
1521+
return true;
15221522
}
15231523
break;
15241524
}
@@ -1530,7 +1530,7 @@ void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
15301530
END_FOR
15311531
ON_ERROR
15321532
ISQL_errmsg(fbStatus);
1533-
return;
1533+
return text.hasData();
15341534
END_ERROR
15351535

15361536
#ifdef DEV_BUILD
@@ -1543,6 +1543,8 @@ void ISQL_get_character_sets(SSHORT char_set_id, SSHORT collation,
15431543
STDERROUT(Print_buffer);
15441544
}
15451545
#endif
1546+
1547+
return text.hasData();
15461548
}
15471549

15481550

@@ -1959,7 +1961,8 @@ bool ISQL_get_null_flag(const QualifiedMetaString& rel_name,
19591961

19601962
FOR FLD IN RDB$FIELDS CROSS
19611963
RFR IN RDB$RELATION_FIELDS
1962-
WITH RFR.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME AND
1964+
WITH RFR.RDB$FIELD_SOURCE_SCHEMA_NAME EQUIV FLD.RDB$SCHEMA_NAME AND
1965+
RFR.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME AND
19631966
RFR.RDB$SCHEMA_NAME EQUIV NULLIF(rel_name.schema.c_str(), '') AND
19641967
RFR.RDB$RELATION_NAME EQ rel_name.object.c_str() AND
19651968
RFR.RDB$FIELD_NAME EQ field_name.c_str()
@@ -8003,13 +8006,14 @@ static void print_message(Firebird::IMessageMetadata* msg, const char* dir)
80038006
break;
80048007
}
80058008

8006-
const auto schema = msg->getSchema(fbStatus, i);
8009+
const auto schema = isqlGlob.major_ods >= ODS_VERSION14 ?
8010+
msg->getSchema(fbStatus, i) : "";
80078011

80088012
isqlGlob.printf("\n");
80098013
isqlGlob.printf(" : name: %s alias: %s\n",
80108014
msg->getField(fbStatus, i), msg->getAlias(fbStatus, i));
80118015
isqlGlob.printf(" : table: %s schema: %s owner: %s\n",
8012-
msg->getRelation(fbStatus, i), (schema ? schema : ""), msg->getOwner(fbStatus, i));
8016+
msg->getRelation(fbStatus, i), schema, msg->getOwner(fbStatus, i));
80138017
}
80148018
}
80158019

src/isql/isql_proto.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ enum class Get
5252
COLLATE_ONLY,
5353
BOTH
5454
};
55-
void ISQL_get_character_sets(
55+
bool ISQL_get_character_sets(
5656
SSHORT char_set_id, SSHORT collation,
5757
SSHORT default_char_set_id, Get what,
5858
bool not_null, Firebird::string& text);

0 commit comments

Comments
 (0)