|
@@ -166,6 +166,7 @@ static void eclsyntaxerror(HqlGram * parser, const char * s, short yystate, int
|
|
|
DENORMALIZE
|
|
|
DEPRECATED
|
|
|
DESC
|
|
|
+ DICTIONARY
|
|
|
DISTRIBUTE
|
|
|
DISTRIBUTED
|
|
|
DISTRIBUTION
|
|
@@ -332,7 +333,6 @@ static void eclsyntaxerror(HqlGram * parser, const char * s, short yystate, int
|
|
|
PARTITION
|
|
|
PARTITION_ATTR
|
|
|
TOK_PATTERN
|
|
|
- PAYLOAD
|
|
|
PENALTY
|
|
|
PERSIST
|
|
|
PHYSICALFILENAME
|
|
@@ -479,6 +479,7 @@ static void eclsyntaxerror(HqlGram * parser, const char * s, short yystate, int
|
|
|
|
|
|
DATAROW_ID
|
|
|
DATASET_ID
|
|
|
+ DICTIONARY_ID
|
|
|
SCOPE_ID
|
|
|
VALUE_ID
|
|
|
VALUE_ID_REF
|
|
@@ -499,6 +500,7 @@ static void eclsyntaxerror(HqlGram * parser, const char * s, short yystate, int
|
|
|
|
|
|
DATAROW_FUNCTION
|
|
|
DATASET_FUNCTION
|
|
|
+ DICTIONARY_FUNCTION
|
|
|
VALUE_FUNCTION
|
|
|
ACTION_FUNCTION
|
|
|
PATTERN_FUNCTION
|
|
@@ -703,6 +705,7 @@ defineType
|
|
|
: typeDef
|
|
|
| setType
|
|
|
| explicitDatasetType
|
|
|
+ | explicitDictionaryType
|
|
|
| ROW {
|
|
|
IHqlExpression* record = queryNullRecord();
|
|
|
$$.setType(makeRowType(record->getType()));
|
|
@@ -759,6 +762,28 @@ explicitDatasetType1
|
|
|
}
|
|
|
;
|
|
|
|
|
|
+explicitDictionaryType
|
|
|
+ : DICTIONARY
|
|
|
+ {
|
|
|
+ $$.setType(makeDictionaryType(makeRowType(queryNullRecord()->getType())));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ | DICTIONARY '(' recordDef ')'
|
|
|
+ {
|
|
|
+ OwnedHqlExpr record = $3.getExpr();
|
|
|
+ ITypeInfo * recordType = createRecordType(record);
|
|
|
+ $$.setType(makeDictionaryType(makeRowType(recordType)));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ | _LINKCOUNTED_ explicitDictionaryType
|
|
|
+ {
|
|
|
+ Owned<ITypeInfo> dsType = $2.getType();
|
|
|
+ $$.setType(setLinkCountedAttr(dsType, true));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ ;
|
|
|
+
|
|
|
+
|
|
|
transformType
|
|
|
: TRANSFORM '(' recordDef ')'
|
|
|
{
|
|
@@ -819,11 +844,17 @@ paramType
|
|
|
parser->setTemplateAttribute();
|
|
|
}
|
|
|
| explicitDatasetType
|
|
|
+ | explicitDictionaryType
|
|
|
| ROW {
|
|
|
IHqlExpression* record = queryNullRecord();
|
|
|
$$.setType(makeRowType(record->getType()));
|
|
|
$$.setPosition($1);
|
|
|
}
|
|
|
+ | _LINKCOUNTED_ ROW {
|
|
|
+ IHqlExpression* record = queryNullRecord();
|
|
|
+ $$.setType(setLinkCountedAttr(makeRowType(record->getType()), true));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
| abstractModule
|
|
|
{
|
|
|
OwnedHqlExpr scope = $1.getExpr();
|
|
@@ -862,6 +893,7 @@ object
|
|
|
|
|
|
goodObject
|
|
|
: dataSet
|
|
|
+ | dictionary
|
|
|
| expression
|
|
|
{
|
|
|
//Remove later to allow sortlist attributes
|
|
@@ -1172,6 +1204,7 @@ knownOrUnknownId
|
|
|
knownId
|
|
|
: DATAROW_ID
|
|
|
| DATASET_ID
|
|
|
+ | DICTIONARY_ID
|
|
|
| VALUE_ID
|
|
|
| ACTION_ID
|
|
|
| RECORD_ID
|
|
@@ -1187,6 +1220,7 @@ knownId
|
|
|
knownFunction1
|
|
|
: DATAROW_FUNCTION
|
|
|
| DATASET_FUNCTION
|
|
|
+ | DICTIONARY_FUNCTION
|
|
|
| VALUE_FUNCTION
|
|
|
| ACTION_FUNCTION
|
|
|
| PATTERN_FUNCTION
|
|
@@ -1890,6 +1924,11 @@ transformation1
|
|
|
parser->addAssignment($1, $3);
|
|
|
$$.clear($1);
|
|
|
}
|
|
|
+ | transformDst ASSIGN dictionary
|
|
|
+ {
|
|
|
+ parser->addAssignment($1, $3);
|
|
|
+ $$.clear($1);
|
|
|
+ }
|
|
|
| transformDst ASSIGN error ';'
|
|
|
{
|
|
|
$1.release();
|
|
@@ -1966,6 +2005,12 @@ transformDstSelect
|
|
|
parser->setDotScope(scope);
|
|
|
$$.setExpr(scope.getClear(), $1);
|
|
|
}
|
|
|
+ | DICTIONARY_ID
|
|
|
+ {
|
|
|
+ OwnedHqlExpr scope = $1.getExpr();
|
|
|
+ parser->setDotScope(scope);
|
|
|
+ $$.setExpr(scope.getClear(), $1);
|
|
|
+ }
|
|
|
;
|
|
|
|
|
|
transformDstField
|
|
@@ -2925,12 +2970,6 @@ indexFlag
|
|
|
$$.setExpr(createAttribute(fixedAtom));
|
|
|
$$.setPosition($1);
|
|
|
}
|
|
|
- | PAYLOAD '(' expression ')'
|
|
|
- {
|
|
|
- parser->normalizeExpression($3); //$3 indicates the first payload field
|
|
|
- $$.setExpr(createExprAttribute(payloadAtom, $3.getExpr()));
|
|
|
- $$.setPosition($1);
|
|
|
- }
|
|
|
| COMPRESSED '(' compressMode ')'
|
|
|
{
|
|
|
$$.setExpr(createExprAttribute(compressedAtom, $3.getExpr()));
|
|
@@ -3698,6 +3737,7 @@ funcRetType
|
|
|
| propType
|
|
|
| setType
|
|
|
| explicitDatasetType
|
|
|
+ | explicitDictionaryType
|
|
|
| transformType
|
|
|
// A plain record would be better, but that then causes a s/r error in knownOrUnknownId because scope
|
|
|
| ROW '(' recordDef ')'
|
|
@@ -3721,35 +3761,75 @@ funcRetType
|
|
|
}
|
|
|
;
|
|
|
|
|
|
+payloadPart
|
|
|
+ : {
|
|
|
+ // NOTE - this reduction happens as soon as the GOESTO is seen,
|
|
|
+ // so it ensures that the following fields go into the payload record def
|
|
|
+ $$.setExpr(parser->endRecordDef());
|
|
|
+ parser->beginRecord();
|
|
|
+ }
|
|
|
+ GOESTO fieldDefs optSemiComma
|
|
|
+ ;
|
|
|
|
|
|
recordDef
|
|
|
: startrecord fieldDefs optSemiComma endrecord
|
|
|
{
|
|
|
OwnedHqlExpr record = $4.getExpr();
|
|
|
parser->checkRecordIsValid($1, record);
|
|
|
- $$.setExpr(record.getClear());
|
|
|
- $$.setPosition($1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
}
|
|
|
+
|
|
|
+ | startrecord fieldDefs payloadPart endrecord
|
|
|
+ {
|
|
|
+ OwnedHqlExpr record = $3.getExpr();
|
|
|
+ OwnedHqlExpr payload = $4.getExpr();
|
|
|
+ parser->mergeDictionaryPayload(record, payload, $1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
+ }
|
|
|
+
|
|
|
| startrecord recordOptions fieldDefs optSemiComma endrecord
|
|
|
{
|
|
|
OwnedHqlExpr record = $5.getExpr();
|
|
|
parser->checkRecordIsValid($1, record);
|
|
|
- $$.setExpr(record.getClear());
|
|
|
- $$.setPosition($1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
}
|
|
|
+
|
|
|
+ | startrecord recordOptions fieldDefs payloadPart endrecord
|
|
|
+ {
|
|
|
+ OwnedHqlExpr record = $4.getExpr();
|
|
|
+ OwnedHqlExpr payload = $5.getExpr();
|
|
|
+ parser->mergeDictionaryPayload(record, payload, $1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
+ }
|
|
|
+
|
|
|
| startrecord recordBase optFieldDefs endrecord
|
|
|
{
|
|
|
OwnedHqlExpr record = $4.getExpr();
|
|
|
parser->checkRecordIsValid($1, record);
|
|
|
- $$.setExpr(record.getClear());
|
|
|
- $$.setPosition($1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
}
|
|
|
+
|
|
|
+ | startrecord recordBase optFieldDefs payloadPart endrecord
|
|
|
+ {
|
|
|
+ OwnedHqlExpr record = $4.getExpr();
|
|
|
+ OwnedHqlExpr payload = $5.getExpr();
|
|
|
+ parser->mergeDictionaryPayload(record, payload, $1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
+ }
|
|
|
+
|
|
|
| startrecord recordBase recordOptions optFieldDefs endrecord
|
|
|
{
|
|
|
OwnedHqlExpr record = $5.getExpr();
|
|
|
parser->checkRecordIsValid($1, record);
|
|
|
- $$.setExpr(record.getClear());
|
|
|
- $$.setPosition($1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
+ }
|
|
|
+
|
|
|
+ | startrecord recordBase recordOptions optFieldDefs payloadPart endrecord
|
|
|
+ {
|
|
|
+ OwnedHqlExpr record = $5.getExpr();
|
|
|
+ OwnedHqlExpr payload = $6.getExpr();
|
|
|
+ parser->mergeDictionaryPayload(record, payload, $1);
|
|
|
+ $$.setExpr(record.getClear(), $1);
|
|
|
}
|
|
|
| simpleRecord
|
|
|
| recordDef AND recordDef
|
|
@@ -3972,11 +4052,7 @@ recordOption
|
|
|
endrecord
|
|
|
: endOfRecordMarker
|
|
|
{
|
|
|
- IHqlExpression * record = parser->popRecord();
|
|
|
- record->Link(); // link should be in startrecord, but can only link after closeExpr()
|
|
|
- parser->popSelfScope();
|
|
|
- OwnedHqlExpr newRecord = record->closeExpr();
|
|
|
- $$.setExpr(newRecord.getClear());
|
|
|
+ $$.setExpr(parser->endRecordDef());
|
|
|
parser->popLocale();
|
|
|
$$.setPosition($1);
|
|
|
}
|
|
@@ -4168,6 +4244,32 @@ fieldDef
|
|
|
parser->addDatasetField($1, $1.getName(), LINK(value->queryRecord()), value, $2.getExpr());
|
|
|
$$.clear();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ | DICTIONARY '(' recordDef ')' knownOrUnknownId optFieldAttrs
|
|
|
+ {
|
|
|
+ $$.clear($1);
|
|
|
+ parser->addDictionaryField($5, $5.getName(), $3.getExpr(), NULL, $6.getExpr());
|
|
|
+ }
|
|
|
+ | DICTIONARY '(' recordDef ')' knownOrUnknownId optFieldAttrs ASSIGN dictionary
|
|
|
+ {
|
|
|
+ $$.clear($1);
|
|
|
+ parser->addDictionaryField($5, $5.getName(), $3.getExpr(), $8.getExpr(), $6.getExpr());
|
|
|
+ }
|
|
|
+ | DICTIONARY knownOrUnknownId optFieldAttrs ASSIGN dictionary
|
|
|
+ {
|
|
|
+ $$.clear($1);
|
|
|
+ IHqlExpression * value = $5.getExpr();
|
|
|
+ parser->addDictionaryField($2, $2.getName(), LINK(value->queryRecord()), value, $3.getExpr());
|
|
|
+ }
|
|
|
+ | UNKNOWN_ID optFieldAttrs ASSIGN dictionary
|
|
|
+ {
|
|
|
+ IHqlExpression * value = $4.getExpr();
|
|
|
+ parser->addDictionaryField($1, $1.getName(), LINK(value->queryRecord()), value, $2.getExpr());
|
|
|
+ $$.clear();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
| alienTypeInstance knownOrUnknownId optFieldAttrs defaultValue
|
|
|
{
|
|
|
$$.clear($1);
|
|
@@ -4938,6 +5040,48 @@ compareExpr
|
|
|
$$.setExpr(parser->createINExpression(no_in, expr, set, $3));
|
|
|
$$.setPosition($2);
|
|
|
}
|
|
|
+ | expr NOT TOK_IN dictionary
|
|
|
+ {
|
|
|
+ parser->normalizeExpression($1);
|
|
|
+ parser->normalizeExpression($4);
|
|
|
+ parser->normalizeExpression($4, type_dictionary, false);
|
|
|
+ IHqlExpression *dict = $4.getExpr();
|
|
|
+ OwnedHqlExpr row = createValue(no_rowvalue, makeNullType(), $1.getExpr());
|
|
|
+ OwnedHqlExpr indict = createINDictExpr(parser->errorHandler, $4.pos, row, dict);
|
|
|
+ $$.setExpr(getInverse(indict));
|
|
|
+ $$.setPosition($3);
|
|
|
+ }
|
|
|
+ | dataRow NOT TOK_IN dictionary
|
|
|
+ {
|
|
|
+ parser->normalizeExpression($1);
|
|
|
+ parser->normalizeExpression($4);
|
|
|
+ parser->normalizeExpression($4, type_dictionary, false);
|
|
|
+ IHqlExpression *dict = $4.getExpr();
|
|
|
+ IHqlExpression *row = $1.getExpr();
|
|
|
+ OwnedHqlExpr indict = createINDictRow(parser->errorHandler, $4.pos, row, dict);
|
|
|
+ $$.setExpr(getInverse(indict));
|
|
|
+ $$.setPosition($3);
|
|
|
+ }
|
|
|
+ | expr TOK_IN dictionary
|
|
|
+ {
|
|
|
+ parser->normalizeExpression($1);
|
|
|
+ parser->normalizeExpression($3);
|
|
|
+ parser->normalizeExpression($3, type_dictionary, false);
|
|
|
+ IHqlExpression *dict = $3.getExpr();
|
|
|
+ OwnedHqlExpr row = createValue(no_rowvalue, makeNullType(), $1.getExpr());
|
|
|
+ $$.setExpr(createINDictExpr(parser->errorHandler, $3.pos, row, dict));
|
|
|
+ $$.setPosition($2);
|
|
|
+ }
|
|
|
+ | dataRow TOK_IN dictionary
|
|
|
+ {
|
|
|
+ parser->normalizeExpression($1);
|
|
|
+ parser->normalizeExpression($3);
|
|
|
+ parser->normalizeExpression($3, type_dictionary, false);
|
|
|
+ IHqlExpression *dict = $3.getExpr();
|
|
|
+ IHqlExpression *row = $1.getExpr();
|
|
|
+ $$.setExpr(createINDictRow(parser->errorHandler, $3.pos, row, dict));
|
|
|
+ $$.setPosition($2);
|
|
|
+ }
|
|
|
| dataSet EQ dataSet
|
|
|
{
|
|
|
parser->checkSameType($1, $3); $$.setExpr(createBoolExpr(no_eq, $1.getExpr(), $3.getExpr()));
|
|
@@ -5263,6 +5407,10 @@ primexpr1
|
|
|
//or a no_param, in which case it doesn't matter what we return
|
|
|
$$.setExpr(getSizetConstant(list->numChildren()), $1);
|
|
|
}
|
|
|
+ | COUNT '(' dictionary ')'
|
|
|
+ {
|
|
|
+ $$.setExpr(createValue(no_countdict, LINK(parser->defaultIntegralType), $3.getExpr()));
|
|
|
+ }
|
|
|
| CHOOSE '(' expression ',' chooseList ')'
|
|
|
{
|
|
|
parser->normalizeExpression($3, type_int, false);
|
|
@@ -6637,6 +6785,13 @@ dataRow
|
|
|
parser->normalizeExpression($3, type_int, false);
|
|
|
$$.setExpr(createRow(no_selectnth, $1.getExpr(), $3.getExpr()));
|
|
|
}
|
|
|
+ | dictionary '[' expressionList ']'
|
|
|
+ {
|
|
|
+ HqlExprArray args;
|
|
|
+ $3.unwindCommaList(args);
|
|
|
+ OwnedHqlExpr row = createValue(no_rowvalue, makeNullType(), args);
|
|
|
+ $$.setExpr(createSelectMapRow(parser->errorHandler, $3.pos, $1.getExpr(), row.getClear()));
|
|
|
+ }
|
|
|
| dataSet '[' NOBOUNDCHECK expression ']'
|
|
|
{
|
|
|
parser->normalizeExpression($4, type_int, false);
|
|
@@ -6912,6 +7067,115 @@ simpleDataRow
|
|
|
}
|
|
|
;
|
|
|
|
|
|
+dictionary
|
|
|
+ : simpleDictionary
|
|
|
+ | dictionary '+' dictionary
|
|
|
+ { parser->createAppendDictionaries($$, $1, $3, NULL); }
|
|
|
+ ;
|
|
|
+
|
|
|
+simpleDictionary
|
|
|
+ : scopedDictionaryId
|
|
|
+ | NOFOLD '(' dictionary ')'
|
|
|
+ {
|
|
|
+ $$.setExpr(createDictionary(no_nofold, $3.getExpr(), NULL));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ | NOHOIST '(' dictionary ')'
|
|
|
+ {
|
|
|
+ $$.setExpr(createDictionary(no_nohoist, $3.getExpr(), NULL));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+
|
|
|
+ | DICTIONARY '(' startTopFilter ',' recordDef ')' endTopFilter
|
|
|
+ {
|
|
|
+ OwnedHqlExpr dataset = $3.getExpr();
|
|
|
+ parser->checkOutputRecord($5, false);
|
|
|
+ OwnedHqlExpr record = $5.getExpr();
|
|
|
+ HqlExprArray args;
|
|
|
+ args.append(*LINK(dataset));
|
|
|
+ args.append(*LINK(record));
|
|
|
+ $$.setExpr(createDictionary(no_userdictionary, args));
|
|
|
+ parser->checkProjectedFields($$.queryExpr(), $5);
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+
|
|
|
+ | DICTIONARY '(' '[' ']' ',' recordDef ')'
|
|
|
+ {
|
|
|
+ HqlExprArray values; // Empty list
|
|
|
+ OwnedHqlExpr table = createDataset(no_temptable, createValue(no_recordlist, NULL, values), $6.getExpr());
|
|
|
+ $$.setExpr(convertTempTableToInlineDictionary(parser->errorHandler, $4.pos, table));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ | DICTIONARY '(' '[' beginList inlineDatasetValueList ']' ',' recordDef ')'
|
|
|
+ {
|
|
|
+ HqlExprArray values;
|
|
|
+ parser->endList(values);
|
|
|
+ OwnedHqlExpr table = createDataset(no_temptable, createValue(no_recordlist, NULL, values), $8.getExpr());
|
|
|
+ $$.setExpr(convertTempTableToInlineDictionary(parser->errorHandler, $5.pos, table));
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ | '(' dictionary ')' {
|
|
|
+ $$.setExpr($2.getExpr());
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ | IF '(' booleanExpr ',' dictionary ',' dictionary ')'
|
|
|
+ {
|
|
|
+ OwnedHqlExpr ds = parser->processIfProduction($3, $5, &$7);
|
|
|
+ $$.setExpr(ds.getClear(), $1);
|
|
|
+ }
|
|
|
+ | IF '(' booleanExpr ',' dictionary ')'
|
|
|
+ {
|
|
|
+ OwnedHqlExpr ds = parser->processIfProduction($3, $5, NULL);
|
|
|
+ $$.setExpr(ds.getClear(), $1);
|
|
|
+ }
|
|
|
+ | IFF '(' booleanExpr ',' dictionary ',' dictionary ')'
|
|
|
+ {
|
|
|
+ OwnedHqlExpr ds = parser->processIfProduction($3, $5, &$7);
|
|
|
+ $$.setExpr(ds.getClear(), $1);
|
|
|
+ }
|
|
|
+ | IFF '(' booleanExpr ',' dictionary ')'
|
|
|
+ {
|
|
|
+ OwnedHqlExpr ds = parser->processIfProduction($3, $5, NULL);
|
|
|
+ $$.setExpr(ds.getClear(), $1);
|
|
|
+ }
|
|
|
+// MORE - should do CASE and MAP
|
|
|
+ ;
|
|
|
+
|
|
|
+scopedDictionaryId
|
|
|
+ : globalScopedDictionaryId
|
|
|
+ | dotScope DICTIONARY_ID leaveScope
|
|
|
+ {
|
|
|
+ IHqlExpression *e1 = $1.getExpr();
|
|
|
+ IHqlExpression *e2 = $2.getExpr();
|
|
|
+ if (e1 && (e1->getOperator() != no_record) && (e2->getOperator() == no_field))
|
|
|
+ $$.setExpr(parser->createSelect(e1, e2, $2));
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ::Release(e1);
|
|
|
+ $$.setExpr(e2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+/*
|
|
|
+ | dictionaryFunction '('
|
|
|
+ {
|
|
|
+ parser->beginFunctionCall($1);
|
|
|
+ }
|
|
|
+ actualParameters ')'
|
|
|
+ {
|
|
|
+ $$.setExpr(parser->bindParameters($1, $4.getExpr()));
|
|
|
+ }
|
|
|
+*/
|
|
|
+ ;
|
|
|
+
|
|
|
+globalScopedDictionaryId
|
|
|
+ : DICTIONARY_ID
|
|
|
+ | moduleScopeDot DICTIONARY_ID leaveScope
|
|
|
+ {
|
|
|
+ OwnedHqlExpr scope = $1.getExpr();
|
|
|
+ $$.setExpr($2.getExpr());
|
|
|
+ }
|
|
|
+ ;
|
|
|
+
|
|
|
dataSet
|
|
|
: simpleDataSet
|
|
|
| startCompoundExpression beginInlineFunctionToken optDefinitions RETURN dataSet ';' endInlineFunctionToken
|
|
@@ -7859,7 +8123,6 @@ simpleDataSet
|
|
|
parser->extractRecordFromExtra(record, extra);
|
|
|
OwnedHqlExpr transform = parser->extractTransformFromExtra(extra);
|
|
|
|
|
|
- parser->applyPayloadAttribute($6, record, extra);
|
|
|
parser->inheritRecordMaxLength(dataset, record);
|
|
|
|
|
|
record.setown(parser->checkIndexRecord(record, $5));
|
|
@@ -7886,8 +8149,6 @@ simpleDataSet
|
|
|
OwnedHqlExpr record = $3.getExpr();
|
|
|
OwnedHqlExpr extra = $4.getExpr();
|
|
|
parser->extractRecordFromExtra(record, extra);
|
|
|
- parser->applyPayloadAttribute($6, record, extra);
|
|
|
-
|
|
|
$$.setExpr(parser->createIndexFromRecord(record, extra, $3));
|
|
|
parser->checkIndexRecordTypes($$.queryExpr(), $1);
|
|
|
$$.setPosition($1);
|
|
@@ -9437,17 +9698,31 @@ inlineFieldValue
|
|
|
}
|
|
|
;
|
|
|
|
|
|
+inlineFieldValueGoesTo
|
|
|
+ : GOESTO {
|
|
|
+ parser->addListElement(createAttribute(_payload_Atom));
|
|
|
+ $$.clear();
|
|
|
+ $$.setPosition($1);
|
|
|
+ }
|
|
|
+ ;
|
|
|
+
|
|
|
inlineFieldValues
|
|
|
: inlineFieldValue
|
|
|
| inlineFieldValues ';' inlineFieldValue
|
|
|
| inlineFieldValues ',' inlineFieldValue
|
|
|
;
|
|
|
|
|
|
+inlineFieldValuesWithGoesto
|
|
|
+ : inlineFieldValues optSemiComma
|
|
|
+ | inlineFieldValues inlineFieldValueGoesTo inlineFieldValues optSemiComma
|
|
|
+ ;
|
|
|
+
|
|
|
inlineDatasetValue
|
|
|
- : '{' beginList inlineFieldValues optSemiComma '}'
|
|
|
+ : '{' beginList inlineFieldValuesWithGoesto '}'
|
|
|
{
|
|
|
HqlExprArray args;
|
|
|
parser->endList(args);
|
|
|
+ setPayloadAttribute(args);
|
|
|
// args.append(*createLocationAttr($1)); // improves the error reporting, but slows it down, and changes the expression crcs
|
|
|
$$.setExpr(createValue(no_rowvalue, makeNullType(), args));
|
|
|
}
|
|
@@ -10231,6 +10506,7 @@ actualValue
|
|
|
$$.setExpr(parser->bindFieldMap(expr,map));
|
|
|
}
|
|
|
| dataRow
|
|
|
+ | dictionary
|
|
|
| TOK_PATTERN pattern
|
|
|
{ $$.setExpr($2.getExpr()); }
|
|
|
| TOKEN pattern { $$.setExpr($2.getExpr()); }
|