ddl.cpp (Firebird-3.0.2.32703-0.tar.bz2) | : | ddl.cpp (Firebird-3.0.4.33054-0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 210 | skipping to change at line 210 | |||
if (field->dimensions != 0) | if (field->dimensions != 0) | |||
{ | { | |||
ERRD_post(Arg::Gds(isc_wish_list) << | ERRD_post(Arg::Gds(isc_wish_list) << | |||
Arg::Gds(isc_random) << | Arg::Gds(isc_random) << | |||
Arg::Str("Usage of domain or TYPE OF COLUMN of ar ray type in PSQL")); | Arg::Str("Usage of domain or TYPE OF COLUMN of ar ray type in PSQL")); | |||
} | } | |||
if (field->dtype <= dtype_any_text || | if (field->dtype <= dtype_any_text || | |||
(field->dtype == dtype_blob && field->subType == isc_blob _text)) | (field->dtype == dtype_blob && field->subType == isc_blob _text)) | |||
{ | { | |||
field->charSet = METD_get_charset_name(dsqlScratch->getTr ansaction(), field->charSetId); | field->charSet = METD_get_charset_name(dsqlScratch->getTr ansaction(), field->charSetId.value); | |||
} | } | |||
} | } | |||
if ((field->dtype > dtype_any_text) && field->dtype != dtype_blob) | if ((field->dtype > dtype_any_text) && field->dtype != dtype_blob) | |||
{ | { | |||
if (field->charSet.hasData() || collation_name.hasData() || (fiel d->flags & FLD_national)) | if (field->charSet.hasData() || collation_name.hasData() || (fiel d->flags & FLD_national)) | |||
{ | { | |||
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | |||
Arg::Gds(isc_dsql_datatype_err) << Arg: :Gds(isc_collation_requires_text)); | Arg::Gds(isc_dsql_datatype_err) << Arg: :Gds(isc_collation_requires_text)); | |||
} | } | |||
skipping to change at line 268 | skipping to change at line 268 | |||
{ | { | |||
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | |||
Arg::Gds(isc_dsql_datatype_err) << | Arg::Gds(isc_dsql_datatype_err) << | |||
Arg::Gds(isc_collation_requires_text)); | Arg::Gds(isc_collation_requires_text)); | |||
} | } | |||
if (field->subType != isc_blob_text) | if (field->subType != isc_blob_text) | |||
return; | return; | |||
} | } | |||
if (field->charSetId != 0 && collation_name.isEmpty()) | if (field->charSetId.specified && collation_name.isEmpty()) | |||
{ | { | |||
// This field has already been resolved once, and the collation | // This field has already been resolved once, and the collation | |||
// hasn't changed. Therefore, no need to do it again. | // hasn't changed. Therefore, no need to do it again. | |||
return; | return; | |||
} | } | |||
if (modifying) | if (modifying) | |||
{ | { | |||
const dsql_fld* afield = field->fld_next; | const dsql_fld* afield = field->fld_next; | |||
USHORT bpc = 0; | USHORT bpc = 0; | |||
skipping to change at line 295 | skipping to change at line 295 | |||
fb_assert(afield->fld_relation == dsqlScratch->re lation || !dsqlScratch->relation); | fb_assert(afield->fld_relation == dsqlScratch->re lation || !dsqlScratch->relation); | |||
break; | break; | |||
} | } | |||
afield = afield->fld_next; | afield = afield->fld_next; | |||
} | } | |||
if (afield) | if (afield) | |||
{ | { | |||
field->charSetId = afield->charSetId; | field->charSetId = afield->charSetId; | |||
bpc = METD_get_charset_bpc(dsqlScratch->getTransaction(), field->charSetId); | bpc = METD_get_charset_bpc(dsqlScratch->getTransaction(), field->charSetId.value); | |||
field->collationId = afield->collationId; | field->collationId = afield->collationId; | |||
field->textType = afield->textType; | field->textType = afield->textType; | |||
if (afield->flags & FLD_national) | if (afield->flags & FLD_national) | |||
field->flags |= FLD_national; | field->flags |= FLD_national; | |||
else | else | |||
field->flags &= ~FLD_national; | field->flags &= ~FLD_national; | |||
assign_field_length(field, bpc); | assign_field_length(field, bpc); | |||
return; | return; | |||
} | } | |||
} | } | |||
if (!(field->charSet.hasData() || field->charSetId || // set if a domai n | if (!(field->charSet.hasData() || field->charSetId.specified || // set if a domain | |||
(field->flags & FLD_national))) | (field->flags & FLD_national))) | |||
{ | { | |||
// Attach the database default character set, if not otherwise sp ecified | // Attach the database default character set, if not otherwise sp ecified | |||
MetaName defaultCharSet; | MetaName defaultCharSet; | |||
if (dsqlScratch->flags & DsqlCompilerScratch::FLAG_DDL) | if (dsqlScratch->flags & DsqlCompilerScratch::FLAG_DDL) | |||
defaultCharSet = METD_get_default_charset(dsqlScratch->ge tTransaction()); | defaultCharSet = METD_get_default_charset(dsqlScratch->ge tTransaction()); | |||
else | else | |||
{ | { | |||
skipping to change at line 370 | skipping to change at line 370 | |||
Arg::Gds(isc_charset_not_found) << Arg::Str(charset_name)) ; | Arg::Gds(isc_charset_not_found) << Arg::Str(charset_name)) ; | |||
} | } | |||
field->charSetId = resolved_charset->intlsym_charset_id; | field->charSetId = resolved_charset->intlsym_charset_id; | |||
resolved_type = resolved_charset; | resolved_type = resolved_charset; | |||
} | } | |||
if (collation_name.hasData()) | if (collation_name.hasData()) | |||
{ | { | |||
const dsql_intlsym* resolved_collation = METD_get_collation(dsqlS cratch->getTransaction(), | const dsql_intlsym* resolved_collation = METD_get_collation(dsqlS cratch->getTransaction(), | |||
collation_name, field->charSetId); | collation_name, field->charSetId.value); | |||
if (!resolved_collation) | if (!resolved_collation) | |||
{ | { | |||
MetaName charSetName; | MetaName charSetName; | |||
if (charset_name.hasData()) | if (charset_name.hasData()) | |||
charSetName = charset_name; | charSetName = charset_name; | |||
else | else | |||
{ | { | |||
charSetName = METD_get_charset_name(dsqlScratch-> getTransaction(), | charSetName = METD_get_charset_name(dsqlScratch-> getTransaction(), | |||
field->charSetId); | field->charSetId.value); | |||
} | } | |||
// Specified collation not found | // Specified collation not found | |||
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | |||
///Arg::Gds(isc_dsql_datatype_err) << / / (too large status vector) | ///Arg::Gds(isc_dsql_datatype_err) << / / (too large status vector) | |||
Arg::Gds(isc_collation_not_found) << collation_name << cha rSetName); | Arg::Gds(isc_collation_not_found) << collation_name << cha rSetName); | |||
} | } | |||
// If both specified, must be for same character set | // If both specified, must be for same character set | |||
// A "literal constant" must be handled (charset as ttype_dynamic ) | // A "literal constant" must be handled (charset as ttype_dynamic ) | |||
resolved_type = resolved_collation; | resolved_type = resolved_collation; | |||
if ((field->charSetId != resolved_type->intlsym_charset_id) && | if ((field->charSetId.value != resolved_type->intlsym_charset_id) | |||
(field->charSetId != ttype_dynamic)) | && | |||
(field->charSetId.value != ttype_dynamic)) | ||||
{ | { | |||
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-204) << | |||
Arg::Gds(isc_dsql_datatype_err) << | Arg::Gds(isc_dsql_datatype_err) << | |||
Arg::Gds(isc_collation_not_for_charset) << collation_name) ; | Arg::Gds(isc_collation_not_for_charset) << collation_name) ; | |||
} | } | |||
field->explicitCollation = true; | field->explicitCollation = true; | |||
} | } | |||
assign_field_length(field, resolved_type->intlsym_bytes_per_char); | assign_field_length(field, resolved_type->intlsym_bytes_per_char); | |||
End of changes. 7 change blocks. | ||||
8 lines changed or deleted | 9 lines changed or added |