Adding a prefix to Cross Reference field [message #629573] |
Tue, 28 September 2010 14:28  |
Eclipse User |
|
|
|
I have the following grammar. And then is the resulting language. In the section where it says filter is where I run into my problem. I need to prefix my cross referenced column with a word_. I can't seem to be able to do that without an error unless I leave a space in between. Is there anyway for me to do this? I can do it as a suffix with a . in between but not with the _.
grammar org.xtext.querydef.QueryDef with org.eclipse.xtext.common.Terminals
generate queryDef "http://www.xtext.org/querydef/QueryDef"
import "platform:/resource/org.xtext.DefTable/src-gen/org/xtext/example/deftable/DefTable.ecore" as deftable
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
NameSpaces:{NameSpaces}
(namespace+=NameSpace)*;
NameSpace:
'Namespace' name=ID "{"
(query+=Query)*
"}";
Query:
'Query' namespace=[NameSpace] ("." name=QualifiedName)"{"
(
("[" 'Description:' description=MYSTRING"]")
("[" 'Set join_collapse_limit=' limit=INT"]")?
("[" 'Query:'queryName=[Query|QualifiedName]"]")?
("[" 'Filter:' filter+=Filter(',' filter+=Filter)*"]")?
("[" 'Return:' return+=ReturnElement (',' return+=ReturnElement)* "]")?
("[" 'From:' from=[deftable::Table]
joinexpression+=JoinExpression*
"]")?
("[" 'Where:' where+=Where(("And"|"Or")where+=Where)* "]")?
("[" 'Order:' order+=OrderExpression(',' order+=OrderExpression)*"]")?
"}");
Filter: column=([deftable::Column|QualifiedTableReference])(multi?='*')?|(distance+=Distance) (multi?='*')?|('MIN_'|'MAX_'|'AVERAGE_'|'RANGE_')column3=([deftable::Column|QualifiedTableReference])(multi?='*')?;
ReturnElement: column=[deftable::Column|QualifiedTableReference]('As' asname=ID)?|(column2=[deftable::Column|QualifiedTableReference])'.'('MIN'|'MAX'|'AVERAGE'|'Range') ('As' asname=ID)?;
//JOINS
JoinExpression:InnerJoinExpression|OuterJoinExpression;
enum Distance: radiussearchdistance='RadiusSearchDistance'|radiussearchradius='RadiusSearchRadius'|RadiusSearchDistanceFromLatLon='RadiusSearchDistanceFromLatLon'|RadiusSearchLatLon='RadiusSearchLatLon'|RadiusSearchPostalCode='RadiusSearchPostalCode'|RadiusSearchDistanceFromPostalCode='RadiusSearchDistanceFromPostalCode';
InnerJoinExpression:
(optional?='Optional')? 'Inner' 'Join' jointablename+=[deftable::Table]
"On" equals+=ColumnRefEqualsExpression
("And" equals+=ColumnRefEqualsExpression)*
(("And"|"Or") equals+=JoinAndExpression)*;
OuterJoinExpression:
(optional?='Optional')? 'Left' 'Join' jointablename=[deftable::Table]
"On" equals+=ColumnRefEqualsExpression
(("And"|"Or") equals+=ColumnEqualsExpression)*
(("And"|"Or") equals+=JoinAndExpression)*;
ColumnEqualsExpression:ColumnRefEqualsExpression|ColumnStringEqualsExpression;
ColumnRefEqualsExpression: left=[deftable::Column|QualifiedTableReference] '='
right=[deftable::Column|QualifiedTableReference];
ColumnStringEqualsExpression: left=[deftable::Column|QualifiedTableReference] '='
right=STRING;
JoinAndExpression:
IntCompareExpression|NullExpression|NotNullExpression|StringEqualsExpression;
Where: column=[deftable::Column|QualifiedTableReference] (expression=WhereExpression);
OrderExpression: column= [deftable::Column|QualifiedTableReference](direction+=Direction)?;
//the first element is the default one used, when
//nothing is specified
enum Direction: ascending="asc"|descending="desc";
WhereExpression:
IntCompareExpression|NullExpression|NotNullExpression|StringEqualsExpression;
NullExpression: "is" "null"{NullExpression};
NotNullExpression: "is" "not" "null"{NotNullExpression};
IntCompareExpression: comparator=Comparator value=INT;
StringEqualsExpression: '=' value=STRING;
enum Comparator: equals = "="| greater=">"|less="<"|
lessequals="<="|greaterequals= ">=";
QualifiedName hidden():ID('.'ID)*;
QualifiedTableReference hidden():ID'.'ID;
MYSTRING hidden(): (ID|WS|INT|STRING|'not'|','|ANY_OTHER|'null'|'.'|'Join'|'Inner'|'On'|'='|'or'|'keyword'|'Range'|'MIN'|'MAX'|'AVERAGE')*;
Query UsedCar.DrillDown.ByPriceRange
{
[Description: Price Range DrillDown based on DatasetGroup]
[Filter: DatasetGroup.DatasetGroup*,VehicleBodyStyleGroup.VehicleBodyStyleGroupText, MAX_ VehicleUsed.VehicleUsedPriceRangeFloor,MIN_ VehicleUsed.VehicleUsedPriceRangeFloor]
[Return: VehicleUsedYMMCache.VehicleUsedPriceRangeFloor]
[From: DatasetGroup
Inner Join DatasetGroupYearMakeModel On DatasetGroup.DatasetGroupId=DatasetGroupYearMakeModel.DatasetGroupId
Inner Join VehicleUsedYMMCache On DatasetGroupYearMakeModel.VehicleYear=VehicleUsedYMMCache.VehicleYear And
DatasetGroupYearMakeModel.VehicleMakeId=VehicleUsedYMMCache.VehicleMakeId And
DatasetGroupYearMakeModel.VehicleModelId=VehicleUsedYMMCache.VehicleModelId
Optional Inner Join VehicleBodyStyleGroup On VehicleUsedYMMCache.VehicleBodyStyleGroupId=VehicleBodyStyleGroup.VehicleBodyStyleGroupId
]
}
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03864 seconds