"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/dsql/ddl.cpp" between
Firebird-3.0.2.32703-0.tar.bz2 and Firebird-3.0.4.33054-0.tar.bz2

About: Firebird is a relational database offering many ANSI SQL standard features.

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

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)