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

CORE-1799: improve the almost useless "expression evaluation not supported" error message.

Did the DSQL part for now.
This commit is contained in:
robocop 2008-09-27 09:51:53 +00:00
parent cf2ac6beb0
commit 0c85fac2d4
12 changed files with 621 additions and 399 deletions

View File

@ -1696,6 +1696,40 @@ C --
PARAMETER (GDS__dsql_col_more_than_once_view = 336397238)
INTEGER*4 GDS__dsql_unsupported_in_auto_trans
PARAMETER (GDS__dsql_unsupported_in_auto_trans = 336397239)
INTEGER*4 GDS__dsql_eval_unknode
PARAMETER (GDS__dsql_eval_unknode = 336397240)
INTEGER*4 GDS__dsql_agg_wrongarg
PARAMETER (GDS__dsql_agg_wrongarg = 336397241)
INTEGER*4 GDS__dsql_agg2_wrongarg
PARAMETER (GDS__dsql_agg2_wrongarg = 336397242)
INTEGER*4 GDS__dsql_nodateortime_pm_string
PARAMETER (GDS__dsql_nodateortime_pm_string = 336397243)
INTEGER*4 GDS__dsql_invalid_datetime_subtract
PARAMETER (GDS__dsql_invalid_datetime_subtract = 336397244)
INTEGER*4 GDS__dsql_invalid_dateortime_add
PARAMETER (GDS__dsql_invalid_dateortime_add = 336397245)
INTEGER*4 GDS__dsql_invalid_type_minus_date
PARAMETER (GDS__dsql_invalid_type_minus_date = 336397246)
INTEGER*4 GDS__dsql_nostring_addsub_dial3
PARAMETER (GDS__dsql_nostring_addsub_dial3 = 336397247)
INTEGER*4 GDS__dsql_invalid_type_addsub_dial3
PARAMETER (GDS__dsql_invalid_type_addsub_dial3 = 336397248)
INTEGER*4 GDS__dsql_invalid_type_multip_dial1
PARAMETER (GDS__dsql_invalid_type_multip_dial1 = 336397249)
INTEGER*4 GDS__dsql_nostring_multip_dial3
PARAMETER (GDS__dsql_nostring_multip_dial3 = 336397250)
INTEGER*4 GDS__dsql_invalid_type_multip_dial3
PARAMETER (GDS__dsql_invalid_type_multip_dial3 = 336397251)
INTEGER*4 GDS__dsql_mustuse_numeric_div_dial1
PARAMETER (GDS__dsql_mustuse_numeric_div_dial1 = 336397252)
INTEGER*4 GDS__dsql_nostring_div_dial3
PARAMETER (GDS__dsql_nostring_div_dial3 = 336397253)
INTEGER*4 GDS__dsql_invalid_type_div_dial3
PARAMETER (GDS__dsql_invalid_type_div_dial3 = 336397254)
INTEGER*4 GDS__dsql_nostring_neg_dial3
PARAMETER (GDS__dsql_nostring_neg_dial3 = 336397255)
INTEGER*4 GDS__dsql_invalid_type_neg
PARAMETER (GDS__dsql_invalid_type_neg = 336397256)
INTEGER*4 GDS__gsec_cant_open_db
PARAMETER (GDS__gsec_cant_open_db = 336723983)
INTEGER*4 GDS__gsec_switches_error

View File

@ -855,6 +855,23 @@ const
gds_dsql_cte_not_used = 336397237;
gds_dsql_col_more_than_once_view = 336397238;
gds_dsql_unsupported_in_auto_trans = 336397239;
gds_dsql_eval_unknode = 336397240;
gds_dsql_agg_wrongarg = 336397241;
gds_dsql_agg2_wrongarg = 336397242;
gds_dsql_nodateortime_pm_string = 336397243;
gds_dsql_invalid_datetime_subtract = 336397244;
gds_dsql_invalid_dateortime_add = 336397245;
gds_dsql_invalid_type_minus_date = 336397246;
gds_dsql_nostring_addsub_dial3 = 336397247;
gds_dsql_invalid_type_addsub_dial3 = 336397248;
gds_dsql_invalid_type_multip_dial1 = 336397249;
gds_dsql_nostring_multip_dial3 = 336397250;
gds_dsql_invalid_type_multip_dial3 = 336397251;
gds_dsql_mustuse_numeric_div_dial1 = 336397252;
gds_dsql_nostring_div_dial3 = 336397253;
gds_dsql_invalid_type_div_dial3 = 336397254;
gds_dsql_nostring_neg_dial3 = 336397255;
gds_dsql_invalid_type_neg = 336397256;
gds_gsec_cant_open_db = 336723983;
gds_gsec_switches_error = 336723984;
gds_gsec_no_op_spec = 336723985;

File diff suppressed because it is too large Load Diff

View File

