Глава 11. Определения CRUD EBNF
Эта глава предоставляет визуальный справочник по
объектам и функциям, доступным в X DevAPI.
11.1. Объекты сессии и функции
Session
Синтаксис для этого объекта в EBNF:
Session
::= '.getSchema(' StringLiteral ')'
| '.getSchemas()'
| '.createSchema(' StringLiteral ')'
| '.dropSchema(' StringLiteral ')'
| '.getDefaultSchema()'
| '.startTransaction()'
| '.commit()'
| '.rollback()'
| '.setSavepoint()'
| '.setSavepoint(' StringLiteral ')'
| '.releaseSavePoint(' StringLiteral ')'
| '.rollbackTo(' StringLiteral ')'
| '.close()'
| SqlExecute
Рис. 11.1. Session
SqlExecute
Синтаксис для этой функции в EBNF:
SqlExecute
::= '.sql(' SqlStatementStr ')'
( '.bind(' Literal (',' Literal)* ')')*
( '.execute()' )?
Рис. 11.2. SqlExecute
SQLPlaceholderValues
Синтаксис для этой функции в EBNF:
SQLPlaceholderValues
::= '{' SQLPlaceholderName ':' ( SQLLiteral ) '}'
Рис. 11.3. SQLPlaceholderValues
SQLPlaceholderName
Синтаксис для этой функции в EBNF:
SQLPlaceholderName
::= '?'
Рис. 11.4. SQLPlaceholderName
SQLLiteral
Синтаксис для этой функции в EBNF:
SQLLiteral
::= '"' StringLiteral '"' | Number | Document
Рис. 11.5. SQLLiteral
11.2. Объекты схемы и функции
Schema
Синтаксис для этой функции в EBNF:
Schema
::= '.getName()'
| '.existsInDatabase()'
| '.getSession()'
| '.getCollection(' StringLiteral ')'
| '.getCollections()'
| '.getCollectionAsTable(' StringLiteral ')'
| '.dropCollection(' StringLiteral ')'
| '.getTable(' StringLiteral ')'
| '.getTables()'
| '.createCollection(' StringLiteral ')'
Рис. 11.6. Schema
Collection
Синтаксис для этой функции в EBNF:
Collection
::= '.getSchema()'
| '.getName()'
| '.getSession()'
| '.existsInDatabase()'
| '.replaceOne(' DocumentId ',' DocumentOrJSON ')'
| '.addOrReplaceOne(' DocumentId ',' DocumentOrJSON ')'
| '.getOne(' DocumentId ')'
| '.removeOne(' DocumentId ')'
| CollectionFindFunction
| CollectionModifyFunction
| CollectionAddFunction
| CollectionRemoveFunction
| CollectionCreateIndex
| CollectionDropIndex
Рис. 11.7. Collection
Table
Синтаксис для этой функции в EBNF:
Table
::= '.getSchema()'
| '.getName()'
| '.getSession()'
| '.existsInDatabase()'
| '.isView()'
| TableSelectFunction
| TableUpdateFunction
| TableInsertFunction
| TableDeleteFunction
Рис. 11.8. Table
11.3. Функции CRUD для коллекций
CollectionFindFunction
Синтаксис для этой функции в EBNF:
CollectionFindFunction
::= '.find(' SearchConditionStr? ')' ( '.fields(' ProjectedDocumentExprStr ')' )?
( '.groupBy(' SearchExprStrList ')' )? ( '.having(' SearchConditionStr ')' )?
( '.sort(' SortExprStrList ')' )? ( '.limit(' NumberOfRows ')' ( '.offset(' NumberOfRows ')' )? )?
( '.lockExclusive(' LockContention ')' | '.lockShared(' LockContention ')' )?
( '.bind(' PlaceholderValues ')' )*
( '.execute()' )?
Рис. 11.9. CollectionFindFunction
CollectionModifyFunction
Синтаксис для этой функции в EBNF:
CollectionModifyFunction
::= '.modify(' SearchConditionStr ')'
( '.set(' CollectionField ',' ExprOrLiteral ')' |
'.unset(' CollectionFields ')' |
'.arrayInsert(' CollectionField ',' ExprOrLiteral ')' |
'.arrayAppend(' CollectionField ',' ExprOrLiteral ')' |
'.arrayDelete(' CollectionField ')' |
'.patch(' DocumentOrJSON ')'
)+
( '.sort(' SortExprStrList ')' )? ( '.limit(' NumberOfRows ')' )?
( '.bind(' PlaceholderValues ')' )*
( '.execute()' )?
Рис. 11.10. CollectionModifyFunction
CollectionAddFunction
Синтаксис для этой функции в EBNF:
CollectionAddFunction
::= ( '.add(' ( DocumentOrJSON | '[' DocumentOrJSON ( ',' DocumentOrJSON )* ']' )? ')' )+
( '.execute()' )?
Рис. 11.11. CollectionAddFunction
CollectionRemoveFunction
Синтаксис для этой функции в EBNF:
CollectionRemoveFunction
::= '.remove(' SearchConditionStr ')'
( '.sort(' SortExprStrList ')' )? ( '.limit(' NumberOfRows ')' )?
( '.bind(' PlaceholderValues ')' )*
( '.execute()' )?
Рис. 11.12. CollectionRemoveFunction
11.4. Функции управления индексом коллекции
Collection.createIndex() Function
Синтаксис для этой функции в EBNF:
CollectionCreateIndex
::= '.createIndex(' StringLiteral ',' DocumentOrJSON ')'
Рис. 11.13. CollectionCreateIndexFunction
CollectionDropIndex
Синтаксис для этой функции в EBNF:
CollectionDropIndex
::= '.dropIndex(' StringLiteral ')'
Рис. 11.14. CollectionDropIndex
11.5. Функции Table CRUD
TableSelectFunction
Table.select() и
collection.find()
используют различные методы для сортировки результатов.
Table.select()
следует за языковым обозначением SQL и вызывает метод сортировки
orderBy() .
Collection.find() так не делает.
Используйте метод sort() , чтобы
сортировать результаты, возвращенные
Collection.find() .
Близость со стандартом SQL считают более важной, чем однородность API.
Синтаксис для этой функции в EBNF:
TableSelectFunction
::= '.select(' ProjectedSearchExprStrList? ')' ( '.where(' SearchConditionStr ')' )?
( '.groupBy(' SearchExprStrList ')' )? ( '.having(' SearchConditionStr ')' )?
( '.orderBy(' SortExprStrList ')' )? ( '.limit(' NumberOfRows ')' ( '.offset(' NumberOfRows ')' )? )?
( '.lockExclusive(' LockContention ')' | '.lockShared(' LockContention ')' )?
( '.bind(' ( PlaceholderValues ) ')' )*
( '.execute()' )?
Рис. 11.15. TableSelectFunction
TableInsertFunction
Синтаксис для этой функции в EBNF:
TableInsertFunction
::= '.insert(' ( TableFields )? ')'
( '.values(' Literal (',' Literal)* ')' )+
( '.execute()' )?
Рис. 11.16. TableInsertFunction
TableUpdateFunction
Синтаксис для этой функции в EBNF:
TableUpdateFunction
::= '.update()'
( '.set(' TableField ',' ExprOrLiteral ')' )+ '.where(' SearchConditionStr ')'
( '.orderBy(' SortExprStrList ')' )? ( '.limit(' NumberOfRows ')' )?
( '.bind(' ( PlaceholderValues ) ')' )*
( '.execute()' )?
Рис. 11.17. TableUpdateFunction
TableDeleteFunction
Синтаксис для этой функции в EBNF:
TableDeleteFunction
::= '.delete()' '.where(' SearchConditionStr ')'
( '.orderBy(' SortExprStrList ')' )? ( '.limit(' NumberOfRows ')' )?
( '.bind(' ( PlaceholderValues ) ')' )*
( '.execute()' )?
Рис. 11.18. TableDeleteFunction
11.6. Функции Result
Result
Синтаксис для этой функции в EBNF:
Result
::= '.getAffectedItemsCount()'
| '.getAutoIncrementValue()'
| '.getGeneratedIds()'
| '.getWarningCount()'
| '.getWarnings()'
Рис. 11.19. Result
DocResult
Синтаксис для этой функции в EBNF:
DocResult
::= '.getWarningCount()'
| '.getWarnings()'
| '.fetchAll()'
| '.fetchOne()'
Рис. 11.20. DocResult
RowResult
Синтаксис для этой функции в EBNF:
RowResult
::= '.getWarningCount()'
| '.getWarnings()'
| '.fetchAll()'
| '.fetchOne()'
| '.getColumns()'
Рис. 11.21. RowResult
Column
Синтаксис для этой функции в EBNF:
Column
::= '.getSchemaName()'
| '.getTableName()'
| '.getTableLabel()'
| '.getColumnName()'
| '.getColumnLabel()'
| '.getType()'
| '.getLength()'
| '.getFractionalDigits()'
| '.isNumberSigned()'
| '.getCollationName()'
| '.getCharacterSetName()'
| '.isPadded()'
Рис. 11.22. Column
SqlResult
Синтаксис для этой функции в EBNF:
SqlResult
::= '.getWarningCount()'
| '.getWarnings()'
| '.fetchAll()'
| '.fetchOne()'
| '.getColumns()'
| '.getAutoIncrementValue()'
| '.hasData()'
| '.nextResult()'
Рис. 11.23. SqlResult
11.7. Другие определения EBNF
SearchConditionStr
Синтаксис для этой функции в EBNF:
SearchConditionStr
::= '"' Expression '"'
Рис. 11.24. SearchConditionStr
SearchExprStrList
Синтаксис для этой функции в EBNF:
SearchExprStrList
::= '[' '"' Expression '"' ( ',' '"' Expression '"' )* ']'
Рис. 11.25. SearchExprStrList
ProjectedDocumentExprStr
Синтаксис для этой функции в EBNF:
ProjectedDocumentExprStr
::= ProjectedSearchExprStrList | 'expr("' JSONDocumentExpression '")'
Рис. 11.26. ProjectedDocumentExprStr
ProjectedSearchExprStrList
Синтаксис для этой функции в EBNF:
ProjectedSearchExprStrList
::= '[' '"' Expression ( 'AS' Alias )? '"' ( ',' '"' Expression ( 'AS' Alias )? '"' )* ']'
Рис. 11.27. ProjectedSearchExprStrList
SortExprStrList
Синтаксис для этой функции в EBNF:
SortExprStrList
::= '[' '"' Expression ( 'ASC' | 'DESC' )? '"' ( ',' '"' Expression ( 'ASC' | 'DESC' )? '"' )* ']'
Рис. 11.28. SortExprStrList
ExprOrLiteral
Синтаксис для этой функции в EBNF:
ExprOrLiteral
::= 'expr("' Expression '")' | Literal
Рис. 11.29. ExprOrLiteral
ExprOrLiterals
Синтаксис для этой функции в EBNF:
ExprOrLiterals
::= ExprOrLiteral ( ',' ExprOrLiteral )*
Рис. 11.30. ExprOrLiterals
ExprOrLiteralOrOperand
Синтаксис для этой функции в EBNF:
ExprOrLiteralOrOperand
::= ExprOrLiteral
Рис. 11.31. ExprOrLiteralOrOperand
PlaceholderValues
Синтаксис для этой функции в EBNF:
PlaceholderValues
::= '{' PlaceholderName ':' ( ExprOrLiteral ) '}'
Рис. 11.32. PlaceholderValues
PlaceholderName
Синтаксис для этой функции в EBNF:
PlaceholderName
::= NamedPlaceholderNotQuestionmarkNotNumbered
Рис. 11.33. PlaceholderName
CollectionFields
Синтаксис для этой функции в EBNF:
CollectionFields
::= ( '[' CollectionField ( ',' CollectionField )* ']' )
Рис. 11.34. CollectionFields
CollectionField
Синтаксис для этой функции в EBNF:
CollectionField
::= '@'? DocPath
Рис. 11.35. CollectionField
DocPath
Синтаксис для этой функции в EBNF:
DocPath
::= ( '[*]' | ( '[' Index ']' ) | '.*' | ( '.' StringLiteral ) | '**' )+
Рис. 11.36. DocPath
Literal
Синтаксис для этой функции в EBNF:
Literal
::= '"' StringLiteral '"' | Number | true | false | Document
Рис. 11.37. Literal
Выражения
Рис. 11.38. Expression
Document
Вызов API, ожидающий документ JSON, позволяет использование
многих типов данных, чтобы описывать документ. В зависимости от реализации
X DevAPI и языка может использоваться любой из следующих типов данных:
Все реализации X DevAPI позволяют выражать документ специальным типом
DbDoc и как последовательность.
Синтаксис для этой функции в EBNF:
Document
::= JSONDocument | JSONEquivalentDocument | DbDoc | GeneratedDocumentClasses
Рис. 11.39. Document
JSONExpression
Синтаксис для этой функции в EBNF:
JSONExpression
::= JSONDocumentExpression | '[' Expression ( ',' Expression )* ']'
Рис. 11.40. JSONExpression
JSONDocumentExpression
Синтаксис для этой функции в EBNF:
JSONDocumentExpression
::= '{' StringLiteral ':' JSONExpression (',' StringLiteral ':' JSONExpression)* '}'
Рис. 11.41. JSONDocumentExpression
FunctionName
Синтаксис для этой функции в EBNF:
FunctionName
::= StringLiteral | StringLiteral '.' StringLiteral
Рис. 11.42. FunctionName
DocumentOrJSON
Синтаксис для этой функции в EBNF:
DocumentOrJSON
::= Document | 'expr("' JSONDocumentExpression '")'
Рис. 11.43. DocumentOrJSON
TableField
Синтаксис для этой функции в EBNF:
TableField
::= ( StringLiteral '.' )? ( StringLiteral '.' )? StringLiteral ( '@' DocPath )?
Рис. 11.44. TableField
TableFields
Синтаксис для этой функции в EBNF:
TableFields
::= ( '[' TableField ( ',' TableField )* ']' )
Рис. 11.45. TableFields
|