8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 07:23:03 +01:00

More improvements for CORE-945 because there are other confusing messages in DYN.

This commit is contained in:
robocop 2006-10-01 09:14:38 +00:00
parent ff33743218
commit f32795fe1d
4 changed files with 30 additions and 24 deletions

View File

@ -2256,23 +2256,20 @@ void DYN_define_index(Global* gbl,
int list_index = -1; int list_index = -1;
bool found = false; bool found = false;
FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction) FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
X IN RDB$RELATION_CONSTRAINTS CROSS RC IN RDB$RELATION_CONSTRAINTS CROSS
Y IN RDB$INDICES OVER RDB$INDEX_NAME CROSS IND IN RDB$INDICES OVER RDB$INDEX_NAME CROSS
Z IN RDB$INDEX_SEGMENTS OVER RDB$INDEX_NAME WITH ISEG IN RDB$INDEX_SEGMENTS OVER RDB$INDEX_NAME WITH
Y.RDB$RELATION_NAME EQ referenced_relation.c_str() AND IND.RDB$RELATION_NAME EQ referenced_relation.c_str() AND
Y.RDB$UNIQUE_FLAG NOT MISSING AND IND.RDB$UNIQUE_FLAG NOT MISSING AND
(X.RDB$CONSTRAINT_TYPE = PRIMARY_KEY OR (RC.RDB$CONSTRAINT_TYPE = PRIMARY_KEY OR
X.RDB$CONSTRAINT_TYPE = UNIQUE_CNSTRT) RC.RDB$CONSTRAINT_TYPE = UNIQUE_CNSTRT)
SORTED BY Y.RDB$INDEX_NAME, SORTED BY IND.RDB$INDEX_NAME,
DESCENDING Z.RDB$FIELD_POSITION DESCENDING ISEG.RDB$FIELD_POSITION
if (!DYN_REQUEST(drq_l_unq_idx)) if (!DYN_REQUEST(drq_l_unq_idx))
DYN_REQUEST(drq_l_unq_idx) = request; DYN_REQUEST(drq_l_unq_idx) = request;
/* create a control break on index name, in which we set up if (index_name != IND.RDB$INDEX_NAME) {
to handle a new index, assuming it is the right one */
if (index_name != Y.RDB$INDEX_NAME) {
if (list_index >= 0) if (list_index >= 0)
found = false; found = false;
if (found) { if (found) {
@ -2280,7 +2277,7 @@ void DYN_define_index(Global* gbl,
break; break;
} }
list_index = field_list.getCount() - 1; list_index = field_list.getCount() - 1;
index_name = Y.RDB$INDEX_NAME; index_name = IND.RDB$INDEX_NAME;
found = true; found = true;
} }
@ -2288,8 +2285,8 @@ void DYN_define_index(Global* gbl,
match, then this is not the correct index */ match, then this is not the correct index */
if (list_index >= 0) { if (list_index >= 0) {
fb_utils::exact_name_limit(Z.RDB$FIELD_NAME, sizeof(Z.RDB$FIELD_NAME)); fb_utils::exact_name_limit(ISEG.RDB$FIELD_NAME, sizeof(ISEG.RDB$FIELD_NAME));
if (field_list[list_index--] != Z.RDB$FIELD_NAME) if (field_list[list_index--] != ISEG.RDB$FIELD_NAME)
{ {
found = false; found = false;
} }
@ -2316,19 +2313,25 @@ void DYN_define_index(Global* gbl,
else { else {
jrd_req* request2 = NULL; jrd_req* request2 = NULL;
found = false; found = false;
bool isView = false;
FOR(REQUEST_HANDLE request2 TRANSACTION_HANDLE gbl->gbl_transaction) FOR(REQUEST_HANDLE request2 TRANSACTION_HANDLE gbl->gbl_transaction)
X IN RDB$RELATIONS X IN RDB$RELATIONS
WITH X.RDB$RELATION_NAME EQ referenced_relation.c_str() WITH X.RDB$RELATION_NAME EQ referenced_relation.c_str()
found = true; found = true;
isView = !X.RDB$VIEW_BLR.NULL;
END_FOR END_FOR
CMP_release(tdbb, request2); CMP_release(tdbb, request2);
if (isView)
DYN_error_punt(false, 242, referenced_relation.c_str(), NULL, NULL, NULL, NULL);
// msg 242: "attempt to reference a view (%s) in a foreign key"
if (found) if (found)
{ {
DYN_error_punt(false, 18, NULL, NULL, NULL, NULL, NULL); DYN_error_punt(false, 18, referenced_relation.c_str(), NULL, NULL, NULL, NULL);
// msg 18: "could not find UNIQUE or PRIMARY KEY constraint with specified fields" // msg 18: "could not find UNIQUE or PRIMARY KEY constraint in table %s with specified columns"
} }
else else
{ {
@ -2372,8 +2375,8 @@ void DYN_define_index(Global* gbl,
id = old_id; id = old_id;
if (IDX.RDB$FOREIGN_KEY.NULL) if (IDX.RDB$FOREIGN_KEY.NULL)
DYN_error_punt(false, 20, NULL, NULL, NULL, NULL, NULL); DYN_error_punt(false, 20, referenced_relation.c_str(), NULL, NULL, NULL, NULL);
/* msg 20: "could not find primary key index in specified relation" */ /* msg 20: "could not find PRIMARY KEY index in specified table %s" */
} }
IDX.RDB$SEGMENT_COUNT = seg_count; IDX.RDB$SEGMENT_COUNT = seg_count;

View File

@ -9,7 +9,7 @@ INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('19
INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('1996-11-07 13:39:40', 'GRST', 6, 1); INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('1996-11-07 13:39:40', 'GRST', 6, 1);
*/ */
INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('2005-09-02 13:09:00', 'DSQL', 7, 30); INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('2005-09-02 13:09:00', 'DSQL', 7, 30);
INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('2006-09-30 13:25:01', 'DYN', 8, 242); INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('2006-10-01 03:20:51', 'DYN', 8, 243);
/* /*
INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('1996-11-07 13:39:40', 'FRED', 9, 1); INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES ('1996-11-07 13:39:40', 'FRED', 9, 1);
*/ */

View File

@ -1184,5 +1184,7 @@ INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, O
INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1181, 'cvc', '2006-07-28 04:58:25', 12, 250, 'Bad attributes for restoring SQL role', NULL, NULL, 'c_pg'); INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1181, 'cvc', '2006-07-28 04:58:25', 12, 250, 'Bad attributes for restoring SQL role', NULL, NULL, 'c_pg');
INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1182, 'cvc', '2006-07-28 06:38:03', 12, 63, ' %sM(ETA_DATA) backup metadata only', NULL, NULL, 'c_pg'); INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1182, 'cvc', '2006-07-28 06:38:03', 12, 63, ' %sM(ETA_DATA) backup metadata only', NULL, NULL, 'c_pg');
INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1183, 'cvc', '2006-08-31 04:21:42', 8, 43, 'column %s is used in table %s (local name %s) and cannot be dropped', NULL, NULL, 'c_pg'); INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1183, 'cvc', '2006-08-31 04:21:42', 8, 43, 'column %s is used in table %s (local name %s) and cannot be dropped', NULL, NULL, 'c_pg');
INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1184, 'cvc', '2006-10-01 03:18:30', 8, 18, 'could not find UNIQUE or PRIMARY KEY constraint with specified columns', NULL, NULL, 'c_pg');
INSERT INTO HISTORY (CHANGE_NUMBER, CHANGE_WHO, CHANGE_DATE, FAC_CODE, NUMBER, OLD_TEXT, OLD_ACTION, OLD_EXPLANATION, LOCALE) VALUES (1185, 'cvc', '2006-10-01 03:20:51', 8, 20, 'could not find PRIMARY KEY index in specified table', NULL, NULL, 'c_pg');
COMMIT WORK; COMMIT WORK;

View File

@ -1520,9 +1520,9 @@ INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FL
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 15, NULL, 'STORE RDB$INDICES failed', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 15, NULL, 'STORE RDB$INDICES failed', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 16, NULL, 'unsupported DYN verb', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 16, NULL, 'unsupported DYN verb', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn.c', NULL, 8, 17, NULL, 'PRIMARY KEY column lookup failed', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn.c', NULL, 8, 17, NULL, 'PRIMARY KEY column lookup failed', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn_def.epp', NULL, 8, 18, NULL, 'could not find UNIQUE or PRIMARY KEY constraint with specified columns', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn_def.epp', NULL, 8, 18, NULL, 'could not find UNIQUE or PRIMARY KEY constraint in table %s with specified columns', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn.c', NULL, 8, 19, NULL, 'PRIMARY KEY lookup failed', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn.c', NULL, 8, 19, NULL, 'PRIMARY KEY lookup failed', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn.c', NULL, 8, 20, NULL, 'could not find PRIMARY KEY index in specified table', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn.c', NULL, 8, 20, NULL, 'could not find PRIMARY KEY index in specified table %s', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 21, NULL, 'STORE RDB$INDICES failed', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 21, NULL, 'STORE RDB$INDICES failed', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 22, NULL, 'STORE RDB$FIELDS failed', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 22, NULL, 'STORE RDB$FIELDS failed', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 23, NULL, 'STORE RDB$RELATION_FIELDS failed', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, NULL, 'dyn.c', NULL, 8, 23, NULL, 'STORE RDB$RELATION_FIELDS failed', NULL, NULL);
@ -3075,6 +3075,7 @@ INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FL
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('array_max_dimensions', 'scalar', 'evl.cpp', NULL, 0, 553, NULL, 'Array data type can use up to %d dimensions', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('array_max_dimensions', 'scalar', 'evl.cpp', NULL, 0, 553, NULL, 'Array data type can use up to %d dimensions', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('dsql_only_can_subscript_array', 'MAKE_field', 'make.cpp', NULL, 13, 926, NULL, 'scalar operator used on field %s which is not an array', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('dsql_only_can_subscript_array', 'MAKE_field', 'make.cpp', NULL, 13, 926, NULL, 'scalar operator used on field %s which is not an array', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('dsql_max_sort_items', 'pass1_sort', 'pass1.cpp', NULL, 13, 927, NULL, 'cannot sort on more than 255 items', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('dsql_max_sort_items', 'pass1_sort', 'pass1.cpp', NULL, 13, 927, NULL, 'cannot sort on more than 255 items', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES ('', '', 'dyn_def.epp', NULL, 8, 241, NULL, 'Table %s not found', NULL, NULL); INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, 'DYN_define_index', 'dyn_def.epp', NULL, 8, 241, NULL, 'Table %s not found', NULL, NULL);
INSERT INTO MESSAGES (SYMBOL, ROUTINE, MODULE, TRANS_NOTES, FAC_CODE, NUMBER, FLAGS, TEXT, "ACTION", EXPLANATION) VALUES (NULL, 'DYN_define_index', 'dyn_def.epp', NULL, 8, 242, NULL, 'attempt to reference a view (%s) in a foreign key', NULL, NULL);
COMMIT WORK; COMMIT WORK;