@@ -548,33 +548,42 @@ int EXTRACT_list_table(const SCHAR* relation_name,
548548 ** rdb$check_constraints. We hope we get at most one row back.
549549 */
550550
551- if (RFR.RDB$NULL_FLAG == 1)
552- {
553- FOR RCO IN RDB$RELATION_CONSTRAINTS CROSS
554- CON IN RDB$CHECK_CONSTRAINTS WITH
555- CON.RDB$TRIGGER_NAME = RFR.RDB$FIELD_NAME AND
556- CON.RDB$CONSTRAINT_NAME = RCO.RDB$CONSTRAINT_NAME AND
557- RCO.RDB$CONSTRAINT_TYPE EQ "NOT NULL" AND
558- RCO.RDB$RELATION_NAME = RFR.RDB$RELATION_NAME
551+ bool found = false;
552+
553+ FOR RCO IN RDB$RELATION_CONSTRAINTS CROSS
554+ CON IN RDB$CHECK_CONSTRAINTS WITH
555+ CON.RDB$TRIGGER_NAME = RFR.RDB$FIELD_NAME AND
556+ CON.RDB$CONSTRAINT_NAME = RCO.RDB$CONSTRAINT_NAME AND
557+ RCO.RDB$CONSTRAINT_TYPE EQ "NOT NULL" AND
558+ RCO.RDB$RELATION_NAME = RFR.RDB$RELATION_NAME
559559
560- if (!fb_utils::implicit_integrity(CON.RDB$CONSTRAINT_NAME))
560+ if (!fb_utils::implicit_integrity(CON.RDB$CONSTRAINT_NAME))
561+ {
562+ fb_utils::exact_name(CON.RDB$CONSTRAINT_NAME);
563+ if (isqlGlob.db_SQL_dialect > SQL_DIALECT_V6_TRANSITION)
561564 {
562- fb_utils::exact_name(CON.RDB$CONSTRAINT_NAME);
563- if (isqlGlob.db_SQL_dialect > SQL_DIALECT_V6_TRANSITION)
564- {
565- IUTILS_copy_SQL_id (CON.RDB$CONSTRAINT_NAME, SQL_identifier, DBL_QUOTE);
566- isqlGlob.printf(" CONSTRAINT %s", SQL_identifier);
567- }
568- else
569- isqlGlob.printf(" CONSTRAINT %s", CON.RDB$CONSTRAINT_NAME);
565+ IUTILS_copy_SQL_id (CON.RDB$CONSTRAINT_NAME, SQL_identifier, DBL_QUOTE);
566+ isqlGlob.printf(" CONSTRAINT %s", SQL_identifier);
570567 }
571- END_FOR
572- ON_ERROR
573- ISQL_errmsg (fbStatus);
574- return FINI_ERROR;
575- END_ERROR;
568+ else
569+ isqlGlob.printf(" CONSTRAINT %s", CON.RDB$CONSTRAINT_NAME);
570+ }
571+ found = true;
576572
573+ END_FOR
574+ ON_ERROR
575+ ISQL_errmsg (fbStatus);
576+ return FINI_ERROR;
577+ END_ERROR;
578+
579+ if (found)
580+ {
577581 isqlGlob.printf(" NOT NULL");
582+
583+ if (RFR.RDB$NULL_FLAG == 0)
584+ {
585+ isqlGlob.printf(" NOT ENFORCED");
586+ }
578587 }
579588
580589 // Handle collations after defaults
@@ -681,6 +690,11 @@ static bool extract_rel_constraints(const char* relation_name)
681690 isqlGlob.printf(" %s", IDX.RDB$INDEX_NAME);
682691 }
683692
693+ if (IDX.RDB$INDEX_INACTIVE == 1)
694+ {
695+ isqlGlob.printf(" NOT ENFORCED");
696+ }
697+
684698 END_FOR
685699 ON_ERROR
686700 ISQL_errmsg(fbStatus);
@@ -1926,6 +1940,11 @@ static void list_check()
19261940 if (!TRG.RDB$TRIGGER_SOURCE.NULL)
19271941 SHOW_print_metadata_text_blob (isqlGlob.Out, &TRG.RDB$TRIGGER_SOURCE);
19281942
1943+ if (TRG.RDB$TRIGGER_INACTIVE == 1)
1944+ {
1945+ isqlGlob.printf(" NOT ENFORCED");
1946+ }
1947+
19291948 isqlGlob.printf("%s%s", isqlGlob.global_Term, NEWLINE);
19301949
19311950 END_FOR
@@ -2828,12 +2847,14 @@ static void list_foreign()
28282847
28292848 FOR RELC1 IN RDB$RELATION_CONSTRAINTS CROSS
28302849 RELC2 IN RDB$RELATION_CONSTRAINTS CROSS
2831- REFC IN RDB$REF_CONSTRAINTS WITH
2850+ REFC IN RDB$REF_CONSTRAINTS CROSS
2851+ IDX IN RDB$INDICES WITH
28322852 RELC1.RDB$CONSTRAINT_TYPE EQ "FOREIGN KEY" AND
28332853 REFC.RDB$CONST_NAME_UQ EQ RELC2.RDB$CONSTRAINT_NAME AND
28342854 REFC.RDB$CONSTRAINT_NAME EQ RELC1.RDB$CONSTRAINT_NAME AND
28352855 (RELC2.RDB$CONSTRAINT_TYPE EQ "UNIQUE" OR
2836- RELC2.RDB$CONSTRAINT_TYPE EQ "PRIMARY KEY")
2856+ RELC2.RDB$CONSTRAINT_TYPE EQ "PRIMARY KEY") AND
2857+ IDX.RDB$INDEX_NAME = RELC1.RDB$INDEX_NAME
28372858 SORTED BY RELC1.RDB$RELATION_NAME, RELC1.RDB$CONSTRAINT_NAME
28382859
28392860 fb_utils::exact_name(RELC1.RDB$RELATION_NAME);
@@ -2893,6 +2914,9 @@ static void list_foreign()
28932914 ISQL_ri_action_print (REFC.RDB$DELETE_RULE, " ON DELETE", true);
28942915 }
28952916
2917+ if (IDX.RDB$INDEX_INACTIVE == 1)
2918+ isqlGlob.printf(" NOT ENFORCED");
2919+
28962920 isqlGlob.printf("%s%s", isqlGlob.global_Term, NEWLINE);
28972921
28982922 END_FOR
0 commit comments