@ -24,15 +24,15 @@
* See case nod_udf in MAKE_desc().
* 2001.02.23 Claudio Valderrama: Fix SF bug #518350 with substring()
* and text blobs containing charsets other than ASCII/NONE/BINARY.
* 2002.07.30 Arno Brinkman:
* 2002.07.30 Arno Brinkman:
* COALESCE, CASE support added
* procedure MAKE_desc_from_list added
* procedure MAKE_desc_from_list added
* 2003.01.25 Dmitry Yemanov: Fixed problem with concatenation which
* trashed RDB$FIELD_LENGTH in the system tables. This change may
* potentially interfere with the one made by Claudio one year ago.
* Adriano dos Santos Fernandes
*/
//This MUST be before any other includes
#ifdef DARWIN
#define _STLP_CCTYPE
@ -78,7 +78,7 @@ static inline bool could_be_date(const dsc& d)
}
// One of d1, d2 is time, the other is date
// One of d1, d2 is time, the other is date
static inline bool is_date_and_time(const dsc& d1, const dsc& d2)
{
return ((d1.dsc_dtype == dtype_sql_time) && (d2.dsc_dtype == dtype_sql_date)) ||
@ -113,11 +113,11 @@ dsql_nod* MAKE_const_slong(SLONG value)
/**
MAKE_constant
@brief Make a constant node.
@param constant
@param numeric_flag
@ -150,7 +150,7 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
* a string. The engine will convert it. Use dtype_double so that
the engine can distinguish it from an actual string.
Note: Due to the size of dsc_scale we are limited to numeric
constants of less than 256 bytes.
constants of less than 256 bytes.
*/
node->nod_desc.dsc_dtype = dtype_double;
// Scale has no use for double
@ -189,7 +189,7 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
// Hex constants coming through this code are guaranteed to be
// valid - they start with X and contains only 0-9, A-F.
// And, they will fit in a SINT64 without overflow.
SINT64 value = 0;
const char* p = constant->str_data;
@ -272,7 +272,7 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
case CONSTANT_TIME:
case CONSTANT_TIMESTAMP:
{
// Setup the constant's descriptor
// Setup the constant's descriptor
switch (numeric_flag) {
case CONSTANT_DATE:
@ -290,7 +290,7 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
node->nod_desc.dsc_length = type_lengths[node->nod_desc.dsc_dtype];
node->nod_desc.dsc_address = (UCHAR*) node->nod_arg;
// Set up a descriptor to point to the string
// Set up a descriptor to point to the string
dsc tmp;
tmp.dsc_dtype = dtype_text;
@ -300,7 +300,7 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
tmp.dsc_length = static_cast<USHORT>(constant->str_length);
tmp.dsc_address = (UCHAR*) constant->str_data;
// Now invoke the string_to_date/time/timestamp routines
// Now invoke the string_to_date/time/timestamp routines
CVT_move(&tmp, &node->nod_desc, ERRD_post);
break;
@ -317,7 +317,7 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
static_cast<USHORT>(constant->str_length);
node->nod_desc.dsc_address = (UCHAR*) constant->str_data;
node->nod_desc.dsc_ttype() = ttype_dynamic;
// carry a pointer to the constant to resolve character set in pass1
// carry a pointer to the constant to resolve character set in pass1
node->nod_arg[0] = (dsql_nod*) constant;
break;
}
@ -327,12 +327,12 @@ dsql_nod* MAKE_constant(dsql_str* constant, dsql_constant_type numeric_flag)
/**
MAKE_str_constant
@brief Make a constant node when the
@brief Make a constant node when the
character set ID is already known.
@param constant
@param character_set
@ -353,7 +353,7 @@ dsql_nod* MAKE_str_constant(dsql_str* constant, SSHORT character_set)
node->nod_desc.dsc_length = static_cast<USHORT>(constant->str_length);
node->nod_desc.dsc_address = (UCHAR*) constant->str_data;
node->nod_desc.dsc_ttype() = character_set;
// carry a pointer to the constant to resolve character set in pass1
// carry a pointer to the constant to resolve character set in pass1
node->nod_arg[0] = (dsql_nod*) constant;
return node;
@ -361,12 +361,12 @@ dsql_nod* MAKE_str_constant(dsql_str* constant, SSHORT character_set)
/**
MAKE_cstring
@brief Make a string node for a string whose
length is not known, but is null-terminated.
@param str
@ -379,9 +379,9 @@ dsql_str* MAKE_cstring(const char* str)
/**
MAKE_desc
@brief Make a descriptor from input node.
This function can modify node->nod_flags to add NOD_COMP_DIALECT
@ -453,7 +453,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
if (!DTYPE_IS_NUMERIC(desc->dsc_dtype) &&
!DTYPE_IS_TEXT(desc->dsc_dtype))
{
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_agg_wrongarg) << Arg::Str("AVG"));
}
else if (DTYPE_IS_TEXT(desc->dsc_dtype)) {
desc->dsc_dtype = dtype_double;
@ -466,7 +467,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
desc->dsc_flags = DSC_nullable;
dtype = desc->dsc_dtype;
if (!DTYPE_IS_NUMERIC(dtype)) {
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_agg2_wrongarg) << Arg::Str("AVG"));
}
else if (DTYPE_IS_EXACT(dtype)) {
desc->dsc_dtype = dtype_int64;
@ -484,7 +486,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
if (!DTYPE_IS_NUMERIC(desc->dsc_dtype) &&
!DTYPE_IS_TEXT(desc->dsc_dtype))
{
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_agg_wrongarg) << Arg::Str("SUM"));
}
else if (desc->dsc_dtype == dtype_short) {
desc->dsc_dtype = dtype_long;
@ -505,7 +508,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
MAKE_desc(statement, desc, node->nod_arg[0], null_replacement);
dtype = desc->dsc_dtype;
if (!DTYPE_IS_NUMERIC(dtype)) {
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_agg2_wrongarg) << Arg::Str("SUM"));
}
else if (DTYPE_IS_EXACT(dtype)) {
desc->dsc_dtype = dtype_int64;
@ -550,7 +554,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
desc->dsc_length = sizeof(USHORT) + DSC_string_length(&desc1);
desc->dsc_flags = desc1.dsc_flags & DSC_nullable;
return;
case nod_substr:
MAKE_desc(statement, &desc1, node->nod_arg[0], null_replacement);
MAKE_desc(statement, &desc2, node->nod_arg[1], null_replacement);
@ -652,19 +656,23 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
switch (dtype) {
case dtype_sql_time:
case dtype_sql_date:
/* Forbid <date/time> +- <string> */
// CVC: I don't see how this case can happen since dialect 1 doesn't accept DATE or TIME
// Forbid <date/time> +- <string>
if (DTYPE_IS_TEXT(desc1.dsc_dtype) ||
DTYPE_IS_TEXT(desc2.dsc_dtype))
{
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_nodateortime_pm_string));
}
case dtype_timestamp:
/* Allow <timestamp> +- <string> (historical) */
if (could_be_date(desc1) && could_be_date(desc2)) {
if (node->nod_type == nod_subtract) {
/* <any date> - <any date> */
// Allow <timestamp> +- <string> (historical)
if (could_be_date(desc1) && could_be_date(desc2))
{
if (node->nod_type == nod_subtract)
{
// <any date> - <any date>
/* Legal permutations are:
<timestamp> - <timestamp>
@ -673,7 +681,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
<date> - <timestamp>
<time> - <time>
<timestamp> - <string>
<string> - <timestamp>
<string> - <timestamp>
<string> - <string> */
if (DTYPE_IS_TEXT(desc1.dsc_dtype))
@ -693,7 +701,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
dtype = dtype_timestamp;
}
else {
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_datetime_subtract));
}
if (dtype == dtype_sql_date) {
@ -715,15 +724,18 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
}
}
else if (is_date_and_time(desc1, desc2)) {
/* <date> + <time> */
/* <time> + <date> */
// <date> + <time>
// <time> + <date>
desc->dsc_dtype = dtype_timestamp;
desc->dsc_length = type_lengths[dtype_timestamp];
desc->dsc_scale = 0;
}
else {
/* <date> + <date> */
ERRD_post(Arg::Gds(isc_expression_eval_err));
// <date> + <date>
// <time> + <time>
// CVC: Hard to see it, since we are in dialect 1.
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_dateortime_add));
}
}
else if (DTYPE_IS_DATE(desc1.dsc_dtype) || (node->nod_type == nod_add))
@ -738,9 +750,10 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
desc->dsc_scale = 0;
}
else {
/* <non-date> - <date> */
// <non-date> - <date>
fb_assert(node->nod_type == nod_subtract);
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_minus_date));
}
return;
@ -780,7 +793,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
dtype1 = desc1.dsc_dtype;
dtype2 = desc2.dsc_dtype;
// Arrays and blobs can never partipate in addition/subtraction
// Arrays and blobs can never partipate in addition/subtraction
if (DTYPE_IS_BLOB(dtype1) || DTYPE_IS_BLOB(dtype2)) {
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
Arg::Gds(isc_dsql_no_blob_array));
@ -790,7 +803,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
// (use a specific cast instead)
if (DTYPE_IS_TEXT(dtype1) || DTYPE_IS_TEXT(dtype2))
{
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err)
<< Arg::Gds(isc_dsql_nostring_addsub_dial3));
}
/* Determine the TYPE of arithmetic to perform, store it
@ -807,9 +821,9 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
dtype = dtype_double;
}
else {
// mixed numeric and non-numeric:
// mixed numeric and non-numeric:
// The MAX(dtype) rule doesn't apply with dtype_int64
// The MAX(dtype) rule doesn't apply with dtype_int64
if (dtype_int64 == dtype1)
dtype1 = dtype_double;
@ -831,7 +845,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
{
if (node->nod_type == nod_subtract2)
{
/* <any date> - <any date> */
// <any date> - <any date>
/* Legal permutations are:
<timestamp> - <timestamp>
<timestamp> - <date>
@ -846,7 +860,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
else if (dtype2 == dtype_timestamp && dtype1 == dtype_sql_date)
dtype = dtype_timestamp;
else
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_datetime_subtract));
if (dtype == dtype_sql_date)
{
@ -879,7 +894,12 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
desc->dsc_scale = 0;
}
else
ERRD_post(Arg::Gds(isc_expression_eval_err)); // <date> + <date>
{
// <date> + <date>
// <time> + <time>
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_dateortime_add));
}
}
else if (DTYPE_IS_DATE(desc1.dsc_dtype) || (node->nod_type == nod_add2))
{
@ -896,7 +916,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
{
/* <non-date> - <date> */
fb_assert(node->nod_type == nod_subtract2);
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_minus_date));
}
return;
@ -929,8 +950,9 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
break;
default:
// a type which cannot participate in an add or subtract
ERRD_post(Arg::Gds(isc_expression_eval_err));
// a type which cannot participate in an add or subtract
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_addsub_dial3));
}
return;
@ -971,7 +993,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
break;
default:
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_multip_dial1));
}
return;
@ -987,14 +1010,15 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
return;
}
// In Dialect 2 or 3, strings can never partipate in multiplication
// In Dialect 2 or 3, strings can never partipate in multiplication
// (use a specific cast instead)
if (DTYPE_IS_TEXT(desc1.dsc_dtype) || DTYPE_IS_TEXT(desc2.dsc_dtype))
{
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_nostring_multip_dial3));
}
// Arrays and blobs can never partipate in multiplication
// Arrays and blobs can never partipate in multiplication
if (DTYPE_IS_BLOB(desc1.dsc_dtype) || DTYPE_IS_BLOB(desc2.dsc_dtype)) {
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
Arg::Gds(isc_dsql_no_blob_array));
@ -1020,7 +1044,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
break;
default:
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_multip_dial3));
}
return;
@ -1046,7 +1071,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
return;
}
// Arrays and blobs can never partipate in division
// Arrays and blobs can never partipate in division
if (DTYPE_IS_BLOB(desc1.dsc_dtype) || DTYPE_IS_BLOB(desc2.dsc_dtype)) {
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
Arg::Gds(isc_dsql_no_blob_array));
@ -1063,7 +1088,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
dtype = MAX(dtype1, dtype2);
if (!DTYPE_IS_NUMERIC(dtype)) {
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_mustuse_numeric_div_dial1));
}
desc->dsc_dtype = dtype_double;
@ -1088,10 +1114,11 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
// (use a specific cast instead)
if (DTYPE_IS_TEXT(desc1.dsc_dtype) || DTYPE_IS_TEXT(desc2.dsc_dtype))
{
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_nostring_div_dial3));
}
// Arrays and blobs can never partipate in division
// Arrays and blobs can never partipate in division
if (DTYPE_IS_BLOB(desc1.dsc_dtype) || DTYPE_IS_BLOB(desc2.dsc_dtype)) {
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
Arg::Gds(isc_dsql_no_blob_array));
@ -1114,7 +1141,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
break;
default:
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_div_dial3));
}
return;
@ -1133,7 +1161,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
// (use a specific cast instead)
if (DTYPE_IS_TEXT(desc->dsc_dtype)) {
if (statement->req_client_dialect >= SQL_DIALECT_V6_TRANSITION) {
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_nostring_neg_dial3));
}
desc->dsc_dtype = dtype_double;
desc->dsc_length = sizeof(double);
@ -1146,7 +1175,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
}
// Forbid other not numeric datatypes
else if (!DTYPE_IS_NUMERIC(desc->dsc_dtype)) {
ERRD_post(Arg::Gds(isc_expression_eval_err));
ERRD_post(Arg::Gds(isc_expression_eval_err) <<
Arg::Gds(isc_dsql_invalid_type_neg));
}
return;
@ -1155,7 +1185,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
return;
case nod_dbkey:
// Fix for bug 10072 check that the target is a relation
// Fix for bug 10072 check that the target is a relation
context = (dsql_ctx*) node->nod_arg[0]->nod_arg[0];
relation = context->ctx_relation;
if (relation != 0) {
@ -1183,8 +1213,8 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
the fact that any UDF can return NULL simply returning a NULL
pointer. */
desc->dsc_flags = DSC_nullable;
if (desc->dsc_dtype <= dtype_any_text) {
if (desc->dsc_dtype <= dtype_any_text) {
desc->dsc_ttype() = userFunc->udf_character_set_id;
}
else {
@ -1310,7 +1340,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
switch (*(ULONG *) node->nod_arg[e_extract_part]->nod_desc.dsc_address)
{
case blr_extract_second:
// QUADDATE - maybe this should be DECIMAL(6,4)
// QUADDATE - maybe this should be DECIMAL(6,4)
desc->makeLong(ISC_TIME_SECONDS_PRECISION_SCALE);
break;
@ -1337,7 +1367,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
case nod_parameter:
/* We don't actually know the datatype of a parameter -
we have to guess it based on the context that the
we have to guess it based on the context that the
parameter appears in. (This is done is pass1.c::set_parameter_type())
However, a parameter can appear as part of an expression.
As MAKE_desc is used for both determination of parameter
@ -1353,7 +1383,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
* SELECT NULL FROM TABLE1;
* As we don't have a <dtype_null, SQL_NULL> datatype pairing,
* we don't know how to map this NULL to a host-language
* datatype. Therefore we now describe it as a
* datatype. Therefore we now describe it as a
* CHAR(1) CHARACTER SET NONE type.
* No value will ever be sent back, as the value of the select
* will be NULL - this is only for purposes of DESCRIBING
@ -1376,7 +1406,7 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
MAKE_desc(statement, desc, node->nod_arg[e_via_value_1], null_replacement);
/**
Set the descriptor flag as nullable. The
select expression may or may not return
select expression may or may not return
this row based on the WHERE clause. Setting this
flag warns the client to expect null values.
(bug 10379)
@ -1389,9 +1419,9 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
return;
default:
fb_assert(false); // unexpected dsql_nod type
fb_assert(false); // unexpected dsql_nod type
case nod_dom_value: // computed value not used
case nod_dom_value: // computed value not used
/* By the time we get here, any nod_dom_value node should have had
* its descriptor set to the type of the domain being created, or
* to the type of the existing domain to which a CHECK constraint
@ -1406,11 +1436,11 @@ void MAKE_desc(CompiledStatement* statement, dsc* desc, dsql_nod* node, dsql_nod
/**
MAKE_desc_from_field
@brief Compute a DSC from a field's description information.
@param desc
@param field
@ -1439,12 +1469,12 @@ void MAKE_desc_from_field(dsc* desc, const dsql_fld* field)
/**
MAKE_desc_from_list
@brief Make a descriptor from a list of values
@brief Make a descriptor from a list of values
according to the sql-standard.
@param desc
@param node
@ -1479,11 +1509,11 @@ void MAKE_desc_from_list(CompiledStatement* statement, dsc* desc, dsql_nod* node
/**
MAKE_field
@brief Make up a field node.
@param context
@param field
@ -1556,11 +1586,11 @@ dsql_nod* MAKE_field(dsql_ctx* context, dsql_fld* field, dsql_nod* indices)
/**
MAKE_field_name
@brief Make up a field name node.
@param field_name
@ -1574,11 +1604,11 @@ dsql_nod* MAKE_field_name(const char* field_name)
/**
MAKE_list
@brief Make a list node from a linked list stack of things.
@param stack
@ -1599,11 +1629,11 @@ dsql_nod* MAKE_list(DsqlNodStack& stack)
/**
MAKE_node
@brief Make a node of given type.
@param type
@param count
@ -1622,12 +1652,12 @@ dsql_nod* MAKE_node(NOD_TYPE type, int count)
/**
MAKE_parameter
@brief Generate a parameter block for a message. If requested,
set up for a null flag as well.
@param message
@param sqlda_flag
@ -1643,10 +1673,10 @@ dsql_par* MAKE_parameter(dsql_msg* message, bool sqlda_flag, bool null_flag,
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
Arg::Gds(isc_badmsgnum));
}
DEV_BLKCHK(message, dsql_type_msg);
if (sqlda_flag && sqlda_index && sqlda_index <= message->msg_index)
if (sqlda_flag && sqlda_index && sqlda_index <= message->msg_index)
{
// This parameter possibly already here. Look for it
for (dsql_par* temp = message->msg_parameters; temp; temp = temp->par_next) {
@ -1671,7 +1701,7 @@ dsql_par* MAKE_parameter(dsql_msg* message, bool sqlda_flag, bool null_flag,
make_parameter_names(parameter, node);
}
// If the parameter is used declared, set SQLDA index
// If the parameter is used declared, set SQLDA index
if (sqlda_flag) {
if (sqlda_index) {
parameter->par_index = sqlda_index;
@ -1682,8 +1712,8 @@ dsql_par* MAKE_parameter(dsql_msg* message, bool sqlda_flag, bool null_flag,
parameter->par_index = ++message->msg_index;
}
}
// If a null handing has been requested, set up a null flag
// If a null handing has been requested, set up a null flag
if (null_flag) {
dsql_par* null = MAKE_parameter(message, false, false, 0, NULL);
@ -1697,11 +1727,11 @@ dsql_par* MAKE_parameter(dsql_msg* message, bool sqlda_flag, bool null_flag,
}
/**
MAKE_string
@brief Generalized routine for making a string block.
@param str
@param length
@ -1715,11 +1745,11 @@ dsql_str* MAKE_string(const char* str, int length)
/**
MAKE_symbol
@brief Make a symbol for an object and insert symbol into hash table.
@param database
@param name
@ -1756,12 +1786,12 @@ dsql_sym* MAKE_symbol(dsql_dbb* database,
/**
MAKE_tagged_string
@brief Generalized routine for making a string block.
Which is tagged with a character set descriptor.
@param str_
@param length
@ -1782,11 +1812,11 @@ dsql_str* MAKE_tagged_string(const char* strvar, size_t length, const char* char
/**
MAKE_trigger_type
@brief Make a trigger type
@param prefix_node
@param suffix_node
@ -1803,11 +1833,11 @@ dsql_nod* MAKE_trigger_type(dsql_nod* prefix_node, dsql_nod* suffix_node)
/**
MAKE_variable
@brief Make up a field node.
@param field
@param name
@ -1844,11 +1874,11 @@ dsql_nod* MAKE_variable(dsql_fld* field, const TEXT* name, const dsql_var_type t
/**
make_null
@brief Prepare a descriptor to signal SQL NULL
@param desc
**/
static void make_null(dsc* const desc)
{
@ -2015,7 +2045,7 @@ static void make_parameter_names(dsql_par* parameter, const dsql_nod* item)
name_alias = variable->var_field->fld_name.c_str();
break;
}
case nod_udf:
case nod_udf:
{
dsql_udf* userFunc = (dsql_udf*) item->nod_arg[0];
name_alias = userFunc->udf_name.c_str();
@ -2064,7 +2094,7 @@ static void make_parameter_names(dsql_par* parameter, const dsql_nod* item)
node = node->nod_arg[0];
++level;
}
switch (node->nod_type)
{
case nod_constant:
@ -2175,7 +2205,7 @@ static void make_parameter_names(dsql_par* parameter, const dsql_nod* item)
case nod_coalesce:
name_alias = "COALESCE";
break;
}
}
if (name_alias) {
parameter->par_name = parameter->par_alias = name_alias;

View File

@ -844,6 +844,23 @@ static const struct {
{"dsql_cte_not_used", 336397237},
{"dsql_col_more_than_once_view", 336397238},
{"dsql_unsupported_in_auto_trans", 336397239},
{"dsql_eval_unknode", 336397240},
{"dsql_agg_wrongarg", 336397241},
{"dsql_agg2_wrongarg", 336397242},
{"dsql_nodateortime_pm_string", 336397243},
{"dsql_invalid_datetime_subtract", 336397244},
{"dsql_invalid_dateortime_add", 336397245},
{"dsql_invalid_type_minus_date", 336397246},
{"dsql_nostring_addsub_dial3", 336397247},
{"dsql_invalid_type_addsub_dial3", 336397248},
{"dsql_invalid_type_multip_dial1", 336397249},
{"dsql_nostring_multip_dial3", 336397250},
{"dsql_invalid_type_multip_dial3", 336397251},
{"dsql_mustuse_numeric_div_dial1", 336397252},
{"dsql_nostring_div_dial3", 336397253},
{"dsql_invalid_type_div_dial3", 336397254},
{"dsql_nostring_neg_dial3", 336397255},
{"dsql_invalid_type_neg", 336397256},
{"gsec_cant_open_db", 336723983},
{"gsec_switches_error", 336723984},
{"gsec_no_op_spec", 336723985},

View File

@ -878,6 +878,23 @@ const ISC_STATUS isc_dsql_unsupp_feature_dialect = 336397236L;
const ISC_STATUS isc_dsql_cte_not_used = 336397237L;
const ISC_STATUS isc_dsql_col_more_than_once_view = 336397238L;
const ISC_STATUS isc_dsql_unsupported_in_auto_trans = 336397239L;
const ISC_STATUS isc_dsql_eval_unknode = 336397240L;
const ISC_STATUS isc_dsql_agg_wrongarg = 336397241L;
const ISC_STATUS isc_dsql_agg2_wrongarg = 336397242L;
const ISC_STATUS isc_dsql_nodateortime_pm_string = 336397243L;
const ISC_STATUS isc_dsql_invalid_datetime_subtract = 336397244L;
const ISC_STATUS isc_dsql_invalid_dateortime_add = 336397245L;
const ISC_STATUS isc_dsql_invalid_type_minus_date = 336397246L;
const ISC_STATUS isc_dsql_nostring_addsub_dial3 = 336397247L;
const ISC_STATUS isc_dsql_invalid_type_addsub_dial3 = 336397248L;
const ISC_STATUS isc_dsql_invalid_type_multip_dial1 = 336397249L;
const ISC_STATUS isc_dsql_nostring_multip_dial3 = 336397250L;
const ISC_STATUS isc_dsql_invalid_type_multip_dial3 = 336397251L;
const ISC_STATUS isc_dsql_mustuse_numeric_div_dial1 = 336397252L;
const ISC_STATUS isc_dsql_nostring_div_dial3 = 336397253L;
const ISC_STATUS isc_dsql_invalid_type_div_dial3 = 336397254L;
const ISC_STATUS isc_dsql_nostring_neg_dial3 = 336397255L;
const ISC_STATUS isc_dsql_invalid_type_neg = 336397256L;
const ISC_STATUS isc_gsec_cant_open_db = 336723983L;
const ISC_STATUS isc_gsec_switches_error = 336723984L;
const ISC_STATUS isc_gsec_no_op_spec = 336723985L;
@ -945,7 +962,7 @@ const ISC_STATUS isc_fbsvcmgr_query_err = 336986117L;
const ISC_STATUS isc_fbsvcmgr_switch_unknown = 336986118L;
const ISC_STATUS isc_fbsvcmgr_bad_sm = 336986159L;
const ISC_STATUS isc_utl_trusted_switch = 337051649L;
const ISC_STATUS isc_err_max = 889;
const ISC_STATUS isc_err_max = 906;
#else /* c definitions */
@ -1793,6 +1810,23 @@ const ISC_STATUS isc_err_max = 889;
#define isc_dsql_cte_not_used 336397237L
#define isc_dsql_col_more_than_once_view 336397238L
#define isc_dsql_unsupported_in_auto_trans 336397239L
#define isc_dsql_eval_unknode 336397240L
#define isc_dsql_agg_wrongarg 336397241L
#define isc_dsql_agg2_wrongarg 336397242L
#define isc_dsql_nodateortime_pm_string 336397243L
#define isc_dsql_invalid_datetime_subtract 336397244L
#define isc_dsql_invalid_dateortime_add 336397245L
#define isc_dsql_invalid_type_minus_date 336397246L
#define isc_dsql_nostring_addsub_dial3 336397247L
#define isc_dsql_invalid_type_addsub_dial3 336397248L
#define isc_dsql_invalid_type_multip_dial1 336397249L
#define isc_dsql_nostring_multip_dial3 336397250L
#define isc_dsql_invalid_type_multip_dial3 336397251L
#define isc_dsql_mustuse_numeric_div_dial1 336397252L
#define isc_dsql_nostring_div_dial3 336397253L
#define isc_dsql_invalid_type_div_dial3 336397254L
#define isc_dsql_nostring_neg_dial3 336397255L
#define isc_dsql_invalid_type_neg 336397256L
#define isc_gsec_cant_open_db 336723983L
#define isc_gsec_switches_error 336723984L
#define isc_gsec_no_op_spec 336723985L
@ -1860,7 +1894,7 @@ const ISC_STATUS isc_err_max = 889;
#define isc_fbsvcmgr_switch_unknown 336986118L
#define isc_fbsvcmgr_bad_sm 336986159L
#define isc_utl_trusted_switch 337051649L
#define isc_err_max 889
#define isc_err_max 906
#endif

View File

@ -844,72 +844,89 @@ static const struct {
{336397237, "CTE \"@1\" is not used in query"}, /* 820, dsql_cte_not_used */
{336397238, "column @1 appears more than once in ALTER VIEW"}, /* 821, dsql_col_more_than_once_view */
{336397239, "@1 is not supported inside IN AUTONOMOUS TRANSACTION block"}, /* 822, dsql_unsupported_in_auto_trans */
{336723983, "unable to open database"}, /* 823, gsec_cant_open_db */
{336723984, "error in switch specifications"}, /* 824, gsec_switches_error */
{336723985, "no operation specified"}, /* 825, gsec_no_op_spec */
{336723986, "no user name specified"}, /* 826, gsec_no_usr_name */
{336723987, "add record error"}, /* 827, gsec_err_add */
{336723988, "modify record error"}, /* 828, gsec_err_modify */
{336723989, "find/modify record error"}, /* 829, gsec_err_find_mod */
{336723990, "record not found for user: @1"}, /* 830, gsec_err_rec_not_found */
{336723991, "delete record error"}, /* 831, gsec_err_delete */
{336723992, "find/delete record error"}, /* 832, gsec_err_find_del */
{336723996, "find/display record error"}, /* 833, gsec_err_find_disp */
{336723997, "invalid parameter, no switch defined"}, /* 834, gsec_inv_param */
{336723998, "operation already specified"}, /* 835, gsec_op_specified */
{336723999, "password already specified"}, /* 836, gsec_pw_specified */
{336724000, "uid already specified"}, /* 837, gsec_uid_specified */
{336724001, "gid already specified"}, /* 838, gsec_gid_specified */
{336724002, "project already specified"}, /* 839, gsec_proj_specified */
{336724003, "organization already specified"}, /* 840, gsec_org_specified */
{336724004, "first name already specified"}, /* 841, gsec_fname_specified */
{336724005, "middle name already specified"}, /* 842, gsec_mname_specified */
{336724006, "last name already specified"}, /* 843, gsec_lname_specified */
{336724008, "invalid switch specified"}, /* 844, gsec_inv_switch */
{336724009, "ambiguous switch specified"}, /* 845, gsec_amb_switch */
{336724010, "no operation specified for parameters"}, /* 846, gsec_no_op_specified */
{336724011, "no parameters allowed for this operation"}, /* 847, gsec_params_not_allowed */
{336724012, "incompatible switches specified"}, /* 848, gsec_incompat_switch */
{336724044, "Invalid user name (maximum 31 bytes allowed)"}, /* 849, gsec_inv_username */
{336724045, "Warning - maximum 8 significant bytes of password used"}, /* 850, gsec_inv_pw_length */
{336724046, "database already specified"}, /* 851, gsec_db_specified */
{336724047, "database administrator name already specified"}, /* 852, gsec_db_admin_specified */
{336724048, "database administrator password already specified"}, /* 853, gsec_db_admin_pw_specified */
{336724049, "SQL role name already specified"}, /* 854, gsec_sql_role_specified */
{336789504, "The license file does not exist or could not be opened for read"}, /* 855, license_no_file */
{336789523, "operation already specified"}, /* 856, license_op_specified */
{336789524, "no operation specified"}, /* 857, license_op_missing */
{336789525, "invalid switch"}, /* 858, license_inv_switch */
{336789526, "invalid switch combination"}, /* 859, license_inv_switch_combo */
{336789527, "illegal operation/switch combination"}, /* 860, license_inv_op_combo */
{336789528, "ambiguous switch"}, /* 861, license_amb_switch */
{336789529, "invalid parameter, no switch specified"}, /* 862, license_inv_parameter */
{336789530, "switch does not take any parameter"}, /* 863, license_param_specified */
{336789531, "switch requires a parameter"}, /* 864, license_param_req */
{336789532, "syntax error in command line"}, /* 865, license_syntx_error */
{336789534, "The certificate was not added. A duplicate ID exists in the license file."}, /* 866, license_dup_id */
{336789535, "The certificate was not added. Invalid certificate ID / Key combination."}, /* 867, license_inv_id_key */
{336789536, "The certificate was not removed. The key does not exist or corresponds to a temporary evaluation license."}, /* 868, license_err_remove */
{336789537, "An error occurred updating the license file. Operation cancelled."}, /* 869, license_err_update */
{336789538, "The certificate could not be validated based on the information given. Please recheck the ID and key information."}, /* 870, license_err_convert */
{336789539, "Operation failed. An unknown error occurred."}, /* 871, license_err_unk */
{336789540, "Add license operation failed, KEY: @1 ID: @2"}, /* 872, license_svc_err_add */
{336789541, "Remove license operation failed, KEY: @1"}, /* 873, license_svc_err_remove */
{336789563, "The evaluation license has already been used on this server. You need to purchase a non-evaluation license."}, /* 874, license_eval_exists */
{336920577, "found unknown switch"}, /* 875, gstat_unknown_switch */
{336920578, "please retry, giving a database name"}, /* 876, gstat_retry */
{336920579, "Wrong ODS version, expected @1, encountered @2"}, /* 877, gstat_wrong_ods */
{336920580, "Unexpected end of database file."}, /* 878, gstat_unexpected_eof */
{336920605, "Can't open database file @1"}, /* 879, gstat_open_err */
{336920606, "Can't read a database page"}, /* 880, gstat_read_err */
{336920607, "System memory exhausted"}, /* 881, gstat_sysmemex */
{336986113, "Wrong value for access mode"}, /* 882, fbsvcmgr_bad_am */
{336986114, "Wrong value for write mode"}, /* 883, fbsvcmgr_bad_wm */
{336986115, "Wrong value for reserve space"}, /* 884, fbsvcmgr_bad_rs */
{336986116, "Unknown tag (@1) in info_svr_db_info block after isc_svc_query()"}, /* 885, fbsvcmgr_info_err */
{336986117, "Unknown tag (@1) in isc_svc_query() results"}, /* 886, fbsvcmgr_query_err */
{336986118, "Unknown switch \"@1\""}, /* 887, fbsvcmgr_switch_unknown */
{336986159, "Wrong value for shutdown mode"}, /* 888, fbsvcmgr_bad_sm */
{337051649, "Switches trusted_svc and trusted_role are not supported from command line"}, /* 889, utl_trusted_switch */
{336397240, "Unknown node type @1 in dsql/GEN_expr"}, /* 823, dsql_eval_unknode */
{336397241, "Argument for @1 in dialect 1 must be string or numeric"}, /* 824, dsql_agg_wrongarg */
{336397242, "Argument for @1 in dialect 2 must be numeric"}, /* 825, dsql_agg2_wrongarg */
{336397243, "Strings cannot be added to or subtracted from DATE or TIME types"}, /* 826, dsql_nodateortime_pm_string */
{336397244, "Invalid data type for subtraction involving DATE, TIME or TIMESTAMP types"}, /* 827, dsql_invalid_datetime_subtract */
{336397245, "Adding two DATE values or two TIME values is not allowed"}, /* 828, dsql_invalid_dateortime_add */
{336397246, "DATE value cannot be subtracted from the provided data type"}, /* 829, dsql_invalid_type_minus_date */
{336397247, "Strings cannot be added or subtracted in dialect 3"}, /* 830, dsql_nostring_addsub_dial3 */
{336397248, "Invalid data type for addition or subtraction in dialect 3"}, /* 831, dsql_invalid_type_addsub_dial3 */
{336397249, "Invalid data type for multiplication in dialect 1"}, /* 832, dsql_invalid_type_multip_dial1 */
{336397250, "Strings cannot be multiplied in dialect 3"}, /* 833, dsql_nostring_multip_dial3 */
{336397251, "Invalid data type for multiplication in dialect 3"}, /* 834, dsql_invalid_type_multip_dial3 */
{336397252, "Division in dialect 1 must be between numeric data types"}, /* 835, dsql_mustuse_numeric_div_dial1 */
{336397253, "Strings cannot be divided in dialect 3"}, /* 836, dsql_nostring_div_dial3 */
{336397254, "Invalid data type for division in dialect 3"}, /* 837, dsql_invalid_type_div_dial3 */
{336397255, "Strings cannot be negated (applied the minus operator) in dialect 3"}, /* 838, dsql_nostring_neg_dial3 */
{336397256, "Invalid data type for negation (minus operator)"}, /* 839, dsql_invalid_type_neg */
{336723983, "unable to open database"}, /* 840, gsec_cant_open_db */
{336723984, "error in switch specifications"}, /* 841, gsec_switches_error */
{336723985, "no operation specified"}, /* 842, gsec_no_op_spec */
{336723986, "no user name specified"}, /* 843, gsec_no_usr_name */
{336723987, "add record error"}, /* 844, gsec_err_add */
{336723988, "modify record error"}, /* 845, gsec_err_modify */
{336723989, "find/modify record error"}, /* 846, gsec_err_find_mod */
{336723990, "record not found for user: @1"}, /* 847, gsec_err_rec_not_found */
{336723991, "delete record error"}, /* 848, gsec_err_delete */
{336723992, "find/delete record error"}, /* 849, gsec_err_find_del */
{336723996, "find/display record error"}, /* 850, gsec_err_find_disp */
{336723997, "invalid parameter, no switch defined"}, /* 851, gsec_inv_param */
{336723998, "operation already specified"}, /* 852, gsec_op_specified */
{336723999, "password already specified"}, /* 853, gsec_pw_specified */
{336724000, "uid already specified"}, /* 854, gsec_uid_specified */
{336724001, "gid already specified"}, /* 855, gsec_gid_specified */
{336724002, "project already specified"}, /* 856, gsec_proj_specified */
{336724003, "organization already specified"}, /* 857, gsec_org_specified */
{336724004, "first name already specified"}, /* 858, gsec_fname_specified */
{336724005, "middle name already specified"}, /* 859, gsec_mname_specified */
{336724006, "last name already specified"}, /* 860, gsec_lname_specified */
{336724008, "invalid switch specified"}, /* 861, gsec_inv_switch */
{336724009, "ambiguous switch specified"}, /* 862, gsec_amb_switch */
{336724010, "no operation specified for parameters"}, /* 863, gsec_no_op_specified */
{336724011, "no parameters allowed for this operation"}, /* 864, gsec_params_not_allowed */
{336724012, "incompatible switches specified"}, /* 865, gsec_incompat_switch */
{336724044, "Invalid user name (maximum 31 bytes allowed)"}, /* 866, gsec_inv_username */
{336724045, "Warning - maximum 8 significant bytes of password used"}, /* 867, gsec_inv_pw_length */
{336724046, "database already specified"}, /* 868, gsec_db_specified */
{336724047, "database administrator name already specified"}, /* 869, gsec_db_admin_specified */
{336724048, "database administrator password already specified"}, /* 870, gsec_db_admin_pw_specified */
{336724049, "SQL role name already specified"}, /* 871, gsec_sql_role_specified */
{336789504, "The license file does not exist or could not be opened for read"}, /* 872, license_no_file */
{336789523, "operation already specified"}, /* 873, license_op_specified */
{336789524, "no operation specified"}, /* 874, license_op_missing */
{336789525, "invalid switch"}, /* 875, license_inv_switch */
{336789526, "invalid switch combination"}, /* 876, license_inv_switch_combo */
{336789527, "illegal operation/switch combination"}, /* 877, license_inv_op_combo */
{336789528, "ambiguous switch"}, /* 878, license_amb_switch */
{336789529, "invalid parameter, no switch specified"}, /* 879, license_inv_parameter */
{336789530, "switch does not take any parameter"}, /* 880, license_param_specified */
{336789531, "switch requires a parameter"}, /* 881, license_param_req */
{336789532, "syntax error in command line"}, /* 882, license_syntx_error */
{336789534, "The certificate was not added. A duplicate ID exists in the license file."}, /* 883, license_dup_id */
{336789535, "The certificate was not added. Invalid certificate ID / Key combination."}, /* 884, license_inv_id_key */
{336789536, "The certificate was not removed. The key does not exist or corresponds to a temporary evaluation license."}, /* 885, license_err_remove */
{336789537, "An error occurred updating the license file. Operation cancelled."}, /* 886, license_err_update */
{336789538, "The certificate could not be validated based on the information given. Please recheck the ID and key information."}, /* 887, license_err_convert */
{336789539, "Operation failed. An unknown error occurred."}, /* 888, license_err_unk */
{336789540, "Add license operation failed, KEY: @1 ID: @2"}, /* 889, license_svc_err_add */
{336789541, "Remove license operation failed, KEY: @1"}, /* 890, license_svc_err_remove */
{336789563, "The evaluation license has already been used on this server. You need to purchase a non-evaluation license."}, /* 891, license_eval_exists */
{336920577, "found unknown switch"}, /* 892, gstat_unknown_switch */
{336920578, "please retry, giving a database name"}, /* 893, gstat_retry */
{336920579, "Wrong ODS version, expected @1, encountered @2"}, /* 894, gstat_wrong_ods */
{336920580, "Unexpected end of database file."}, /* 895, gstat_unexpected_eof */
{336920605, "Can't open database file @1"}, /* 896, gstat_open_err */
{336920606, "Can't read a database page"}, /* 897, gstat_read_err */
{336920607, "System memory exhausted"}, /* 898, gstat_sysmemex */
{336986113, "Wrong value for access mode"}, /* 899, fbsvcmgr_bad_am */
{336986114, "Wrong value for write mode"}, /* 900, fbsvcmgr_bad_wm */
{336986115, "Wrong value for reserve space"}, /* 901, fbsvcmgr_bad_rs */
{336986116, "Unknown tag (@1) in info_svr_db_info block after isc_svc_query()"}, /* 902, fbsvcmgr_info_err */
{336986117, "Unknown tag (@1) in isc_svc_query() results"}, /* 903, fbsvcmgr_query_err */
{336986118, "Unknown switch \"@1\""}, /* 904, fbsvcmgr_switch_unknown */
{336986159, "Wrong value for shutdown mode"}, /* 905, fbsvcmgr_bad_sm */
{337051649, "Switches trusted_svc and trusted_role are not supported from command line"}, /* 906, utl_trusted_switch */
{0, NULL}
};

View File

@ -843,6 +843,23 @@ static const struct {
{336397237, -104}, /* 949 dsql_cte_not_used */
{336397238, -104}, /* 950 dsql_col_more_than_once_view */
{336397239, -901}, /* 951 dsql_unsupported_in_auto_trans */
{336397240, -833}, /* 952 dsql_eval_unknode */
{336397241, -833}, /* 953 dsql_agg_wrongarg */
{336397242, -833}, /* 954 dsql_agg2_wrongarg */
{336397243, -833}, /* 955 dsql_nodateortime_pm_string */
{336397244, -833}, /* 956 dsql_invalid_datetime_subtract */
{336397245, -833}, /* 957 dsql_invalid_dateortime_add */
{336397246, -833}, /* 958 dsql_invalid_type_minus_date */
{336397247, -833}, /* 959 dsql_nostring_addsub_dial3 */
{336397248, -833}, /* 960 dsql_invalid_type_addsub_dial3 */
{336397249, -833}, /* 961 dsql_invalid_type_multip_dial1 */
{336397250, -833}, /* 962 dsql_nostring_multip_dial3 */
{336397251, -833}, /* 963 dsql_invalid_type_multip_dial3 */
{336397252, -833}, /* 964 dsql_mustuse_numeric_div_dial1 */
{336397253, -833}, /* 965 dsql_nostring_div_dial3 */
{336397254, -833}, /* 966 dsql_invalid_type_div_dial3 */
{336397255, -833}, /* 967 dsql_nostring_neg_dial3 */
{336397256, -833}, /* 968 dsql_invalid_type_neg */
{336723983, -901}, /* 15 gsec_cant_open_db */
{336723984, -901}, /* 16 gsec_switches_error */
{336723985, -901}, /* 17 gsec_no_op_spec */

View File

@ -843,6 +843,23 @@ static const struct {
{336397237, "42000"}, // 949 dsql_cte_not_used
{336397238, "42000"}, // 950 dsql_col_more_than_once_view
{336397239, "HY000"}, // 951 dsql_unsupported_in_auto_trans
{336397240, "42000"}, // 952 dsql_eval_unknode
{336397241, "42000"}, // 953 dsql_agg_wrongarg
{336397242, "42000"}, // 954 dsql_agg2_wrongarg
{336397243, "42000"}, // 955 dsql_nodateortime_pm_string
{336397244, "42000"}, // 956 dsql_invalid_datetime_subtract
{336397245, "42000"}, // 957 dsql_invalid_dateortime_add
{336397246, "42000"}, // 958 dsql_invalid_type_minus_date
{336397247, "42000"}, // 959 dsql_nostring_addsub_dial3
{336397248, "42000"}, // 960 dsql_invalid_type_addsub_dial3
{336397249, "42000"}, // 961 dsql_invalid_type_multip_dial1
{336397250, "42000"}, // 962 dsql_nostring_multip_dial3
{336397251, "42000"}, // 963 dsql_invalid_type_multip_dial3
{336397252, "42000"}, // 964 dsql_mustuse_numeric_div_dial1
{336397253, "42000"}, // 965 dsql_nostring_div_dial3
{336397254, "42000"}, // 966 dsql_invalid_type_div_dial3
{336397255, "42000"}, // 967 dsql_nostring_neg_dial3
{336397256, "42000"}, // 968 dsql_invalid_type_neg
{336723983, "00000"}, // 15 gsec_cant_open_db
{336723984, "00000"}, // 16 gsec_switches_error
{336723985, "00000"}, // 17 gsec_no_op_spec

View File

@ -18,7 +18,7 @@ set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUM
('1996-11-07 13:39:40', 'INSTALL', 10, 1)
('1996-11-07 13:38:41', 'TEST', 11, 4)
('2008-04-10 23:40:00', 'GBAK', 12, 306)
('2008-03-17 12:05:00', 'SQLERR', 13, 952)
('2008-09-26 07:37:16', 'SQLERR', 13, 969)
('1996-11-07 13:38:42', 'SQLWARN', 14, 613)
('2006-09-10 03:04:31', 'JRD_BUGCHK', 15, 307)
--

View File

@ -37,8 +37,8 @@ the total length of a blob in a call to gds_$database_info.');
problem may be an obvious one, such as incorrect file name or
a file protection problem. If that does not eliminate the
problem, check your program logic. To avoid errors when
the user enters a database name interactively,
add an error handler to the statement that causes this
the user enters a database name interactively,
add an error handler to the statement that causes this
message to appear.', 'Your program encountered an input or output error.');
('lock_conflict', NULL, NULL, NULL, 0, 25, NULL, 'lock conflict on no wait transaction', NULL, NULL);
('metadata_corrupt', NULL, NULL, NULL, 0, 26, NULL, 'corrupt system table', NULL, NULL);
@ -64,7 +64,7 @@ receive this error while using GDML or SQL, please submit
a bug report.', 'The actual length of a buffer does not correspond to what
the request language says it should be.');
('read_only_field', NULL, NULL, NULL, 0, 39, NULL, 'attempted update of read-only column', 'If the read-only field is in a system relation, change your
program. If the field is a COMPUTED field, you have to
program. If the field is a COMPUTED field, you have to
change the source fields to change its value. If the field
takes part in a view, update it in its source relations.', 'Your program tried to change the value of a read-only
field in a system relation, a COMPUTED field, or a field
@ -74,28 +74,28 @@ reserved for READ access.');
('read_only_trans', NULL, NULL, NULL, 0, 41, NULL, 'attempted update during read-only transaction', 'If you want to update the database, use a READ_WRITE
transaction.', 'Your program tried to update during a READ_ONLY translation.');
('read_only_view', NULL, NULL, NULL, 0, 42, NULL, 'cannot update read-only view @1', 'Views that include a record select, join, or project cannot
be updated. If you want to perform updates, you must do so
be updated. If you want to perform updates, you must do so
through the source relations. If you are updating join terms,
make sure that you change them in all relations. In any case,
update the source relations in a single transaction so that
you make the changes consistently.', 'Your program tried to update a view that contains a
update the source relations in a single transaction so that
you make the changes consistently.', 'Your program tried to update a view that contains a
record select, join, or project operation.');
('req_no_trans', NULL, NULL, NULL, 0, 43, NULL, 'no transaction for request', 'Check and correct your program logic. Commit or roll back
the transaction only after you have completed all operations
that you want in the transaction.', 'Your program tried to continue a request after the enveloping
transaction had been committed or rolled back.');
('req_sync', NULL, NULL, NULL, 0, 44, NULL, 'request synchronization error', 'For call interface programs, locate and correct the program
error. If you received this error while using GDML or SQL,
error. If you received this error while using GDML or SQL,
please submit a bug report. ', 'Your program issued a send or receive for a message type
that did not match the logic of the BLR request.');
('req_wrong_db', NULL, NULL, NULL, 0, 45, NULL, 'request referenced an unavailable database', 'Change your program so that the required database is
within the scope of the transaction.', 'Your program referenced a relation from a database that is
within the scope of the transaction.', 'Your program referenced a relation from a database that is
not available within the current transaction.');
('segment', NULL, NULL, NULL, 0, 46, NULL, 'segment buffer length shorter than expected', 'Check the segment_buffer_length parameter on the blob calls
and make sure that it is long enough for handling the
segments of the blob field you are accessing. Alternately,
you could trap for this error and accept truncated values.', 'The length of the segment_buffer on a blob call was shorter
than the segment returned by the database software.
than the segment returned by the database software.
Therefore, the database software could return only part of
the segment.');
('segstr_eof', NULL, NULL, NULL, 0, 47, NULL, 'attempted retrieval of more segments than exist', 'Change your program so that it tests for this condition
@ -113,15 +113,15 @@ creating.');
('segstr_no_trans', NULL, NULL, NULL, 0, 50, NULL, 'attempted action on BLOB outside transaction', 'Change your program so that you perform whatever data
manipulation is required in a transaction before you end
that transaction.', 'Your program reference a blob field after it committed or
rolled back the transaction that had been processing the
rolled back the transaction that had been processing the
field.');
('segstr_no_write', NULL, NULL, NULL, 0, 51, NULL, 'attempted write to read-only BLOB', 'If you are using the call interface, open the blob for
by calling gds_$create_blob. If you are using GDML, open
the blob with the create_blob statement.', 'Your program tried to write to a blob field that
that had been opened for read access.');
('segstr_wrong_db', NULL, NULL, NULL, 0, 52, NULL, 'attempted reference to BLOB in unavailable database', 'Change your program so that the required database is
available to the current transaction.', 'Your program referenced a blob field from a relation
in a database that is not available to the current
available to the current transaction.', 'Your program referenced a blob field from a relation
in a database that is not available to the current
transaction.');
('sys_request', NULL, NULL, NULL, 0, 53, NULL, 'operating system directive @1 failed', 'Check secondary messages for more information. When you
isolate the problem, you may want to include an error handler
@ -224,7 +224,7 @@ on the computer you are using.');
('obj_in_use', NULL, NULL, NULL, 0, 133, NULL, 'object @1 is in use', NULL, 'The named relation or index is currently in use and cannot be deleted.');
('nofilter', NULL, NULL, NULL, 0, 134, 0, 'filter not found to convert type @1 to type @2', NULL, NULL);
('shadow_accessed', NULL, NULL, NULL, 0, 135, NULL, 'cannot attach active shadow file', 'If the original database file is available,
erase the record(s) in RDB$FILES which
erase the record(s) in RDB$FILES which
defines the shadow. Otherwise, use the
GFIX activate switch to convert the shadow
to an active database.', 'You have attempted to attach a file currently
@ -2600,6 +2600,25 @@ ERROR: Backup incomplete', NULL, NULL);
('dsql_cte_not_used', 'dsql_req::checkUnusedCTEs', 'pass1.cpp', NULL, 13, 949, NULL, 'CTE "@1" is not used in query', NULL, NULL);
('dsql_col_more_than_once_view', 'define_view', 'ddl.cpp', NULL, 13, 950, NULL, 'column @1 appears more than once in ALTER VIEW', NULL, NULL);
('dsql_unsupported_in_auto_trans', 'PASS1_statement', 'pass1.cpp', NULL, 13, 951, NULL, '@1 is not supported inside IN AUTONOMOUS TRANSACTION block', NULL, NULL);
-- These add more information to the dumb isc_expression_eval_err
('dsql_eval_unknode', 'GEN_expr', 'dsql/gen.c', NULL, 13, 952, NULL, 'Unknown node type @1 in dsql/GEN_expr', NULL, NULL)
('dsql_agg_wrongarg', 'MAKE_desc', 'make.cpp', NULL, 13, 953, NULL, 'Argument for @1 in dialect 1 must be string or numeric', NULL, NULL)
('dsql_agg2_wrongarg', 'MAKE_desc', 'make.cpp', NULL, 13, 954, NULL, 'Argument for @1 in dialect 2 must be numeric', NULL, NULL)
('dsql_nodateortime_pm_string', 'MAKE_desc', 'make.cpp', NULL, 13, 955, NULL, 'Strings cannot be added to or subtracted from DATE or TIME types', NULL, NULL)
('dsql_invalid_datetime_subtract', 'MAKE_desc', 'make.cpp', NULL, 13, 956, NULL, 'Invalid data type for subtraction involving DATE, TIME or TIMESTAMP types', NULL, NULL)
('dsql_invalid_dateortime_add', 'MAKE_desc', 'make.cpp', NULL, 13, 957, NULL, 'Adding two DATE values or two TIME values is not allowed', NULL, NULL)
('dsql_invalid_type_minus_date', 'MAKE_desc', 'make.cpp', NULL, 13, 958, NULL, 'DATE value cannot be subtracted from the provided data type', NULL, NULL)
('dsql_nostring_addsub_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 959, NULL, 'Strings cannot be added or subtracted in dialect 3', NULL, NULL)
('dsql_invalid_type_addsub_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 960, NULL, 'Invalid data type for addition or subtraction in dialect 3', NULL, NULL)
('dsql_invalid_type_multip_dial1', 'MAKE_desc', 'make.cpp', NULL, 13, 961, NULL, 'Invalid data type for multiplication in dialect 1', NULL, NULL)
('dsql_nostring_multip_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 962, NULL, 'Strings cannot be multiplied in dialect 3', NULL, NULL)
('dsql_invalid_type_multip_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 963, NULL, 'Invalid data type for multiplication in dialect 3', NULL, NULL)
('dsql_mustuse_numeric_div_dial1', 'MAKE_desc', 'make.cpp', NULL, 13, 964, NULL, 'Division in dialect 1 must be between numeric data types', NULL, NULL)
('dsql_nostring_div_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 965, NULL, 'Strings cannot be divided in dialect 3', NULL, NULL)
('dsql_invalid_type_div_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 966, NULL, 'Invalid data type for division in dialect 3', NULL, NULL)
('dsql_nostring_neg_dial3', 'MAKE_desc', 'make.cpp', NULL, 13, 967, NULL, 'Strings cannot be negated (applied the minus operator) in dialect 3', NULL, NULL)
('dsql_invalid_type_neg', 'MAKE_desc', 'make.cpp', NULL, 13, 968, NULL, 'Invalid data type for negation (minus operator)', NULL, NULL)
-- End of extras for isc_expression_eval_err
-- SQLWARN
(NULL, NULL, NULL, NULL, 14, 100, NULL, 'Row not found for fetch, update or delete, or the result of a query is an empty table.', NULL, NULL);
(NULL, NULL, NULL, NULL, 14, 101, NULL, 'segment buffer length shorter than expected', NULL, NULL);

View File

@ -829,6 +829,25 @@ COMMIT WORK;
(-104, '42', '000', 13, 949, 'dsql_cte_not_used', NULL, NULL)
(-104, '42', '000', 13, 950, 'dsql_col_more_than_once_view', NULL, NULL)
(-901, 'HY', '000', 13, 951, 'dsql_unsupported_in_auto_trans', NULL, NULL)
-- For the following values I simply copied the error code and SQL codes from expression_eval_err
(-833, '42', '000', 13, 952, 'dsql_eval_unknode', NULL, NULL)
(-833, '42', '000', 13, 953, 'dsql_agg_wrongarg', NULL, NULL)
(-833, '42', '000', 13, 954, 'dsql_agg2_wrongarg', NULL, NULL)
(-833, '42', '000', 13, 955, 'dsql_nodateortime_pm_string', NULL, NULL)
(-833, '42', '000', 13, 956, 'dsql_invalid_datetime_subtract', NULL, NULL)
(-833, '42', '000', 13, 957, 'dsql_invalid_dateortime_add', NULL, NULL)
(-833, '42', '000', 13, 958, 'dsql_invalid_type_minus_date', NULL, NULL)
(-833, '42', '000', 13, 959, 'dsql_nostring_addsub_dial3', NULL, NULL)
(-833, '42', '000', 13, 960, 'dsql_invalid_type_addsub_dial3', NULL, NULL)
(-833, '42', '000', 13, 961, 'dsql_invalid_type_multip_dial1', NULL, NULL)
(-833, '42', '000', 13, 962, 'dsql_nostring_multip_dial3', NULL, NULL)
(-833, '42', '000', 13, 963, 'dsql_invalid_type_multip_dial3', NULL, NULL)
(-833, '42', '000', 13, 964, 'dsql_mustuse_numeric_div_dial1', NULL, NULL)
(-833, '42', '000', 13, 965, 'dsql_nostring_div_dial3', NULL, NULL)
(-833, '42', '000', 13, 966, 'dsql_invalid_type_div_dial3', NULL, NULL)
(-833, '42', '000', 13, 967, 'dsql_nostring_neg_dial3', NULL, NULL)
(-833, '42', '000', 13, 968, 'dsql_invalid_type_neg', NULL, NULL)
-- End of expression_eval_err subcodes
-- GSEC
(-901, '00', '000', 18, 15, 'gsec_cant_open_db', NULL, NULL)
(-901, '00', '000', 18, 16, 'gsec_switches_error', NULL, NULL)