Below is the HQL full sintax, based on the latest Hibernate version, and which is being implemented in NHibernate. However, some statements or expressions might be not yet valid for NHibernate.
<Query> | ::= | <SelectStatement> |
| | <DeleteStatement> | |
| | <UpdateStatement> | |
| | <InsertStatement> |
<DeleteStatement> | ::= | DELETE <AliasedEntityName> <WhereClause> |
| | DELETE FROM <AliasedEntityName> <WhereClause> |
<UpdateStatement> | ::= | UPDATE <AliasedEntityName> SET <AssignList> <WhereClause> |
| | UPDATE VERSIONED <AliasedEntityName> SET <AssignList> <WhereClause> | |
| | UPDATE FROM <AliasedEntityName> SET <AssignList> <WhereClause> | |
| | UPDATE VERSIONED FROM <AliasedEntityName> SET <AssignList> <WhereClause> |
<AssignList> | ::= | <EntityName> '=' <Expression> ',' <AssignList> |
| | <EntityName> '=' <Expression> |
<InsertStatement> | ::= | INSERT INTO <EntityName> '(' <EntityNameList> ')' <SelectStatement> |
<SelectStatement> | ::= | <SelectClause> <FromClause> |
| | <FromClause> |
<SelectClause> | ::= | SELECT <Restriction> <AliasedExpressionList> |
| | SELECT NEW <EntityName> '(' <ExpressionList> ')' |
<FromClause> | ::= | FROM <AliasedEntityNameList> <JoinClauseChain> <WhereClause> <GroupByClause> <HavingClause> <OrderByClause> |
<JoinClauseChain> | ::= | <JoinClause> <JoinClauseChain> |
| | <JoinClause> ',' <AliasedEntityNameList> <JoinClauseChain> | |
| |
<JoinClause> | ::= | <JoinDefinition> <WithClause> |
<JoinDefinition> | ::= | LEFT JOIN <AliasedEntityName> |
| | RIGHT JOIN <AliasedEntityName> | |
| | LEFT OUTER JOIN <AliasedEntityName> | |
| | RIGHT OUTER JOIN <AliasedEntityName> | |
| | FULL JOIN <AliasedEntityName> | |
| | INNER JOIN <AliasedEntityName> | |
| | LEFT JOIN FETCH <AliasedEntityName> | |
| | LEFT OUTER JOIN FETCH <AliasedEntityName> | |
| | INNER JOIN FETCH <AliasedEntityName> | |
| | JOIN <AliasedEntityName> | |
| | JOIN FETCH <AliasedEntityName> |
<WithClause> | ::= | WITH <Expression> |
| |
<WhereClause> | ::= | WHERE <Expression> |
| |
<GroupByClause> | ::= | 'GROUP BY' <ExpressionList> |
| |
<HavingClause> | ::= | HAVING <Expression> |
| |
<OrderByClause> | ::= | 'ORDER BY' <OrderList> |
| |
<OrderList> | ::= | <OrderItem> ',' <OrderList> |
| | <OrderItem> |
<OrderItem> | ::= | <Expression> <OrderType> |
<OrderType> | ::= | ASC |
| | DESC | |
| | ASCENDING | |
| | DESCENDING | |
| |
<Restriction> | ::= | ALL |
| | DISTINCT | |
| |
<AggregateExpression> | ::= | COUNT '(' '*' ')' |
| | COUNT '(' <Restriction> <EntityName> ')' | |
| | COUNT '(' <Restriction> <CollectionExpression> ')' | |
| | AVG '(' <MathAddExpression> ')' | |
| | MIN '(' <MathAddExpression> ')' | |
| | MAX '(' <MathAddExpression> ')' |
<FunctionExpression> | ::= | Identifier '(' ')' |
| | Identifier '(' <ExpressionList> ')' | |
| | CAST '(' <Expression> AS Identifier ')' | |
| | <TrimFunctionExpression> | |
| | <ExtractFunctionExpression> | |
| | YEAR '(' <Expression> ')' | |
| | MONTH '(' <Expression> ')' | |
| | DAY '(' <Expression> ')' | |
| | HOUR '(' <Expression> ')' | |
| | MINUTE '(' <Expression> ')' | |
| | SECOND '(' <Expression> ')' |
<TrimFunctionExpression> | ::= | TRIM '(' <StringValueExpression> ')' |
| | TRIM '(' <TrimOperands> <StringValueExpression> ')' |
<TrimOperands> | ::= | <StringValueExpression> FROM |
| | <TrimSpecification> <StringValueExpression> FROM | |
| | <TrimSpecification> FROM | |
| | FROM |
<TrimSpecification> | ::= | LEADING |
| | TRAILING | |
| | BOTH |
<ExtractFunctionExpression> | ::= | EXTRACT '(' <ExtractField> FROM <Expression> ')' |
<ExtractField> | ::= | YEAR |
| | MONTH | |
| | DAY | |
| | HOUR | |
| | MINUTE | |
| | SECOND | |
| | 'TIMEZONE_HOUR' | |
| | 'TIMEZONE_MINUTE' |
<CollectionExpression> | ::= | <ElementsExpression> |
| | INDICES '(' Path ')' |
<ElementsExpression> | ::= | ELEMENTS '(' Path ')' |
<EntityName> | ::= | Identifier |
| | Path |
<EntityNameList> | ::= | <EntityName> ',' <EntityNameList> |
| | <EntityName> |
<AliasedEntityName> | ::= | <EntityName> Identifier |
| | <EntityName> AS Identifier | |
| | Identifier IN CLASS <EntityName> | |
| | Identifier IN <ElementsExpression> | |
| | <EntityName> |
<AliasedEntityNameList> | ::= | <AliasedEntityName> ',' <AliasedEntityNameList> |
| | <AliasedEntityName> |
<AliasedExpression> | ::= | <Expression> AS Identifier |
| | <Expression> |
<AliasedExpressionList> | ::= | <AliasedExpression> ',' <AliasedExpressionList> |
| | <AliasedExpression> |
<Expression> | ::= | <OrExpression> |
| | <AndExpression> |
<OrExpression> | ::= | <AndExpression> OR <Expression> |
<AndExpression> | ::= | <NotExpression> AND <AndExpression> |
| | <NotExpression> |
<NotExpression> | ::= | NOT <PredicateExpression> |
| | <PredicateExpression> |
<QuantifiedExpression> | ::= | SOME Path |
| | ALL Path | |
| | ANY Path | |
| | SOME <CollectionExpression> | |
| | ALL <CollectionExpression> | |
| | ANY <CollectionExpression> | |
| | SOME '(' <SelectStatement> ')' | |
| | ALL '(' <SelectStatement> ')' | |
| | ANY '(' <SelectStatement> ')' |
<LikeEscape> | ::= | ESCAPE StringLiteral |
| |
<ExistsPredicate> | ::= | EXISTS Path |
| | EXISTS <CollectionExpression> | |
| | EXISTS '(' <SelectStatement> ')' |
<MemberPredicate> | ::= | Path MEMBER OF Path |
| | Path MEMBER Path |
<MathAddExpression> | ::= | <MathAddExpression> '+' <MathMultExpression> |
| | <MathAddExpression> '-' <MathMultExpression> | |
| | <MathMultExpression> |
<MathMultExpression> | ::= | <MathMultExpression> '*' <MathNegateExpression> |
| | <MathMultExpression> '/' <MathNegateExpression> | |
| | <MathNegateExpression> |
<MathNegateExpression> | ::= | '-' <Value> |
| | <Value> |
<CaseExpression> | ::= | <SimpleCaseExpression> |
| | <SearchedCaseExpression> |
<SimpleCaseExpression> | ::= | CASE <Value> <SimpleWhenClause> <ElseClause> END |
<SearchedCaseExpression> | ::= | CASE <SearchedWhenClause> <ElseClause> END |
<SimpleWhenClause> | ::= | WHEN <Value> THEN <CaseResult> |
| | WHEN <Value> THEN <CaseResult> <SimpleWhenClause> |
<SearchedWhenClause> | ::= | WHEN <Expression> THEN <CaseResult> |
| | WHEN <Expression> THEN <CaseResult> <SearchedWhenClause> |
<CaseResult> | ::= | <MathAddExpression> |
<ElseClause> | ::= | ELSE <CaseResult> |
| |
<IndexedExpression> | ::= | Path '[' <Expression> ']' '.' Path |
| | Path '[' <Expression> ']' '.' Identifier | |
| | Path '[' <Expression> ']' |
<StringValueExpression> | ::= | Identifier |
| | Path | |
| | StringLiteral | |
| | Parameter | |
| | <IndexedExpression> | |
| | <FunctionExpression> | |
| | <CaseExpression> |
<ConcatenationExpression> | ::= | <StringValueExpression> '||' <ConcatenationExpression> |
| | <StringValueExpression> |
<Value> | ::= | <ConcatenationExpression> |
| | IntegerLiteral | |
| | FloatLiteral | |
| | HexLiteral | |
| | NULL | |
| | BooleanLiteral | |
| | <Tuple> | |
| | <AggregateExpression> | |
| | <CollectionExpression> |
<Tuple> | ::= | '(' <SelectStatement> ')' |
| | '(' <ExpressionList> ')' |
<ExpressionList> | ::= | <Expression> ',' <ExpressionList> |
| | <Expression> |