diff --git a/src/dsql/DsqlCompilerScratch.cpp b/src/dsql/DsqlCompilerScratch.cpp index 0fd80b587e9..cf9a5340644 100644 --- a/src/dsql/DsqlCompilerScratch.cpp +++ b/src/dsql/DsqlCompilerScratch.cpp @@ -139,6 +139,15 @@ void DsqlCompilerScratch::putDtype(const TypeClause* field, bool useSubType) return; } + if (field->dimensions != 0) + { + fb_assert(field->dimensions > 0); + fb_assert(blr_dtypes[dtype_array] == blr_quad); + appendUChar(blr_dtypes[dtype_array]); + appendUChar(0); + return; + } + switch (field->dtype) { case dtype_cstring: diff --git a/src/dsql/ddl_proto.h b/src/dsql/ddl_proto.h index 8b1fae8c2d4..31358b8d62a 100644 --- a/src/dsql/ddl_proto.h +++ b/src/dsql/ddl_proto.h @@ -54,7 +54,7 @@ const USHORT blr_dtypes[] = { blr_sql_time, // dtype_sql_time blr_timestamp, // dtype_timestamp blr_blob, // dtype_blob // ASF: CAST use blr_blob2 because blr_blob doesn't fit in UCHAR - blr_short, // dtype_array + blr_quad, // dtype_array blr_int64, // dtype_int64 0, // DB_KEY blr_bool, // dtype_boolean diff --git a/src/dsql/make.cpp b/src/dsql/make.cpp index dc1d7a6b9ef..c78716255d4 100644 --- a/src/dsql/make.cpp +++ b/src/dsql/make.cpp @@ -74,9 +74,18 @@ void DsqlDescMaker::fromElement(dsc* desc, const TypeClause* field) void DsqlDescMaker::fromField(dsc* desc, const TypeClause* field) { - composeDesc(desc, - field->dtype, field->scale, field->subType, field->length, - field->charSetId.value, field->collationId, field->flags & FLD_nullable); + if (field->dimensions != 0) + { + composeDesc(desc, + dtype_array, /*scale*/0, /*subType*/0, sizeof(ISC_QUAD), + /*charSetId*/0, /*collationId*/0, field->flags & FLD_nullable); + } + else + { + composeDesc(desc, + field->dtype, field->scale, field->subType, field->length, + field->charSetId.value, field->collationId, field->flags & FLD_nullable); + } } void DsqlDescMaker::fromList(DsqlCompilerScratch* scratch, dsc* desc,