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).
Le processeur de requête EJB émettra un avertissement WQRY1113E, ce qui peut indiquer que ce scénario a été détecté.

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rque_bnf
Nom du fichier : rque_bnf.html