Requête EJB : syntaxe BNF
BNF (Backus-Naur Form) est une des notations les plus couramment utilisées pour la définition de la syntaxe des langages de programmation ou des ensembles de commandes. Cet article liste la syntaxe pour le langage de requête EJB (Enterprise JavaBeans).
EJB QL ::= [select_clause] from_clause [where_clause] [order_by_clause]
EJB QL DYNAMIQUE := expression_requête [clause_order_by]
expression_requête := terme_requête [UNION [ALL] terme_requête]*
terme_requête := {choisir_dynamique_clause clause_from [clause_where]
[groupe_par_clause] [avoir_clause] } | (expression_requête) } [clause_order_by]
clause_from ::=FROM déclaration_variable_identification
[, {déclaration_variable_identification | déclaration_membre_collection } ]*
déclaration_variable_identification ::=déclaration_membre_collection |
déclaration_variable_intervalle [join]*
join := [ { LEFT [OUTER] | INNER }] JOIN {expression_chemin_valorisé_collection | expression_chemin_valorisé_seul} [AS] identificateur
déclaration_membre_collection ::=
IN ( expression_chemin_valorisé_collection ) [AS] identificateur
déclaration_variable_échelle
::=nom_schéma_abstrait [AS] identificateur
expression_chemin_valeur_unique ::=
{navigation_valeur_unique | variable_identification}. ( zone_cmp |
méthod | zone_cmp.valeur_attribut_objet | zone_cmp.valeur_méthode_objet )
| navigation_valeur_unique
navigation_valeur_unique ::=
variable_identification.[ zone_cmr_valeur_unique. ]*
zone_cmr_valeur_unique
expression_chemin_valorisé_collection ::=
variable_identification.[ zone_cmr_valeur_unique. ]*
zone_cmr_valorisée_collection
clause_select ::= SELECT { ALL | DISTINCT } {expression_chemin_valeur_unique |
variable_identification | OBJECT ( variable_identification) |
fonctions_agrégation }
select_clause_dynamic ::= SELECT { ALL | DISTINCT } [ selection , ]* selection
sélection ::= { expression | sous-requête } [[AS] id ]
clause_order_by ::= ORDER BY [ {expression_chemin_valeur_unique | entier} [ASC|DESC],]*
{expression_chemin_valeur_unique | entier}[ASC|DESC]
clause_where ::= WHERE expression_conditionnelle
expression_conditionnelle ::= terme_conditionnel |
expression_conditionnelle OR terme_conditionnel
terme_conditionnel ::=
facteur_conditionnel |
terme_conditionnel AND facteur_conditionnel
facteur_conditionnel ::= [NOT] primaire_conditionnel
primaire_conditionnel ::=expression_cond_simple | (expression_conditionnelle)
expression_cond_simple ::= expression_comparaison | expression_between |
expression_like | expression_in | expression_comparaison_null |
expression_comparaison_collection_vide | expression_quantifiée |
expression_exists | expression_is_of_type | expression_membre_collection
expression_between ::=
expression [NOT] expression BETWEEN expression AND
expression_in ::= expression_chemin_valeur_unique [NOT] IN
{ (sous-requête) | ( atome ,]* atome) }
atome = { littéral_chaîne | constante_numérique |
paramètre_entrée }
expression_like ::= expression [NOT] LIKE
{littéral_chaîne | paramètre_entrée}
[ESCAPE {littéral_chaîne | paramètre_entrée}]
expression_comparaison_null ::=
expression_chemin_valeur_unique IS [ NOT ] NULL
expression_comparaison_collection_vide ::=
expression-chemin-valorisé-collection IS [NOT] EMPTY
expression_membre_collection ::=
{ expression-chemin-valeur-unique | paramètre_entrée } [ NOT ] MEMBER [ OF ]
expression-chemin-valorisé-collection
expression_quantifiée ::=
expression opérateur_comparaison {SOME | ANY | ALL} (sous-requête)
expression_exists ::= EXISTS {expression-chemin-valorisé-collection | (sous-requête)}
sous-requête ::= SELECT [{ ALL | DISTINCT }] expression clause_from [clause_where]
[clause_group_by] [clause_having]
clause_group_by ::= GROUP BY [expression_chemin_valeur_unique,]*
expression_chemin_valeur_unique
clause_having ::= HAVING expression_conditionnelle
expression_is_of_type ::= identificateur IS OF TYPE
([[ONLY] nom_schéma_abstrait,]* [ONLY] nom_schéma_abstrait)
expression_comparaison ::= expression comparison_operator { expression | ( subquery ) }
opérateur_comparaison ::= = | > | >= | < | <= | <>
méthode ::= nom_méthode( [[expression ,
]* expression ] )
expression ::= terme | expression {+|-} terme
terme ::= facteur | terme {*|/} facteur
facteur ::= {+|-} primaire
primaire ::= expression_chemin_valeur_unique | littéral |
( expression ) | paramètre_entrée | fonctions | fonctions_agrégation
fonctions_agrégées :=
AVG([ALL|DISTINCT] expression) |
COUNT({[ALL|DISTINCT] expression | * | variable_identification }) |
MAX([ALL|DISTINCT] expression) |
MIN([ALL|DISTINCT] expression) |
SUM([ALL|DISTINCT] expression) |
fonctions ::=
ABS(expression) |
BIGINT(expression) |
CHAR({expression [,{ISO|USA|EUR|JIS}] ) |
CONCAT (expression , expression ) |
DATE(expression) |
DAY({expression ) |
DAYS( expression) |
DECIMAL( expression [,entier[,entier]])
DIGITS( expression) |
DOUBLE( expression ) |
FLOAT( expression) |
HOUR ( expression ) |
INTEGER( expression ) |
LCASE ( expression) |
LENGTH(expression) |
LOCATE( expression, expression [, expression] ) |
MICROSECOND( expression ) |
MINUTE ( expression ) |
MOD (expression, expression) |
MONTH( expression ) |
REAL( expression) |
SECOND( expression ) |
SMALLINT( expression ) |
SQRT ( expression) |
SUBSTRING( expression, expression[, expression]) |
TIME( expression ) |
TIMESTAMP( expression ) |
UCASE ( expression) |
YEAR( expression )
xrel := XREL variable_identification . { champ_cmr_valorisé_seul | champ_cmr_valorisé_collection }
[ , variable_identification . { champ_cmr_valorisé_seul | champ_cmr_valorisé_collection } ]*
Restrictions et limitations de requête EJB
Limitation EJB-QL concernant l'héritage CMP et l'utilisation des jointures de clause FROM
L'analyseur syntaxique EJB-QL n'a pas correctement généré SQL avec des requêtes correspondant aux critères cumulatifs suivants :
- La requête EJB-QL contient une jointure dans la clause FROM (par exemple, FROM Entity a, IN (a.b.c.d) dGroup).
- La requête EJB-QL contient un prédicat qui navigue dans un élément de chemin interne également associé à la jointure de clause FROM (par exemple, WHERE a.b.g.id = :?1).
- Une ou plusieurs des entités de chemin autres que des feuilles dans la jointure FROM utilisent l'héritage de type d'entité (par exemple, b extends b_super).
- L'entité prise en charge par l'élément de chemin commun dans le prédicat utilise aussi l'héritage de type d'entité (par exemple, g extends g_super).