orange-orm 3.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -0
- package/.eslintignore +2 -0
- package/.eslintrc.js +45 -0
- package/.gitattributes +3 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +43 -0
- package/LICENSE +7 -0
- package/README.md +1969 -0
- package/SECURITY.md +12 -0
- package/bin/build.js +127 -0
- package/bin/compile.js +26 -0
- package/bin/rdb.js +4 -0
- package/docs/CODE_OF_CONDUCT.md +18 -0
- package/docs/changelog.md +461 -0
- package/docs/docs.md +2373 -0
- package/docs/orange.svg +32 -0
- package/docs/relations.png +0 -0
- package/package.json +139 -0
- package/src/applyPatch.js +105 -0
- package/src/client/axiosInterceptor.js +46 -0
- package/src/client/clientMap.js +72 -0
- package/src/client/createPatch.js +122 -0
- package/src/client/createProviders.js +121 -0
- package/src/client/index.js +997 -0
- package/src/client/index.mjs +6295 -0
- package/src/client/map.js +110 -0
- package/src/client/merge.js +9 -0
- package/src/client/netAdapter.js +133 -0
- package/src/client/rollup.config.js +12 -0
- package/src/client/self.js +4 -0
- package/src/client/stringify.js +22 -0
- package/src/client/toKeyPositionMap.js +30 -0
- package/src/clsTest.js +79 -0
- package/src/createDomain/negotiateForwardProperty.js +23 -0
- package/src/createDomain.js +31 -0
- package/src/dateToISOString.js +25 -0
- package/src/emitEvent.js +46 -0
- package/src/emptyFilter.js +35 -0
- package/src/flags.js +6 -0
- package/src/fromCompareObject.js +24 -0
- package/src/generic-pool.js +641 -0
- package/src/getManyDto/newQuery.js +18 -0
- package/src/getManyDto/query/newColumnSql.js +8 -0
- package/src/getManyDto/query/newSingleQuery.js +19 -0
- package/src/getManyDto/query/singleQuery/newJoinedColumnSql.js +25 -0
- package/src/getManyDto/query/singleQuery/newShallowColumnSql.js +25 -0
- package/src/getManyDto.js +255 -0
- package/src/getTSDefinition.js +510 -0
- package/src/hostExpress/executePath.js +433 -0
- package/src/hostExpress/getMeta.js +49 -0
- package/src/hostExpress.js +125 -0
- package/src/hostLocal.js +110 -0
- package/src/index.d.ts +324 -0
- package/src/index.js +116 -0
- package/src/jsconfig.json +8 -0
- package/src/lock/toIntKey.js +35 -0
- package/src/lock.js +26 -0
- package/src/map.d.ts +1729 -0
- package/src/mssql/encodeBuffer.js +7 -0
- package/src/mssql/newDatabase.js +129 -0
- package/src/mssql/newPool.js +19 -0
- package/src/mssql/newTransaction.js +69 -0
- package/src/mssql/pool/defaults.js +45 -0
- package/src/mssql/pool/end.js +13 -0
- package/src/mssql/pool/newGenericPool.js +62 -0
- package/src/mssql/wrapQuery.js +34 -0
- package/src/mySql/deleteFromSql.js +8 -0
- package/src/mySql/encodeBoolean.js +7 -0
- package/src/mySql/insert.js +21 -0
- package/src/mySql/insertSql.js +62 -0
- package/src/mySql/lastInsertedSql.js +11 -0
- package/src/mySql/limitAndOffset.js +18 -0
- package/src/mySql/newDatabase.js +127 -0
- package/src/mySql/newPool.js +19 -0
- package/src/mySql/newTransaction.js +54 -0
- package/src/mySql/pool/defaults.js +16 -0
- package/src/mySql/pool/end.js +13 -0
- package/src/mySql/pool/negotiatePoolOptions.js +12 -0
- package/src/mySql/pool/newGenericPool.js +67 -0
- package/src/mySql/selectForUpdateSql.js +3 -0
- package/src/mySql/wrapQuery.js +16 -0
- package/src/mySql/wrapQueryStream.js +9 -0
- package/src/newArray.js +3 -0
- package/src/newCollection.js +55 -0
- package/src/newId.js +1 -0
- package/src/newImmutable.js +22 -0
- package/src/newObject.js +5 -0
- package/src/oracle/deleteFromSql.js +8 -0
- package/src/oracle/encodeBoolean.js +7 -0
- package/src/oracle/encodeBuffer.js +7 -0
- package/src/oracle/encodeDate.js +7 -0
- package/src/oracle/formatDateIn.js +5 -0
- package/src/oracle/formatDateOut.js +5 -0
- package/src/oracle/insert.js +23 -0
- package/src/oracle/insertSql.js +73 -0
- package/src/oracle/lastInsertedSql.js +14 -0
- package/src/oracle/limitAndOffset.js +18 -0
- package/src/oracle/mergeSql.js +79 -0
- package/src/oracle/newDatabase.js +128 -0
- package/src/oracle/newInsertCommandCore.js +27 -0
- package/src/oracle/newPool.js +19 -0
- package/src/oracle/newTransaction.js +63 -0
- package/src/oracle/outputInsertedSql.js +5 -0
- package/src/oracle/pool/defaults.js +45 -0
- package/src/oracle/pool/end.js +13 -0
- package/src/oracle/pool/newGenericPool.js +64 -0
- package/src/oracle/replaceParamChar.js +14 -0
- package/src/oracle/selectForUpdateSql.js +3 -0
- package/src/oracle/wrapQuery.js +38 -0
- package/src/patchRow.js +13 -0
- package/src/patchTable.js +317 -0
- package/src/pg/deleteFromSql.js +8 -0
- package/src/pg/encodeBoolean.js +5 -0
- package/src/pg/encodeDate.js +7 -0
- package/src/pg/encodeJSON.js +15 -0
- package/src/pg/formatDateOut.js +5 -0
- package/src/pg/insert.js +14 -0
- package/src/pg/insertSql.js +70 -0
- package/src/pg/lastInsertedSql.js +11 -0
- package/src/pg/limitAndOffset.js +18 -0
- package/src/pg/newDatabase.js +153 -0
- package/src/pg/newPool.js +19 -0
- package/src/pg/newStreamableQuery.js +7 -0
- package/src/pg/newTransaction.js +58 -0
- package/src/pg/pool/defaults.js +45 -0
- package/src/pg/pool/end.js +13 -0
- package/src/pg/pool/newPgPool.js +82 -0
- package/src/pg/replaceParamChar.js +14 -0
- package/src/pg/schema.js +11 -0
- package/src/pg/selectForUpdateSql.js +3 -0
- package/src/pg/wrapQuery.js +33 -0
- package/src/pg/wrapQueryStream.js +20 -0
- package/src/pools.js +17 -0
- package/src/query/negotiateParameters.js +10 -0
- package/src/query/negotiateSql.js +14 -0
- package/src/query/wrapQuery.js +17 -0
- package/src/query.js +13 -0
- package/src/sap/deleteFromSql.js +8 -0
- package/src/sap/encodeBoolean.js +7 -0
- package/src/sap/encodeBuffer.js +7 -0
- package/src/sap/formatDateOut.js +5 -0
- package/src/sap/insert.js +21 -0
- package/src/sap/insertSql.js +64 -0
- package/src/sap/lastInsertedSql.js +12 -0
- package/src/sap/limitAndOffset.js +16 -0
- package/src/sap/mergeSql.js +73 -0
- package/src/sap/newDatabase.js +129 -0
- package/src/sap/newPool.js +19 -0
- package/src/sap/newTransaction.js +69 -0
- package/src/sap/pool/end.js +13 -0
- package/src/sap/selectForUpdateSql.js +3 -0
- package/src/sqlite/deleteFromSql.js +8 -0
- package/src/sqlite/encodeBoolean.js +7 -0
- package/src/sqlite/encodeBuffer.js +7 -0
- package/src/sqlite/insert.js +21 -0
- package/src/sqlite/insertSql.js +64 -0
- package/src/sqlite/lastInsertedSql.js +12 -0
- package/src/sqlite/limitAndOffset.js +18 -0
- package/src/sqlite/newDatabase.js +128 -0
- package/src/sqlite/newPool.js +19 -0
- package/src/sqlite/newTransaction.js +58 -0
- package/src/sqlite/pool/defaults.js +45 -0
- package/src/sqlite/pool/end.js +13 -0
- package/src/sqlite/pool/newGenericPool.js +59 -0
- package/src/sqlite/selectForUpdateSql.js +3 -0
- package/src/sqlite/wrapQuery.js +24 -0
- package/src/table/aggregate.js +9 -0
- package/src/table/begin.js +10 -0
- package/src/table/cascadeDelete.js +11 -0
- package/src/table/cloneStrategy.js +18 -0
- package/src/table/column/binary/newDecode.js +15 -0
- package/src/table/column/binary/newEncode.js +23 -0
- package/src/table/column/binary/purify.js +12 -0
- package/src/table/column/binary.js +12 -0
- package/src/table/column/boolean/newDecode.js +12 -0
- package/src/table/column/boolean/newEncode.js +36 -0
- package/src/table/column/boolean/purify.js +7 -0
- package/src/table/column/boolean.js +14 -0
- package/src/table/column/date/formatOut.js +11 -0
- package/src/table/column/date/newDecode.js +17 -0
- package/src/table/column/date/newEncode.js +47 -0
- package/src/table/column/date/purify.js +17 -0
- package/src/table/column/date/toISOString.js +25 -0
- package/src/table/column/date/tryParseISO.js +14 -0
- package/src/table/column/date.js +14 -0
- package/src/table/column/dateWithTimeZone/newEncode.js +41 -0
- package/src/table/column/dateWithTimeZone.js +14 -0
- package/src/table/column/encodeFilterArg.js +8 -0
- package/src/table/column/equal.js +15 -0
- package/src/table/column/extractAlias.js +7 -0
- package/src/table/column/greaterThan.js +12 -0
- package/src/table/column/greaterThanOrEqual.js +12 -0
- package/src/table/column/guid/newDecode.js +10 -0
- package/src/table/column/guid/newEncode.js +30 -0
- package/src/table/column/guid/purify.js +10 -0
- package/src/table/column/guid.js +12 -0
- package/src/table/column/in.js +24 -0
- package/src/table/column/json/formatOut.js +11 -0
- package/src/table/column/json/newDecode.js +21 -0
- package/src/table/column/json/newEncode.js +41 -0
- package/src/table/column/json/purify.js +7 -0
- package/src/table/column/json.js +22 -0
- package/src/table/column/lessThan.js +12 -0
- package/src/table/column/lessThanOrEqual.js +12 -0
- package/src/table/column/negotiateNextAndFilter.js +7 -0
- package/src/table/column/negotiateNextOrFilter.js +7 -0
- package/src/table/column/negotiateRawSqlFilter.js +74 -0
- package/src/table/column/newBoolean.js +54 -0
- package/src/table/column/newColumn.js +89 -0
- package/src/table/column/newDecodeCore.js +10 -0
- package/src/table/column/notEqual.js +15 -0
- package/src/table/column/numeric/negotiateDefault.js +5 -0
- package/src/table/column/numeric/newDecode.js +16 -0
- package/src/table/column/numeric/newEncode.js +25 -0
- package/src/table/column/numeric/purify.js +12 -0
- package/src/table/column/numeric.js +15 -0
- package/src/table/column/string/contains.js +3 -0
- package/src/table/column/string/containsCore.js +16 -0
- package/src/table/column/string/endsWith.js +3 -0
- package/src/table/column/string/endsWithCore.js +16 -0
- package/src/table/column/string/iContains.js +3 -0
- package/src/table/column/string/iEndsWith.js +3 -0
- package/src/table/column/string/iEqual.js +15 -0
- package/src/table/column/string/iStartsWith.js +3 -0
- package/src/table/column/string/newEncode.js +31 -0
- package/src/table/column/string/purify.js +7 -0
- package/src/table/column/string/startsWith.js +3 -0
- package/src/table/column/string/startsWithCore.js +16 -0
- package/src/table/column/string.js +55 -0
- package/src/table/column.js +154 -0
- package/src/table/commands/beginCommand.js +13 -0
- package/src/table/commands/commitCommand.js +9 -0
- package/src/table/commands/compressChanges.js +25 -0
- package/src/table/commands/delete/createAlias.js +6 -0
- package/src/table/commands/delete/newSingleCommand.js +17 -0
- package/src/table/commands/delete/singleCommand/joinSql.js +26 -0
- package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +19 -0
- package/src/table/commands/delete/singleCommand/selectSql.js +11 -0
- package/src/table/commands/delete/singleCommand/subFilter.js +19 -0
- package/src/table/commands/delete/singleCommand/whereSql.js +25 -0
- package/src/table/commands/getChangeSet.js +6 -0
- package/src/table/commands/insert/getSqlTemplate.js +68 -0
- package/src/table/commands/lastCommandMatches.js +11 -0
- package/src/table/commands/negotiateEndEdit.js +7 -0
- package/src/table/commands/newDeleteCommand.js +23 -0
- package/src/table/commands/newGetLastInsertedCommand.js +49 -0
- package/src/table/commands/newGetLastInsertedCommandCore.js +42 -0
- package/src/table/commands/newInsertAndForgetCommand.js +55 -0
- package/src/table/commands/newInsertCommand.js +56 -0
- package/src/table/commands/newInsertCommandCore.js +27 -0
- package/src/table/commands/newRow.js +51 -0
- package/src/table/commands/newUpdateCommand.js +62 -0
- package/src/table/commands/newUpdateCommandCore.js +45 -0
- package/src/table/commands/pushCommand.js +10 -0
- package/src/table/commands/rollbackCommand.js +13 -0
- package/src/table/commit.js +30 -0
- package/src/table/count.js +29 -0
- package/src/table/createJSONReadStream.js +7 -0
- package/src/table/createJSONReadStreamDefault.js +33 -0
- package/src/table/createJSONReadStreamNative.js +31 -0
- package/src/table/createReadStream.js +24 -0
- package/src/table/createReadStreamCoreNative.js +40 -0
- package/src/table/createReadStreamDefault.js +102 -0
- package/src/table/createReadStreamNative.js +17 -0
- package/src/table/delete.js +20 -0
- package/src/table/deleteSessionContext.js +17 -0
- package/src/table/encodeDbSpecific.js +10 -0
- package/src/table/executeQueries/executeChanges.js +35 -0
- package/src/table/executeQueries/executeQueriesCore.js +12 -0
- package/src/table/executeQueries/executeQuery.js +8 -0
- package/src/table/executeQueries/resolveExecuteQuery.js +57 -0
- package/src/table/executeQueries.js +15 -0
- package/src/table/extractDeleteStrategy.js +9 -0
- package/src/table/fuzzyPromise.js +18 -0
- package/src/table/getById.js +33 -0
- package/src/table/getFirstFromDb.js +10 -0
- package/src/table/getFromDbById.js +17 -0
- package/src/table/getIdArgs.js +14 -0
- package/src/table/getMany.js +26 -0
- package/src/table/getManyDto/newQuery.js +32 -0
- package/src/table/getManyDto/pg/newQuery.js +8 -0
- package/src/table/getManyDto.js +10 -0
- package/src/table/getManyDtoFast/getSubRows.js +172 -0
- package/src/table/getManyDtoFast/newQuery.js +8 -0
- package/src/table/getManyDtoFast/newQueryCore.js +18 -0
- package/src/table/getManyDtoFast/query/newSingleQuery.js +20 -0
- package/src/table/getManyDtoFast/query/newSubQueries/joinLegToQuery.js +18 -0
- package/src/table/getManyDtoFast/query/newSubQueries/manyLegToQuery.js +20 -0
- package/src/table/getManyDtoFast/query/newSubQueries/oneLegToQuery.js +21 -0
- package/src/table/getManyDtoFast/query/newSubQueries.js +47 -0
- package/src/table/getManyDtoFast/query/singleQuery/newShallowColumnSql.js +21 -0
- package/src/table/getSessionContext.js +10 -0
- package/src/table/getSessionSingleton.js +5 -0
- package/src/table/groupBy/newQuery.js +25 -0
- package/src/table/groupBy.js +65 -0
- package/src/table/hasMany.js +33 -0
- package/src/table/hasOne.js +33 -0
- package/src/table/insert.js +91 -0
- package/src/table/insertDefault.js +88 -0
- package/src/table/join.js +42 -0
- package/src/table/joinRelation/getRelatives.js +64 -0
- package/src/table/log.js +39 -0
- package/src/table/negotiateAddStrategy.js +20 -0
- package/src/table/negotiateExpandInverse.js +13 -0
- package/src/table/newCache.js +96 -0
- package/src/table/newCascadeDeleteStrategy.js +30 -0
- package/src/table/newGetRelated.js +21 -0
- package/src/table/newJoinRelation.js +117 -0
- package/src/table/newManyRelation.js +61 -0
- package/src/table/newOneRelation.js +61 -0
- package/src/table/newPrimaryKeyFilter.js +13 -0
- package/src/table/newQuery.js +18 -0
- package/src/table/newRelatedTable.js +100 -0
- package/src/table/newRowCache.js +106 -0
- package/src/table/newThrow.js +11 -0
- package/src/table/nullPromise.js +1 -0
- package/src/table/objectToCallback.js +7 -0
- package/src/table/oneRelation/getRelatives.js +45 -0
- package/src/table/popChanges.js +19 -0
- package/src/table/promise.js +14 -0
- package/src/table/purifyStrategy.js +49 -0
- package/src/table/query/extractFilter.js +9 -0
- package/src/table/query/extractLimit.js +11 -0
- package/src/table/query/extractLimitQuery.js +23 -0
- package/src/table/query/extractOffset.js +11 -0
- package/src/table/query/extractOrderBy.js +57 -0
- package/src/table/query/extractSql.js +10 -0
- package/src/table/query/newParameterized.js +38 -0
- package/src/table/query/newSingleQuery.js +23 -0
- package/src/table/query/parameterized/extractParameters.js +8 -0
- package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +16 -0
- package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +27 -0
- package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +37 -0
- package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +13 -0
- package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +9 -0
- package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +11 -0
- package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +9 -0
- package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +25 -0
- package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +13 -0
- package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +10 -0
- package/src/table/query/singleQuery/negotiateExclusive.js +11 -0
- package/src/table/query/singleQuery/negotiateLimit.js +10 -0
- package/src/table/query/singleQuery/newColumnSql.js +8 -0
- package/src/table/query/singleQuery/newDiscriminatorSql.js +33 -0
- package/src/table/query/singleQuery/newJoinSql.js +41 -0
- package/src/table/query/singleQuery/newQueryContext.js +20 -0
- package/src/table/query/singleQuery/newWhereSql.js +19 -0
- package/src/table/readStream/extractLimit.js +7 -0
- package/src/table/readStream/extractOrderBy.js +55 -0
- package/src/table/readStream/mySql/newQuery.js +16 -0
- package/src/table/readStream/mySql/query/newSingleQuery.js +21 -0
- package/src/table/readStream/mySql/query/newSubQueries/joinLegToQuery.js +19 -0
- package/src/table/readStream/mySql/query/newSubQueries/manyLegToQuery.js +22 -0
- package/src/table/readStream/mySql/query/newSubQueries/newQueryCore.js +9 -0
- package/src/table/readStream/mySql/query/newSubQueries/newSingleQueryCore.js +18 -0
- package/src/table/readStream/mySql/query/newSubQueries/oneLegToQuery.js +22 -0
- package/src/table/readStream/mySql/query/newSubQueries.js +47 -0
- package/src/table/readStream/mySql/query/singleQuery/newShallowColumnSql.js +17 -0
- package/src/table/readStream/newQuery.js +32 -0
- package/src/table/readStream/newQueryStream.js +8 -0
- package/src/table/readStream/pg/newQuery.js +8 -0
- package/src/table/readStream/pg/newQueryCore.js +17 -0
- package/src/table/readStream/pg/query/newSingleQuery.js +19 -0
- package/src/table/readStream/pg/query/newSubQueries/joinLegToQuery.js +19 -0
- package/src/table/readStream/pg/query/newSubQueries/manyLegToQuery.js +22 -0
- package/src/table/readStream/pg/query/newSubQueries/oneLegToQuery.js +19 -0
- package/src/table/readStream/pg/query/newSubQueries.js +47 -0
- package/src/table/readStream/pg/query/singleQuery/newShallowColumnSql.js +19 -0
- package/src/table/readStreamDefault/createBatchFilter.js +39 -0
- package/src/table/relatedTable/aggregate/aggregateJoinSql.js +37 -0
- package/src/table/relatedTable/aggregate/joinSql.js +38 -0
- package/src/table/relatedTable/aggregate.js +48 -0
- package/src/table/relatedTable/all.js +24 -0
- package/src/table/relatedTable/any.js +70 -0
- package/src/table/relatedTable/childColumn.js +61 -0
- package/src/table/relatedTable/columnAggregate.js +16 -0
- package/src/table/relatedTable/columnAggregateGroup.js +59 -0
- package/src/table/relatedTable/joinSql.js +40 -0
- package/src/table/relatedTable/joinSqlArray.js +32 -0
- package/src/table/relatedTable/none.js +22 -0
- package/src/table/relatedTable/relatedColumn.js +49 -0
- package/src/table/relatedTable/relationFilter.js +16 -0
- package/src/table/relatedTable/selectSql.js +11 -0
- package/src/table/relatedTable/subFilter.js +16 -0
- package/src/table/relatedTable/where.js +50 -0
- package/src/table/relatedTable/whereSql.js +41 -0
- package/src/table/relation/manyCache/extractParentKey.js +17 -0
- package/src/table/relation/manyCache/synchronizeAdded.js +13 -0
- package/src/table/relation/manyCache/synchronizeChanged.js +31 -0
- package/src/table/relation/manyCache/synchronizeRemoved.js +13 -0
- package/src/table/relation/newExpanderCache.js +7 -0
- package/src/table/relation/newForeignKeyFilter.js +20 -0
- package/src/table/relation/newJoinLeg.js +23 -0
- package/src/table/relation/newManyCache.js +57 -0
- package/src/table/relation/newManyCacheCore.js +53 -0
- package/src/table/relation/newManyLeg.js +15 -0
- package/src/table/relation/newOneCache.js +28 -0
- package/src/table/relation/newOneLeg.js +25 -0
- package/src/table/releaseDbClient.js +15 -0
- package/src/table/resultToPromise.js +8 -0
- package/src/table/resultToRows/dbRowToRow.js +51 -0
- package/src/table/resultToRows/dbRowsToRows.js +13 -0
- package/src/table/resultToRows/decodeDbRow.js +25 -0
- package/src/table/resultToRows/delete/removeFromCache.js +33 -0
- package/src/table/resultToRows/delete.js +31 -0
- package/src/table/resultToRows/negotiateQueryContext.js +6 -0
- package/src/table/resultToRows/newDecodeDbRow.js +262 -0
- package/src/table/resultToRows/toDto/createDto.js +20 -0
- package/src/table/resultToRows/toDto/extractStrategy.js +41 -0
- package/src/table/resultToRows/toDto.js +92 -0
- package/src/table/resultToRows.js +37 -0
- package/src/table/rollback.js +31 -0
- package/src/table/rowArray/negotiateNextTick.js +11 -0
- package/src/table/rowArray/orderBy.js +51 -0
- package/src/table/rowArray.js +62 -0
- package/src/table/setSessionSingleton.js +5 -0
- package/src/table/strategyToSpan.js +49 -0
- package/src/table/tryGetById.js +13 -0
- package/src/table/tryGetFirstFromDb.js +23 -0
- package/src/table/tryGetFromCacheById.js +12 -0
- package/src/table/tryGetFromDbById/extractStrategy.js +9 -0
- package/src/table/tryGetFromDbById.js +19 -0
- package/src/table/tryGetSessionContext.js +16 -0
- package/src/table/tryReleaseDbClient.js +14 -0
- package/src/table/updateField.js +12 -0
- package/src/table/where.js +12 -0
- package/src/table.js +174 -0
- package/src/tedious/deleteFromSql.js +8 -0
- package/src/tedious/encodeBoolean.js +7 -0
- package/src/tedious/encodeBuffer.js +7 -0
- package/src/tedious/formatDateOut.js +5 -0
- package/src/tedious/formatJSONOut.js +5 -0
- package/src/tedious/getManyDto/newQuery.js +8 -0
- package/src/tedious/getManyDto/newQueryCore.js +18 -0
- package/src/tedious/getManyDto/query/newSingleQuery.js +29 -0
- package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +16 -0
- package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +16 -0
- package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +19 -0
- package/src/tedious/getManyDto/query/newSubQueries.js +48 -0
- package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +34 -0
- package/src/tedious/getManyDto.js +27 -0
- package/src/tedious/insert.js +13 -0
- package/src/tedious/insertSql.js +70 -0
- package/src/tedious/limitAndOffset.js +16 -0
- package/src/tedious/mergeSql.js +76 -0
- package/src/tedious/newDatabase.js +129 -0
- package/src/tedious/newPool.js +19 -0
- package/src/tedious/newTransaction.js +72 -0
- package/src/tedious/outputInsertedSql.js +11 -0
- package/src/tedious/pool/defaults.js +45 -0
- package/src/tedious/pool/end.js +13 -0
- package/src/tedious/pool/newGenericPool.js +71 -0
- package/src/tedious/pool/parseConnectionString.js +40 -0
- package/src/tedious/selectForUpdateSql.js +3 -0
- package/src/tedious/wrapQuery.js +112 -0
- package/src/toCompareObject.js +41 -0
- package/src/useHook.js +9 -0
- package/src/validateDeleteAllowed.js +49 -0
- package/src/validateDeleteConflict.js +92 -0
package/docs/docs.md
ADDED
|
@@ -0,0 +1,2373 @@
|
|
|
1
|
+
All examples below are found at [npmjs.org/package/rdb-demo](https://npmjs.org/package/rdb-demo).
|
|
2
|
+
This is the _Classic Documentation_. Are you looking for the [_Modern Typescript Documentation_](https://github.com/alfateam/orange-orm/blob/master/README.md) ?
|
|
3
|
+
---------------
|
|
4
|
+
__Connecting__
|
|
5
|
+
[connect to postgres](#_connecttopostgres)
|
|
6
|
+
[connect to mySql](#_connecttomysql)
|
|
7
|
+
[connect to Ms Sql](#_connecttomssql)
|
|
8
|
+
[connect to Sybase SAP](#_connecttosap)
|
|
9
|
+
[connect to sqlite](#_connecttosqlite)
|
|
10
|
+
[pool size](#_poolsize)
|
|
11
|
+
[native bindings](#_native)
|
|
12
|
+
[schema](#_schema)
|
|
13
|
+
[schema alternative 2](#_schema2)
|
|
14
|
+
[end pool](#_endpool)
|
|
15
|
+
[end all pools](#_endallpools)
|
|
16
|
+
[logging](#_logging)
|
|
17
|
+
|
|
18
|
+
__Basic querying__
|
|
19
|
+
[getById](#_getbyid)
|
|
20
|
+
[tryGetById](#_trygetbyid)
|
|
21
|
+
[tryGetFirst](#_trygetfirst)
|
|
22
|
+
[join](#_join)
|
|
23
|
+
[hasMany](#_hasmany)
|
|
24
|
+
[hasOne](#_hasone)
|
|
25
|
+
[composite keys](#_compositekeys)
|
|
26
|
+
[getById eagerly](#_getbyideager)
|
|
27
|
+
[tryGetFirst eagerly](#_trygetfirsteager)
|
|
28
|
+
[toDto](#_todto)
|
|
29
|
+
[toDto with strategy](#_todtowithstrategy)
|
|
30
|
+
[toDto with orderBy](#_todtowithorderby)
|
|
31
|
+
[toDto with orderBy descending](#_todtowithorderbydesc)
|
|
32
|
+
[toDto ignoring columns](#_serializable)
|
|
33
|
+
[toJSON](#_tojson)
|
|
34
|
+
[toJSON with strategy](#_tojsonwithstrategy)
|
|
35
|
+
[getMany](#_getmany)
|
|
36
|
+
[getManyDto](#_getmanydto)
|
|
37
|
+
[getMany lazily](#_getmanylazy)
|
|
38
|
+
[getMany eagerly](#_getmanyeager)
|
|
39
|
+
[getManyDto eagerly](#_getmanydtoeager)
|
|
40
|
+
[limit and offset](#_limit)
|
|
41
|
+
[getMany with orderBy jsonb](#_getmanywithorderbyjsonb)
|
|
42
|
+
[getMany with orderBy jsonb descending](#_getmanywithorderbyjsonbdesc)
|
|
43
|
+
[(many)ToDto](#_manytodto)
|
|
44
|
+
[(many)ToDto with strategy](#_manytodtowithstrategy)
|
|
45
|
+
[(many)ToJSON](#_manytojson)
|
|
46
|
+
[(many)ToJSON with strategy](#_manytojsonwithstrategy)
|
|
47
|
+
[Raw SQL query](#_rawsqlquery)
|
|
48
|
+
[Raw SQL Query With Parameters](#_rawsqlquerywithparameters)
|
|
49
|
+
|
|
50
|
+
__Streaming__
|
|
51
|
+
[streaming rows](#_streameager)
|
|
52
|
+
[streaming json](#_streamjsoneager)
|
|
53
|
+
|
|
54
|
+
__Persistence__
|
|
55
|
+
[update](#_update)
|
|
56
|
+
[insert](#_insert)
|
|
57
|
+
[insertAndForget](#_insertAndForget)
|
|
58
|
+
[delete](#_delete)
|
|
59
|
+
[cascade delete](#_cascadedelete)
|
|
60
|
+
[bulk delete](#_bulkdelete)
|
|
61
|
+
[bulk cascade delete](#_bulkcascadedelete)
|
|
62
|
+
[default values](#_defaultvalues)
|
|
63
|
+
[conventions](#_conventions)
|
|
64
|
+
[update a join-relation](#_updatejoin)
|
|
65
|
+
[update a hasOne-relation](#_updatehasone)
|
|
66
|
+
[update a hasMany-relation](#_updatehasmany)
|
|
67
|
+
[row lock](#_rowlock)
|
|
68
|
+
[transaction lock](#_transactionlock)
|
|
69
|
+
[session lock](#_sessionlock)
|
|
70
|
+
|
|
71
|
+
__Validation__
|
|
72
|
+
[plain validator](#_validate)
|
|
73
|
+
[JSON Schema](#_jsonschema)
|
|
74
|
+
|
|
75
|
+
__Filters__
|
|
76
|
+
[equal](#_equal)
|
|
77
|
+
[notEqual](#_notequal)
|
|
78
|
+
[not](#_not)
|
|
79
|
+
[lessThan](#_lessthan)
|
|
80
|
+
[lessThanOrEqual](#_lessthanorequal)
|
|
81
|
+
[greaterThan](#_greaterthan)
|
|
82
|
+
[greaterThanOrEqual](#_greaterthanorequal)
|
|
83
|
+
[between](#_between)
|
|
84
|
+
[in](#_in)
|
|
85
|
+
[startsWith](#_startswith)
|
|
86
|
+
[endsWith](#_endswith)
|
|
87
|
+
[contains](#_contains)
|
|
88
|
+
[iEqual](#_iequal)
|
|
89
|
+
[iStartsWith](#_istartswith)
|
|
90
|
+
[iEndsWith](#_iendswith)
|
|
91
|
+
[iContains](#_icontains)
|
|
92
|
+
[exists](#_exists)
|
|
93
|
+
[or](#_or)
|
|
94
|
+
[and](#_and)
|
|
95
|
+
[or alternative syntax](#_oralternative)
|
|
96
|
+
[and alternative syntax](#_andalternative)
|
|
97
|
+
[any filter](#_any)
|
|
98
|
+
[all filter](#_all)
|
|
99
|
+
[none filter](#_none)
|
|
100
|
+
[composite filter](#_compositefilter)
|
|
101
|
+
[raw sql filter](#_rawsqlfilter)
|
|
102
|
+
|
|
103
|
+
_Contents_
|
|
104
|
+
---------------
|
|
105
|
+
|
|
106
|
+
<a name="_connecttopostgres"></a>
|
|
107
|
+
[connect to postgres](https://github.com/alfateam/rdb-demo/blob/master/connect.js)
|
|
108
|
+
Prerequisites:
|
|
109
|
+
- npm install [pg](https://www.npmjs.com/package/pg)
|
|
110
|
+
```js
|
|
111
|
+
let orange = require('orange-orm');
|
|
112
|
+
|
|
113
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
114
|
+
//alternatively: let db = orange.pg('postgres://postgres:postgres@localhost/test');
|
|
115
|
+
|
|
116
|
+
return db.transaction(async () => {
|
|
117
|
+
//transaction will commit after this function
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
<a name="_connecttomysql"></a>
|
|
121
|
+
[connect to mySql](https://github.com/alfateam/rdb-demo/blob/master/mySql/connect.js)
|
|
122
|
+
Prerequisites:
|
|
123
|
+
- npm install [mysql2](https://www.npmjs.com/package/mysql2)
|
|
124
|
+
```js
|
|
125
|
+
let orange = require('orange-orm');
|
|
126
|
+
|
|
127
|
+
let db = orange('mysql://root@localhost/rdbDemo?multipleStatements=true');
|
|
128
|
+
//alternatively: let db = orange.mySql('mysql://root@localhost/rdbDemo?multipleStatements=true');
|
|
129
|
+
|
|
130
|
+
return db.transaction(async () => {
|
|
131
|
+
//transaction will commit after this function
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
<a name="_connecttomssql"></a>
|
|
135
|
+
[connect to Ms Sql](https://github.com/alfateam/rdb-demo/blob/master/msSql/connect.js)
|
|
136
|
+
Prerequisites:
|
|
137
|
+
- npm install [tedious](https://www.npmjs.com/package/tedious)
|
|
138
|
+
```js
|
|
139
|
+
let orange = require('orange-orm');
|
|
140
|
+
|
|
141
|
+
let db = orange.mssql('server=.;Database=rdbDemo;Trusted_Connection=Yes;Driver={ODBC Driver 17 for SQL Server}');
|
|
142
|
+
|
|
143
|
+
return db.transaction(async () => {
|
|
144
|
+
//transaction will commit after this function
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
<a name="_connecttosap"></a>
|
|
148
|
+
[connect to Sybase SAP](https://github.com/alfateam/rdb-demo/blob/master/sap/connect.js)
|
|
149
|
+
Prerequisites:
|
|
150
|
+
- The adaptive server driver
|
|
151
|
+
- npm install [mssqlnodev8](https://www.npmjs.com/package/msnodesqlv8) (yes, even though we are not using ms sql here)
|
|
152
|
+
```js
|
|
153
|
+
let orange = require('orange-orm');
|
|
154
|
+
|
|
155
|
+
let db = orange.sap('DRIVER=Adaptive Server Enterprise;server=.;Port=5000;Database=rdbDemo;UID=test;PWD=test');
|
|
156
|
+
|
|
157
|
+
return db.transaction(async () => {
|
|
158
|
+
//transaction will commit after this function
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
<a name="_connecttosqlite"></a>
|
|
162
|
+
[connect to sqlite](https://github.com/alfateam/rdb-demo/blob/master/sqlite/connect.js)
|
|
163
|
+
Prerequisites:
|
|
164
|
+
- npm install [sqlite3](https://www.npmjs.com/package/sqlite3)
|
|
165
|
+
```js
|
|
166
|
+
let orange = require('orange-orm');
|
|
167
|
+
|
|
168
|
+
let db = orange.sqlite(__dirname + '/db/rdbDemo');
|
|
169
|
+
|
|
170
|
+
return db.transaction(async () => {
|
|
171
|
+
//transaction will commit after this function
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
<a name="_poolsize"></a>
|
|
175
|
+
[pool size](https://github.com/alfateam/rdb-demo/blob/master/poolOptions.js)
|
|
176
|
+
```js
|
|
177
|
+
let orange = require('orange-orm');
|
|
178
|
+
let poolOptions = {size: 20};
|
|
179
|
+
|
|
180
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo', poolOptions);
|
|
181
|
+
|
|
182
|
+
return db.transaction(async () => {
|
|
183
|
+
//transaction will commit after this function
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
<a name="_native"></a>
|
|
187
|
+
__native bindings__
|
|
188
|
+
(postgres only)
|
|
189
|
+
Prerequisites:
|
|
190
|
+
- npm install [pg-native](https://npmjs.org/package/pg-native)
|
|
191
|
+
```js
|
|
192
|
+
let orange = require('orange-orm');
|
|
193
|
+
let poolOptions = {native: true};
|
|
194
|
+
|
|
195
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo', poolOptions);
|
|
196
|
+
|
|
197
|
+
return db.transaction(async () => {
|
|
198
|
+
//transaction will commit after this function
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
<a name="_schema"></a>
|
|
202
|
+
[schema](https://github.com/alfateam/rdb-demo/blob/master/schema.js)
|
|
203
|
+
(postgres only)
|
|
204
|
+
```js
|
|
205
|
+
let orange = require('orange-orm');
|
|
206
|
+
|
|
207
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
208
|
+
//alternatively: let db = orange.pg('postgres://postgres:postgres@localhost/test');
|
|
209
|
+
|
|
210
|
+
await db.transaction({schema: ['mySchema', 'otherSchema']}, async () => {
|
|
211
|
+
//or use string for single schema );
|
|
212
|
+
//transaction will commit after this function
|
|
213
|
+
});
|
|
214
|
+
```
|
|
215
|
+
<a name="_schema2"></a>
|
|
216
|
+
[schema alternative 2](https://github.com/alfateam/rdb-demo/blob/master/schema2.js)
|
|
217
|
+
(postgres only)
|
|
218
|
+
```js
|
|
219
|
+
let orange = require('orange-orm');
|
|
220
|
+
|
|
221
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
222
|
+
//alternatively: let db = orange.pg('postgres://postgres:postgres@localhost/test');
|
|
223
|
+
|
|
224
|
+
return db.transaction(async () => {
|
|
225
|
+
await db.schema({schema: ['mySchema', 'otherSchema']});
|
|
226
|
+
//or use string for single schema );
|
|
227
|
+
});
|
|
228
|
+
```
|
|
229
|
+
<a name="_endpool"></a>
|
|
230
|
+
[end pool](https://github.com/alfateam/rdb-demo/blob/master/endPool.js)
|
|
231
|
+
```js
|
|
232
|
+
let orange = require('orange-orm');
|
|
233
|
+
|
|
234
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
235
|
+
|
|
236
|
+
await db.transaction(async () => {
|
|
237
|
+
//transaction will commit after this function
|
|
238
|
+
});
|
|
239
|
+
await db.end();
|
|
240
|
+
console.log('Pool ended.');
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
<a name="_endallpools"></a>
|
|
244
|
+
[end all pools](https://github.com/alfateam/rdb-demo/blob/master/endAllPools.js)
|
|
245
|
+
```js
|
|
246
|
+
let orange = require('orange-orm');
|
|
247
|
+
|
|
248
|
+
let dbPg = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
249
|
+
let dbMySql = orange('mysql://root@localhost/rdbDemo?multipleStatements=true');
|
|
250
|
+
|
|
251
|
+
await dbPg.transaction(async () => {
|
|
252
|
+
//do pg stuff here
|
|
253
|
+
});
|
|
254
|
+
await dbMySql.transaction(async () => {
|
|
255
|
+
//do mySql stuff here
|
|
256
|
+
});
|
|
257
|
+
await orange.end();
|
|
258
|
+
console.log('Pools ended.');
|
|
259
|
+
```
|
|
260
|
+
<a name="_logging"></a>
|
|
261
|
+
[logging](https://github.com/alfateam/rdb-demo/blob/master/logging.js)
|
|
262
|
+
```js
|
|
263
|
+
let orange = require('orange-orm');
|
|
264
|
+
|
|
265
|
+
let Customer = orange.table('_customer');
|
|
266
|
+
|
|
267
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
268
|
+
Customer.column('cName').string().as('name');
|
|
269
|
+
|
|
270
|
+
orange.log(console.log); //will log sql and parameters
|
|
271
|
+
|
|
272
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
273
|
+
|
|
274
|
+
await db.transaction(async () => {
|
|
275
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
276
|
+
customer.name = 'Ringo';
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
<a name="_getbyid"></a>
|
|
280
|
+
[getById](https://github.com/alfateam/rdb-demo/blob/master/getById.js)
|
|
281
|
+
```js
|
|
282
|
+
let orange = require('orange-orm');
|
|
283
|
+
let Customer = orange.table('_customer');
|
|
284
|
+
|
|
285
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
286
|
+
Customer.column('cName').string().as('name');
|
|
287
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
288
|
+
Customer.column('cRegdate').date().as('registeredDate');
|
|
289
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
290
|
+
Customer.column('cPicture').binary().as('picture');
|
|
291
|
+
Customer.column('cDocument').json().as('document');
|
|
292
|
+
|
|
293
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
294
|
+
|
|
295
|
+
await db.transaction(async () => {
|
|
296
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
297
|
+
console.log(await customer.toDto());
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
<a name="_trygetbyid"></a>
|
|
301
|
+
[tryGetById](https://github.com/alfateam/rdb-demo/blob/master/tryGetById.js)
|
|
302
|
+
```js
|
|
303
|
+
let orange = require('orange-orm');
|
|
304
|
+
|
|
305
|
+
let Customer = orange.table('_customer');
|
|
306
|
+
|
|
307
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
308
|
+
Customer.column('cName').string().as('name');
|
|
309
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
310
|
+
Customer.column('cRegdate').date().as('registeredDate');
|
|
311
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
312
|
+
Customer.column('cPicture').binary().as('picture');
|
|
313
|
+
|
|
314
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
315
|
+
|
|
316
|
+
await db.transaction(async () => {
|
|
317
|
+
let customer = await Customer.tryGetById('a0000000-0000-0000-0000-000000000000');
|
|
318
|
+
console.log(await customer.toDto());
|
|
319
|
+
});
|
|
320
|
+
```
|
|
321
|
+
<a name="_trygetfirst"></a>
|
|
322
|
+
[tryGetFirst](https://github.com/alfateam/rdb-demo/blob/master/tryGetFirst.js)
|
|
323
|
+
```js
|
|
324
|
+
let orange = require('orange-orm');
|
|
325
|
+
|
|
326
|
+
let Customer = orange.table('_customer');
|
|
327
|
+
|
|
328
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
329
|
+
Customer.column('cName').string().as('name');
|
|
330
|
+
|
|
331
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
332
|
+
|
|
333
|
+
await db.transaction(async () => {
|
|
334
|
+
let filter = Customer.name.equal('John');
|
|
335
|
+
let customer = await Customer.tryGetFirst(filter);
|
|
336
|
+
console.log(await customer.toDto());
|
|
337
|
+
});
|
|
338
|
+
```
|
|
339
|
+
<a name="_join"></a>
|
|
340
|
+
[join](https://github.com/alfateam/rdb-demo/blob/master/join.js)
|
|
341
|
+
```js
|
|
342
|
+
let orange = require('orange-orm');
|
|
343
|
+
|
|
344
|
+
let Customer = orange.table('_customer');
|
|
345
|
+
let Order = orange.table('_order');
|
|
346
|
+
|
|
347
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
348
|
+
Customer.column('cName').string().as('name');
|
|
349
|
+
|
|
350
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
351
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
352
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
353
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
354
|
+
|
|
355
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
356
|
+
|
|
357
|
+
await db.transaction(async () => {
|
|
358
|
+
let order = await Order.getById('a0000000-a000-0000-0000-000000000000');
|
|
359
|
+
console.log(await order.toJSON({customer: null}));
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
```
|
|
363
|
+
<a name="_hasmany"></a>
|
|
364
|
+
[hasMany](https://github.com/alfateam/rdb-demo/blob/master/hasMany.js)
|
|
365
|
+
```js
|
|
366
|
+
let orange = require('orange-orm');
|
|
367
|
+
let resetDemo = require('./db/resetDemo');
|
|
368
|
+
let inspect = require('util').inspect;
|
|
369
|
+
|
|
370
|
+
let Order = orange.table('_order');
|
|
371
|
+
let OrderLine = orange.table('_orderLine');
|
|
372
|
+
|
|
373
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
374
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
375
|
+
|
|
376
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
377
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
378
|
+
OrderLine.column('lProduct').string().as('product');
|
|
379
|
+
|
|
380
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
381
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
382
|
+
|
|
383
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
384
|
+
|
|
385
|
+
await db.transaction(async () => {
|
|
386
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
387
|
+
let dtos = await order.toDto();
|
|
388
|
+
console.log(inspect(dtos, false, 10));
|
|
389
|
+
});
|
|
390
|
+
```
|
|
391
|
+
<a name="_hasone"></a>
|
|
392
|
+
[hasOne](https://github.com/alfateam/rdb-demo/blob/master/hasOne.js)
|
|
393
|
+
```js
|
|
394
|
+
let orange = require('orange-orm');
|
|
395
|
+
let {inspect} = require('util');
|
|
396
|
+
|
|
397
|
+
let Order = orange.table('_order');
|
|
398
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
399
|
+
|
|
400
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
401
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
402
|
+
|
|
403
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
404
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
405
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
406
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
407
|
+
|
|
408
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
409
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
410
|
+
|
|
411
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
412
|
+
|
|
413
|
+
await db.transaction(async () => {
|
|
414
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
415
|
+
let dtos = await order.toDto();
|
|
416
|
+
console.log(inspect(dtos, false, 10));
|
|
417
|
+
});
|
|
418
|
+
```
|
|
419
|
+
<a name="_compositekeys"></a>
|
|
420
|
+
[composite keys](https://github.com/alfateam/rdb-demo/blob/master/compositeKeys.js)
|
|
421
|
+
```js
|
|
422
|
+
let orange = require('orange-orm');
|
|
423
|
+
|
|
424
|
+
let Order = orange.table('_compositeOrder');
|
|
425
|
+
let OrderLine = orange.table('_compositeOrderLine');
|
|
426
|
+
|
|
427
|
+
Order.primaryColumn('oCompanyId').numeric().as('companyId');
|
|
428
|
+
Order.primaryColumn('oOrderNo').numeric().as('orderNo');
|
|
429
|
+
|
|
430
|
+
OrderLine.primaryColumn('lCompanyId').numeric().as('companyId');
|
|
431
|
+
OrderLine.primaryColumn('lOrderNo').numeric().as('orderNo');
|
|
432
|
+
OrderLine.primaryColumn('lLineNo').numeric().as('lineNo');
|
|
433
|
+
OrderLine.column('lProduct').string().as('product');
|
|
434
|
+
|
|
435
|
+
let line_order_relation = OrderLine.join(Order).by('lCompanyId', 'lOrderNo').as('order');
|
|
436
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
437
|
+
|
|
438
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
439
|
+
|
|
440
|
+
await db.transaction(async () => {
|
|
441
|
+
let companyId = 1;
|
|
442
|
+
let orderId = 1001;
|
|
443
|
+
let order = await Order.getById(companyId, orderId);
|
|
444
|
+
console.log(await order.toDto());
|
|
445
|
+
});
|
|
446
|
+
```
|
|
447
|
+
<a name="_getbyideager"></a>
|
|
448
|
+
[getById eagerly](https://github.com/alfateam/rdb-demo/blob/master/getByIdEager.js)
|
|
449
|
+
```js
|
|
450
|
+
let orange = require('orange-orm');
|
|
451
|
+
let inspect = require('util').inspect;
|
|
452
|
+
|
|
453
|
+
let Customer = orange.table('_customer');
|
|
454
|
+
let Order = orange.table('_order');
|
|
455
|
+
|
|
456
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
457
|
+
Customer.column('cName').string().as('name');
|
|
458
|
+
|
|
459
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
460
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
461
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
462
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
463
|
+
|
|
464
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
465
|
+
|
|
466
|
+
await db.transaction(async () => {
|
|
467
|
+
let fetchingStrategy = { customer: null }; //alternatively: {customer : {}}
|
|
468
|
+
let order = await Order.getById('a0000000-a000-0000-0000-000000000000', fetchingStrategy);
|
|
469
|
+
console.log(await order.toDto());
|
|
470
|
+
let customer = await order.customer;
|
|
471
|
+
console.log(await customer.toDto());
|
|
472
|
+
});
|
|
473
|
+
```
|
|
474
|
+
<a name="_trygetfirsteager"></a>
|
|
475
|
+
[tryGetFirst eagerly](https://github.com/alfateam/rdb-demo/blob/master/tryGetFirstEager.js)
|
|
476
|
+
```js
|
|
477
|
+
let orange = require('orange-orm');
|
|
478
|
+
|
|
479
|
+
let Customer = orange.table('_customer');
|
|
480
|
+
let Order = orange.table('_order');
|
|
481
|
+
|
|
482
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
483
|
+
Customer.column('cName').string().as('name');
|
|
484
|
+
|
|
485
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
486
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
487
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
488
|
+
|
|
489
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
490
|
+
|
|
491
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
492
|
+
|
|
493
|
+
await db.transaction(async () => {
|
|
494
|
+
let filter = Order.customer.name.equal('John');
|
|
495
|
+
let strategy = { customer: null };
|
|
496
|
+
let order = await Order.tryGetFirst(filter, strategy);
|
|
497
|
+
if (order)
|
|
498
|
+
console.log(await order.toDto());
|
|
499
|
+
});
|
|
500
|
+
```
|
|
501
|
+
<a name="_todto"></a>
|
|
502
|
+
[toDto](https://github.com/alfateam/rdb-demo/blob/master/toDto.js)
|
|
503
|
+
```js
|
|
504
|
+
let orange = require('orange-orm');
|
|
505
|
+
|
|
506
|
+
let Order = orange.table('_order');
|
|
507
|
+
let Customer = orange.table('_customer');
|
|
508
|
+
let OrderLine = orange.table('_orderLine');
|
|
509
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
510
|
+
|
|
511
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
512
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
513
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
514
|
+
|
|
515
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
516
|
+
Customer.column('cName').string().as('name');
|
|
517
|
+
|
|
518
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
519
|
+
OrderLine.column('lOrderId').string().as('orderId');
|
|
520
|
+
OrderLine.column('lProduct').string().as('product');
|
|
521
|
+
|
|
522
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
523
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
524
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
525
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
526
|
+
|
|
527
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
528
|
+
|
|
529
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
530
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
531
|
+
|
|
532
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
533
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
537
|
+
|
|
538
|
+
await db.transaction(async () => {
|
|
539
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
540
|
+
let dto = await order.toDto( /*strategy*/ );
|
|
541
|
+
//default strategy, expand all hasOne and hasMany relations
|
|
542
|
+
console.log(dto);
|
|
543
|
+
});
|
|
544
|
+
```
|
|
545
|
+
<a name="_todtowithstrategy"></a>
|
|
546
|
+
[toDto with strategy](https://github.com/alfateam/rdb-demo/blob/master/toDtoWithStrategy.js)
|
|
547
|
+
```js
|
|
548
|
+
let orange = require('orange-orm');
|
|
549
|
+
|
|
550
|
+
let Order = orange.table('_order');
|
|
551
|
+
let Customer = orange.table('_customer');
|
|
552
|
+
let OrderLine = orange.table('_orderLine');
|
|
553
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
554
|
+
|
|
555
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
556
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
557
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
558
|
+
|
|
559
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
560
|
+
Customer.column('cName').string().as('name');
|
|
561
|
+
|
|
562
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
563
|
+
OrderLine.column('lOrderId').string().as('orderId');
|
|
564
|
+
OrderLine.column('lProduct').string().as('product');
|
|
565
|
+
|
|
566
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
567
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
568
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
569
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
570
|
+
|
|
571
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
572
|
+
|
|
573
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
574
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
575
|
+
|
|
576
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
577
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
581
|
+
|
|
582
|
+
await db.transaction(async () => {
|
|
583
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
584
|
+
let strategy = {customer : null, lines : null, deliveryAddress : null};
|
|
585
|
+
let dto = await order.toDto(strategy);
|
|
586
|
+
console.log(dto);
|
|
587
|
+
});
|
|
588
|
+
```
|
|
589
|
+
<a name="_todtowithorderby"></a>
|
|
590
|
+
[toDto with orderBy](https://github.com/alfateam/rdb-demo/blob/master/toDtoWithOrderBy.js)
|
|
591
|
+
```js
|
|
592
|
+
let orange = require('orange-orm');
|
|
593
|
+
|
|
594
|
+
let Order = orange.table('_order');
|
|
595
|
+
let Customer = orange.table('_customer');
|
|
596
|
+
let OrderLine = orange.table('_orderLine');
|
|
597
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
598
|
+
|
|
599
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
600
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
601
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
602
|
+
|
|
603
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
604
|
+
Customer.column('cName').string().as('name');
|
|
605
|
+
|
|
606
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
607
|
+
OrderLine.column('lOrderId').string().as('orderId');
|
|
608
|
+
OrderLine.column('lProduct').string().as('product');
|
|
609
|
+
|
|
610
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
611
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
612
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
613
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
614
|
+
|
|
615
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
616
|
+
|
|
617
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
618
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
619
|
+
|
|
620
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
621
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
622
|
+
|
|
623
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
624
|
+
|
|
625
|
+
await db.transaction(async () => {
|
|
626
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
627
|
+
let strategy = {
|
|
628
|
+
lines: {
|
|
629
|
+
orderBy: ['product']
|
|
630
|
+
//alternative: orderBy: ['product asc']
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
let dto = await order.toDto(strategy);
|
|
634
|
+
console.log(dto);
|
|
635
|
+
});
|
|
636
|
+
```
|
|
637
|
+
<a name="_todtowithorderbydesc"></a>
|
|
638
|
+
[toDto with orderBy descending](https://github.com/alfateam/rdb-demo/blob/master/toDtoWithOrderByDesc.js)
|
|
639
|
+
```js
|
|
640
|
+
let orange = require('orange-orm');
|
|
641
|
+
|
|
642
|
+
let Order = orange.table('_order');
|
|
643
|
+
let Customer = orange.table('_customer');
|
|
644
|
+
let OrderLine = orange.table('_orderLine');
|
|
645
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
646
|
+
|
|
647
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
648
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
649
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
650
|
+
|
|
651
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
652
|
+
Customer.column('cName').string().as('name');
|
|
653
|
+
|
|
654
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
655
|
+
OrderLine.column('lOrderId').string().as('orderId');
|
|
656
|
+
OrderLine.column('lProduct').string().as('product');
|
|
657
|
+
|
|
658
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
659
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
660
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
661
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
662
|
+
|
|
663
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
664
|
+
|
|
665
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
666
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
667
|
+
|
|
668
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
669
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
670
|
+
|
|
671
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
672
|
+
|
|
673
|
+
await db.transaction(async () => {
|
|
674
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
675
|
+
let strategy = {
|
|
676
|
+
lines: {
|
|
677
|
+
orderBy: ['product desc']
|
|
678
|
+
}
|
|
679
|
+
};
|
|
680
|
+
let dto = await order.toDto(strategy);
|
|
681
|
+
console.log(dto);
|
|
682
|
+
});
|
|
683
|
+
```
|
|
684
|
+
<a name="_serializable"></a>
|
|
685
|
+
[toDto ignoring columns](https://github.com/alfateam/rdb-demo/blob/master/serializable.js)
|
|
686
|
+
```js
|
|
687
|
+
let orange = require('orange-orm');
|
|
688
|
+
|
|
689
|
+
let User = orange.table('_user');
|
|
690
|
+
User.primaryColumn('uId').guid().as('id');
|
|
691
|
+
User.column('uUserId').string().as('userId');
|
|
692
|
+
User.column('uPassword').string().as('password').serializable(false);
|
|
693
|
+
User.column('uEmail').string().as('email');
|
|
694
|
+
|
|
695
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
696
|
+
|
|
697
|
+
await db.transaction(async () => {
|
|
698
|
+
let user = await User.getById('87654400-0000-0000-0000-000000000000');
|
|
699
|
+
console.log(await user.toDto());
|
|
700
|
+
//will print all properties except password
|
|
701
|
+
//because it is not serializable
|
|
702
|
+
});
|
|
703
|
+
```
|
|
704
|
+
<a name="_tojson"></a>
|
|
705
|
+
[toJSON](https://github.com/alfateam/rdb-demo/blob/master/toJSON.js)
|
|
706
|
+
```js
|
|
707
|
+
let orange = require('orange-orm');
|
|
708
|
+
|
|
709
|
+
let Order = orange.table('_order');
|
|
710
|
+
let Customer = orange.table('_customer');
|
|
711
|
+
let OrderLine = orange.table('_orderLine');
|
|
712
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
713
|
+
|
|
714
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
715
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
716
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
717
|
+
|
|
718
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
719
|
+
Customer.column('cName').string().as('name');
|
|
720
|
+
|
|
721
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
722
|
+
OrderLine.column('lOrderId').string().as('orderId');
|
|
723
|
+
OrderLine.column('lProduct').string().as('product');
|
|
724
|
+
|
|
725
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
726
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
727
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
728
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
729
|
+
|
|
730
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
731
|
+
|
|
732
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
733
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
734
|
+
|
|
735
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
736
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
737
|
+
|
|
738
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
739
|
+
|
|
740
|
+
await db.transaction(async () => {
|
|
741
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
742
|
+
let json = await order.toJSON( /*strategy*/ );
|
|
743
|
+
//default strategy, expand all hasOne and hasMany relations
|
|
744
|
+
console.log(json);
|
|
745
|
+
});
|
|
746
|
+
```
|
|
747
|
+
<a name="_tojsonwithstrategy"></a>
|
|
748
|
+
[toJSON with strategy](https://github.com/alfateam/rdb-demo/blob/master/toJSONWithStrategy.js)
|
|
749
|
+
```js
|
|
750
|
+
let orange = require('orange-orm');
|
|
751
|
+
|
|
752
|
+
let Order = orange.table('_order');
|
|
753
|
+
let Customer = orange.table('_customer');
|
|
754
|
+
let OrderLine = orange.table('_orderLine');
|
|
755
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
756
|
+
|
|
757
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
758
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
759
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
760
|
+
|
|
761
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
762
|
+
Customer.column('cName').string().as('name');
|
|
763
|
+
|
|
764
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
765
|
+
OrderLine.column('lOrderId').string().as('orderId');
|
|
766
|
+
OrderLine.column('lProduct').string().as('product');
|
|
767
|
+
|
|
768
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
769
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
770
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
771
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
772
|
+
|
|
773
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
774
|
+
|
|
775
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
776
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
777
|
+
|
|
778
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
779
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
780
|
+
|
|
781
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
782
|
+
|
|
783
|
+
await db.transaction(async () => {
|
|
784
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
785
|
+
let strategy = {customer : null, lines : null, deliveryAddress : null};
|
|
786
|
+
console.log(await order.toJSON(strategy));
|
|
787
|
+
});
|
|
788
|
+
```
|
|
789
|
+
<a name="_getmany"></a>
|
|
790
|
+
[getMany](https://github.com/alfateam/rdb-demo/blob/master/getMany.js)
|
|
791
|
+
```js
|
|
792
|
+
let orange = require('orange-orm');
|
|
793
|
+
|
|
794
|
+
let Customer = orange.table('_customer');
|
|
795
|
+
|
|
796
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
797
|
+
Customer.column('cName').string().as('name');
|
|
798
|
+
|
|
799
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
800
|
+
|
|
801
|
+
await db.transaction(async () => {
|
|
802
|
+
let customers = await Customer.getMany();
|
|
803
|
+
let dtos = await customers.toDto();
|
|
804
|
+
console.log(dtos);
|
|
805
|
+
});
|
|
806
|
+
```
|
|
807
|
+
<a name="_getmanydto"></a>
|
|
808
|
+
[getManyDto](https://github.com/alfateam/rdb-demo/blob/master/getManyDto.js)
|
|
809
|
+
```js
|
|
810
|
+
let orange = require('orange-orm');
|
|
811
|
+
|
|
812
|
+
let Customer = orange.table('_customer');
|
|
813
|
+
|
|
814
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
815
|
+
Customer.column('cName').string().as('name');
|
|
816
|
+
|
|
817
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
818
|
+
|
|
819
|
+
await db.transaction(async () => {
|
|
820
|
+
console.log(await Customer.getManyDto());
|
|
821
|
+
});
|
|
822
|
+
```
|
|
823
|
+
<a name="_getmanylazy"></a>
|
|
824
|
+
[getMany lazily](https://github.com/alfateam/rdb-demo/blob/master/getManyLazy.js)
|
|
825
|
+
```js
|
|
826
|
+
let orange = require('orange-orm');
|
|
827
|
+
let inspect = require('util').inspect;
|
|
828
|
+
|
|
829
|
+
let Order = orange.table('_order');
|
|
830
|
+
let OrderLine = orange.table('_orderLine');
|
|
831
|
+
|
|
832
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
833
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
834
|
+
|
|
835
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
836
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
837
|
+
OrderLine.column('lProduct').string().as('product');
|
|
838
|
+
|
|
839
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
840
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
841
|
+
|
|
842
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
843
|
+
|
|
844
|
+
await db.transaction(async () => {
|
|
845
|
+
let orders = await Order.getMany();
|
|
846
|
+
let dtos = await orders.toDto();
|
|
847
|
+
console.log(inspect(dtos, false, 10));
|
|
848
|
+
});
|
|
849
|
+
```
|
|
850
|
+
<a name="_getmanyeager"></a>
|
|
851
|
+
[getMany eager](https://github.com/alfateam/rdb-demo/blob/master/getManyEager.js)
|
|
852
|
+
```js
|
|
853
|
+
let inspect = require('util').inspect;
|
|
854
|
+
let orange = require('orange-orm');
|
|
855
|
+
|
|
856
|
+
let Order = orange.table('_order');
|
|
857
|
+
let OrderLine = orange.table('_orderLine');
|
|
858
|
+
|
|
859
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
860
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
861
|
+
|
|
862
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
863
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
864
|
+
OrderLine.column('lProduct').string().as('product');
|
|
865
|
+
|
|
866
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
867
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
868
|
+
|
|
869
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
870
|
+
|
|
871
|
+
await db.transaction(async () => {
|
|
872
|
+
let emptyFilter;
|
|
873
|
+
let strategy = {
|
|
874
|
+
lines: null
|
|
875
|
+
};
|
|
876
|
+
let orders = await Order.getMany(emptyFilter, strategy);
|
|
877
|
+
let dtos = await orders.toDto();
|
|
878
|
+
console.log(inspect(dtos, false, 10));
|
|
879
|
+
});
|
|
880
|
+
```
|
|
881
|
+
<a name="_getmanydtoeager"></a>
|
|
882
|
+
[getManyDto eager](https://github.com/alfateam/rdb-demo/blob/master/getManyDtoEager.js)
|
|
883
|
+
```js
|
|
884
|
+
let orange = require('orange-orm');
|
|
885
|
+
let inspect = require('util').inspect;
|
|
886
|
+
|
|
887
|
+
let Order = orange.table('_order');
|
|
888
|
+
let OrderLine = orange.table('_orderLine');
|
|
889
|
+
|
|
890
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
891
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
892
|
+
|
|
893
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
894
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
895
|
+
OrderLine.column('lProduct').string().as('product');
|
|
896
|
+
|
|
897
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
898
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
899
|
+
|
|
900
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
901
|
+
|
|
902
|
+
await db.transaction(async () => {
|
|
903
|
+
let emptyFilter;
|
|
904
|
+
let strategy = {lines : null};
|
|
905
|
+
let orders = await Order.getManyDto(emptyFilter, strategy);
|
|
906
|
+
console.log(inspect(orders, false, 10));
|
|
907
|
+
});
|
|
908
|
+
```
|
|
909
|
+
<a name="_limit"></a>
|
|
910
|
+
[limit and offset](https://github.com/alfateam/rdb-demo/blob/master/limit.js)
|
|
911
|
+
```js
|
|
912
|
+
let orange = require('orange-orm');
|
|
913
|
+
let Customer = orange.table('_customer');
|
|
914
|
+
|
|
915
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
916
|
+
Customer.column('cName').string().as('name');
|
|
917
|
+
|
|
918
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
919
|
+
|
|
920
|
+
await db.transaction(async () => {
|
|
921
|
+
let customers = await Customer.getMany(null, {limit: 2, offset: 1});
|
|
922
|
+
let dtos = await customers.toDto();
|
|
923
|
+
console.log(dtos);
|
|
924
|
+
});
|
|
925
|
+
```
|
|
926
|
+
<a name="_getmanywithorderbyjsonb"></a>
|
|
927
|
+
[getMany with orderBy jsonb](https://github.com/alfateam/rdb-demo/blob/master/getManyWithOrderByJsonb.js)
|
|
928
|
+
```js
|
|
929
|
+
let orange = require('orange-orm');
|
|
930
|
+
|
|
931
|
+
let Order = orange.table('_jOrder');
|
|
932
|
+
|
|
933
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
934
|
+
Order.column('oData').json().as('data');
|
|
935
|
+
|
|
936
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
937
|
+
|
|
938
|
+
await db.transaction(async () => {
|
|
939
|
+
let strategy = {
|
|
940
|
+
orderBy: ['data->\'orderNo\'']
|
|
941
|
+
//alternative: orderBy: ['data->>\'orderId\' asc']
|
|
942
|
+
};
|
|
943
|
+
let orders = await Order.getMany(null, strategy);
|
|
944
|
+
let dtos = await orders.toDto();
|
|
945
|
+
console.log(dtos);
|
|
946
|
+
});
|
|
947
|
+
```
|
|
948
|
+
<a name="_getmanywithorderbyjsonbdesc"></a>
|
|
949
|
+
[getMany with orderBy jsonb descending](https://github.com/alfateam/rdb-demo/blob/master/getManyWithOrderByJsonb.js)
|
|
950
|
+
```js
|
|
951
|
+
let orange = require('orange-orm');
|
|
952
|
+
|
|
953
|
+
let Order = orange.table('_jOrder');
|
|
954
|
+
|
|
955
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
956
|
+
Order.column('oData').json().as('data');
|
|
957
|
+
|
|
958
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
959
|
+
|
|
960
|
+
await db.transaction(async () => {
|
|
961
|
+
let strategy = {
|
|
962
|
+
orderBy: ['data->\'orderNo\' desc']
|
|
963
|
+
};
|
|
964
|
+
let orders = await Order.getMany(null, strategy);
|
|
965
|
+
let dtos = await orders.toDto();
|
|
966
|
+
console.log(dtos);
|
|
967
|
+
});
|
|
968
|
+
```
|
|
969
|
+
<a name="_manytodto"></a>
|
|
970
|
+
[(many)ToDto](https://github.com/alfateam/rdb-demo/blob/master/manyToDto.js)
|
|
971
|
+
```js
|
|
972
|
+
let orange = require('orange-orm');
|
|
973
|
+
let inspect = require('util').inspect;
|
|
974
|
+
|
|
975
|
+
let Order = orange.table('_order');
|
|
976
|
+
let Customer = orange.table('_customer');
|
|
977
|
+
let OrderLine = orange.table('_orderLine');
|
|
978
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
979
|
+
|
|
980
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
981
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
982
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
983
|
+
|
|
984
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
985
|
+
Customer.column('cName').string().as('name');
|
|
986
|
+
|
|
987
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
988
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
989
|
+
OrderLine.column('lProduct').string().as('product');
|
|
990
|
+
|
|
991
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
992
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
993
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
994
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
995
|
+
|
|
996
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
997
|
+
|
|
998
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
999
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1000
|
+
|
|
1001
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
1002
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
1003
|
+
|
|
1004
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1005
|
+
|
|
1006
|
+
await db.transaction(async () => {
|
|
1007
|
+
let orders = await Order.getMany();
|
|
1008
|
+
let dtos = await orders.toDto( /*strategy*/ );
|
|
1009
|
+
//default strategy, expand all hasOne and hasMany relations
|
|
1010
|
+
console.log(inspect(dtos, false, 10));
|
|
1011
|
+
});
|
|
1012
|
+
```
|
|
1013
|
+
<a name="_manytodtowithstrategy"></a>
|
|
1014
|
+
[(many)ToDto with strategy](https://github.com/alfateam/rdb-demo/blob/master/manyToDtoWithStrategy.js)
|
|
1015
|
+
```js
|
|
1016
|
+
let inspect = require('util').inspect;
|
|
1017
|
+
let orange = require('orange-orm');
|
|
1018
|
+
|
|
1019
|
+
let Order = orange.table('_order');
|
|
1020
|
+
let Customer = orange.table('_customer');
|
|
1021
|
+
let OrderLine = orange.table('_orderLine');
|
|
1022
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
1023
|
+
|
|
1024
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1025
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1026
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
1027
|
+
|
|
1028
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1029
|
+
Customer.column('cName').string().as('name');
|
|
1030
|
+
|
|
1031
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1032
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1033
|
+
OrderLine.column('lProduct').string().as('product');
|
|
1034
|
+
|
|
1035
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
1036
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
1037
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
1038
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
1039
|
+
|
|
1040
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
1041
|
+
|
|
1042
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1043
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1044
|
+
|
|
1045
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
1046
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
1047
|
+
|
|
1048
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1049
|
+
|
|
1050
|
+
await db.transaction(async () => {
|
|
1051
|
+
let orders = await Order.getMany();
|
|
1052
|
+
let strategy = { customer: null, lines: null, deliveryAddress: null };
|
|
1053
|
+
let dtos = await orders.toDto(strategy);
|
|
1054
|
+
console.log(inspect(dtos, false, 10));
|
|
1055
|
+
});
|
|
1056
|
+
```
|
|
1057
|
+
<a name="_manytojson"></a>
|
|
1058
|
+
[(many)ToJSON](https://github.com/alfateam/rdb-demo/blob/master/manyToJSON.js)
|
|
1059
|
+
```js
|
|
1060
|
+
let orange = require('orange-orm');
|
|
1061
|
+
|
|
1062
|
+
let Order = orange.table('_order');
|
|
1063
|
+
let Customer = orange.table('_customer');
|
|
1064
|
+
let OrderLine = orange.table('_orderLine');
|
|
1065
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
1066
|
+
|
|
1067
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1068
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1069
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
1070
|
+
|
|
1071
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1072
|
+
Customer.column('cName').string().as('name');
|
|
1073
|
+
|
|
1074
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1075
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1076
|
+
OrderLine.column('lProduct').string().as('product');
|
|
1077
|
+
|
|
1078
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
1079
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
1080
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
1081
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
1082
|
+
|
|
1083
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
1084
|
+
|
|
1085
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1086
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1087
|
+
|
|
1088
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
1089
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
1090
|
+
|
|
1091
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1092
|
+
|
|
1093
|
+
await db.transaction(async () => {
|
|
1094
|
+
let orders = await Order.getMany();
|
|
1095
|
+
console.log(await orders.toJSON( /*strategy*/ ));
|
|
1096
|
+
//default strategy, expand all hasOne and hasMany relations
|
|
1097
|
+
});
|
|
1098
|
+
```
|
|
1099
|
+
<a name="_manytojsonwithstrategy"></a>
|
|
1100
|
+
[(many)ToJSON with strategy](https://github.com/alfateam/rdb-demo/blob/master/manyToJSONWithStrategy.js)
|
|
1101
|
+
```js
|
|
1102
|
+
let orange = require('orange-orm');
|
|
1103
|
+
|
|
1104
|
+
let Order = orange.table('_order');
|
|
1105
|
+
let Customer = orange.table('_customer');
|
|
1106
|
+
let OrderLine = orange.table('_orderLine');
|
|
1107
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
1108
|
+
|
|
1109
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1110
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1111
|
+
Order.column('oCustomerId').string().as('customerId');
|
|
1112
|
+
|
|
1113
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1114
|
+
Customer.column('cName').string().as('name');
|
|
1115
|
+
|
|
1116
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1117
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1118
|
+
OrderLine.column('lProduct').string().as('product');
|
|
1119
|
+
|
|
1120
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
1121
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
1122
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
1123
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
1124
|
+
|
|
1125
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
1126
|
+
|
|
1127
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1128
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1129
|
+
|
|
1130
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
1131
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
1132
|
+
|
|
1133
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1134
|
+
|
|
1135
|
+
await db.transaction(async () => {
|
|
1136
|
+
let orders = await Order.getMany();
|
|
1137
|
+
let strategy = {customer : null, lines : null, deliveryAddress : null};
|
|
1138
|
+
console.log(await orders.toJSON(strategy));
|
|
1139
|
+
});
|
|
1140
|
+
```
|
|
1141
|
+
<a name="_rawsqlquery"></a>
|
|
1142
|
+
[Raw SQL Query](https://github.com/alfateam/rdb-demo/blob/master/rawSqlQuery.js)
|
|
1143
|
+
```js
|
|
1144
|
+
let orange = require('orange-orm');
|
|
1145
|
+
|
|
1146
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1147
|
+
|
|
1148
|
+
await db.transaction(async () => {
|
|
1149
|
+
let result = await orange.query('SELECT DISTINCT oCustomerId AS "customerId" FROM _order');
|
|
1150
|
+
console.log(result);
|
|
1151
|
+
});
|
|
1152
|
+
```
|
|
1153
|
+
<a name="_rawsqlquerywithparameters"></a>
|
|
1154
|
+
[Raw SQL Query With Parameters](https://github.com/alfateam/rdb-demo/blob/master/rawSqlQueryWithParameters.js)
|
|
1155
|
+
```js
|
|
1156
|
+
let orange = require('orange-orm');
|
|
1157
|
+
|
|
1158
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1159
|
+
|
|
1160
|
+
await db.transaction(async () => {
|
|
1161
|
+
let result = await orange.query({
|
|
1162
|
+
sql: 'SELECT oOrderNo AS "orderNo" FROM _order WHERE oOrderNo LIKE ?',
|
|
1163
|
+
parameters: ['%04']
|
|
1164
|
+
});
|
|
1165
|
+
console.log(result);
|
|
1166
|
+
});
|
|
1167
|
+
```
|
|
1168
|
+
<a name="_validate"></a>
|
|
1169
|
+
[Plain validator](https://github.com/alfateam/rdb-demo/blob/master/validate.js)
|
|
1170
|
+
```js
|
|
1171
|
+
let orange = require('orange-orm');
|
|
1172
|
+
|
|
1173
|
+
let Customer = orange.table('_customer');
|
|
1174
|
+
|
|
1175
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1176
|
+
Customer.column('cName').string().as('name').validate(validateName);
|
|
1177
|
+
|
|
1178
|
+
function validateName(value, row) {
|
|
1179
|
+
if (value && value.length > 10)
|
|
1180
|
+
throw new Error("Length cannot exceed 10 characters");
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1184
|
+
try {
|
|
1185
|
+
await resetDemo();
|
|
1186
|
+
await db.transaction(async () => {
|
|
1187
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1188
|
+
customer.name = 'Ringo Starr' //11 Chars. Will throw
|
|
1189
|
+
});
|
|
1190
|
+
} catch (e) {
|
|
1191
|
+
console.log(e.message);
|
|
1192
|
+
//Length cannot exceed 10 characters
|
|
1193
|
+
}
|
|
1194
|
+
```
|
|
1195
|
+
<a name="_jsonschema"></a>
|
|
1196
|
+
[JSON Schema](https://github.com/alfateam/rdb-demo/blob/master/jsonSchema.js)
|
|
1197
|
+
Using [ajv](https://www.npmjs.com/package/ajv)
|
|
1198
|
+
```js
|
|
1199
|
+
let orange = require('orange-orm');
|
|
1200
|
+
|
|
1201
|
+
let documentSchema = {
|
|
1202
|
+
"properties": {
|
|
1203
|
+
"foo": { "type": "number" },
|
|
1204
|
+
"bar": { "type": "number" }
|
|
1205
|
+
}
|
|
1206
|
+
};
|
|
1207
|
+
|
|
1208
|
+
let nameSchema = {
|
|
1209
|
+
type: "string",
|
|
1210
|
+
"maxLength": 20
|
|
1211
|
+
};
|
|
1212
|
+
|
|
1213
|
+
let Customer = orange.table('_customer');
|
|
1214
|
+
|
|
1215
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1216
|
+
Customer.column('cName').string().as('name').JSONSchema(nameSchema);
|
|
1217
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1218
|
+
Customer.column('cDocument').json().as('document').JSONSchema(documentSchema, {allErrors: true});
|
|
1219
|
+
|
|
1220
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1221
|
+
try {
|
|
1222
|
+
await resetDemo();
|
|
1223
|
+
await db.transaction(async () => {
|
|
1224
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1225
|
+
customer.name = 'Ringo Starr' //OK
|
|
1226
|
+
customer.document = {foo: 'not a number', bar: 'invalid'}; //violates schema
|
|
1227
|
+
});
|
|
1228
|
+
} catch (e) {
|
|
1229
|
+
console.log(e.stack);
|
|
1230
|
+
console.log(e.errors);
|
|
1231
|
+
// [ { keyword: 'type',
|
|
1232
|
+
// dataPath: '.foo',
|
|
1233
|
+
// schemaPath: '#/properties/foo/type',
|
|
1234
|
+
// params: { type: 'number' },
|
|
1235
|
+
// message: 'should be number' },
|
|
1236
|
+
// { keyword: 'type',
|
|
1237
|
+
// dataPath: '.bar',
|
|
1238
|
+
// schemaPath: '#/properties/bar/type',
|
|
1239
|
+
// params: { type: 'number' },
|
|
1240
|
+
// message: 'should be number' } ]
|
|
1241
|
+
}
|
|
1242
|
+
```
|
|
1243
|
+
<a name="_streameager"></a>
|
|
1244
|
+
[streaming rows](https://github.com/alfateam/rdb-demo/blob/master/streamEager.js)
|
|
1245
|
+
```js
|
|
1246
|
+
let orange = require('orange-orm');
|
|
1247
|
+
|
|
1248
|
+
let Order = orange.table('_order');
|
|
1249
|
+
let OrderLine = orange.table('_orderLine');
|
|
1250
|
+
|
|
1251
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1252
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1253
|
+
|
|
1254
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1255
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1256
|
+
OrderLine.column('lProduct').string().as('product');
|
|
1257
|
+
|
|
1258
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1259
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1260
|
+
|
|
1261
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1262
|
+
|
|
1263
|
+
let emptyFilter;
|
|
1264
|
+
let strategy = {
|
|
1265
|
+
lines: {
|
|
1266
|
+
orderBy: ['product']
|
|
1267
|
+
},
|
|
1268
|
+
orderBy: ['orderNo'],
|
|
1269
|
+
limit: 5,
|
|
1270
|
+
};
|
|
1271
|
+
|
|
1272
|
+
await Order.createReadStream(db, emptyFilter, strategy).on('data', printOrder);
|
|
1273
|
+
|
|
1274
|
+
function printOrder(order) {
|
|
1275
|
+
let format = 'Order Id: %s, Order No: %s';
|
|
1276
|
+
console.log(format, order.id, order.orderNo);
|
|
1277
|
+
order.lines.forEach(printLine);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
function printLine(line) {
|
|
1281
|
+
let format = 'Line Id: %s, Order Id: %s, Product: %s';
|
|
1282
|
+
console.log(format, line.id, line.orderId, line.product);
|
|
1283
|
+
}
|
|
1284
|
+
```
|
|
1285
|
+
<a name="_streamjsoneager"></a>
|
|
1286
|
+
[streaming json](https://github.com/alfateam/rdb-demo/blob/master/streamJSONEager.js)
|
|
1287
|
+
```js
|
|
1288
|
+
let orange = require('orange-orm');
|
|
1289
|
+
|
|
1290
|
+
let Order = orange.table('_order');
|
|
1291
|
+
let OrderLine = orange.table('_orderLine');
|
|
1292
|
+
|
|
1293
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1294
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1295
|
+
|
|
1296
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1297
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1298
|
+
OrderLine.column('lProduct').string().as('product');
|
|
1299
|
+
|
|
1300
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1301
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1302
|
+
|
|
1303
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1304
|
+
|
|
1305
|
+
let emptyFilter;
|
|
1306
|
+
let strategy = {
|
|
1307
|
+
lines: {
|
|
1308
|
+
orderBy: ['product']
|
|
1309
|
+
},
|
|
1310
|
+
orderBy: ['orderNo'],
|
|
1311
|
+
limit: 5,
|
|
1312
|
+
};
|
|
1313
|
+
|
|
1314
|
+
await Order.createJSONReadStream(db, emptyFilter, strategy).pipe(process.stdout);
|
|
1315
|
+
```
|
|
1316
|
+
<a name="_update"></a>
|
|
1317
|
+
[update](https://github.com/alfateam/rdb-demo/blob/master/update.js)
|
|
1318
|
+
```js
|
|
1319
|
+
let orange = require('orange-orm');
|
|
1320
|
+
|
|
1321
|
+
let Customer = orange.table('_customer');
|
|
1322
|
+
|
|
1323
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1324
|
+
Customer.column('cName').string().as('name');
|
|
1325
|
+
|
|
1326
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1327
|
+
|
|
1328
|
+
await db.transaction(async () => {
|
|
1329
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1330
|
+
customer.name = 'Ringo';
|
|
1331
|
+
customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1332
|
+
console.log(customer.name)
|
|
1333
|
+
});
|
|
1334
|
+
```
|
|
1335
|
+
<a name="_insert"></a>
|
|
1336
|
+
[insert](https://github.com/alfateam/rdb-demo/blob/master/insert.js)
|
|
1337
|
+
```js
|
|
1338
|
+
let orange = require('orange-orm');
|
|
1339
|
+
|
|
1340
|
+
let Customer = orange.table('_customer');
|
|
1341
|
+
|
|
1342
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1343
|
+
Customer.column('cName').string().as('name');
|
|
1344
|
+
|
|
1345
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1346
|
+
|
|
1347
|
+
await db.transaction(async () => {
|
|
1348
|
+
let id = 'abcdef00-0000-0000-0000-000000000000'
|
|
1349
|
+
let customer = Customer.insert(id)
|
|
1350
|
+
customer.name = 'Paul';
|
|
1351
|
+
customer = await Customer.getById(id);
|
|
1352
|
+
console.log(customer.name)
|
|
1353
|
+
});
|
|
1354
|
+
```
|
|
1355
|
+
<a name="_insertAndForget"></a>
|
|
1356
|
+
[insertAndForget](https://github.com/alfateam/rdb-demo/blob/master/insertAndForget.js)
|
|
1357
|
+
If you don't have SELECT access, you want this instead of regular insert.
|
|
1358
|
+
```js
|
|
1359
|
+
let orange = require('orange-orm');
|
|
1360
|
+
|
|
1361
|
+
let Customer = orange.table('_customer');
|
|
1362
|
+
|
|
1363
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1364
|
+
Customer.column('cName').string().as('name');
|
|
1365
|
+
|
|
1366
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1367
|
+
|
|
1368
|
+
await db.transaction(async () => {
|
|
1369
|
+
let id = 'abcdef00-0000-0000-0000-000000000000'
|
|
1370
|
+
await Customer.insertAndForget({id, name: 'Paul'}); //returns empty promise
|
|
1371
|
+
});
|
|
1372
|
+
```
|
|
1373
|
+
<a name="_delete"></a>
|
|
1374
|
+
[delete](https://github.com/alfateam/rdb-demo/blob/master/delete.js)
|
|
1375
|
+
```js
|
|
1376
|
+
let orange = require('orange-orm');
|
|
1377
|
+
|
|
1378
|
+
let Customer = orange.table('_customer');
|
|
1379
|
+
|
|
1380
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1381
|
+
Customer.column('cName').string().as('name');
|
|
1382
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1383
|
+
Customer.column('cRegdate').date().as('registeredDate');
|
|
1384
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
1385
|
+
Customer.column('cPicture').binary().as('picture');
|
|
1386
|
+
|
|
1387
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1388
|
+
|
|
1389
|
+
await db.transaction(async () => {
|
|
1390
|
+
let customer = await Customer.getById('87654321-0000-0000-0000-000000000000');
|
|
1391
|
+
await customer.delete();
|
|
1392
|
+
});
|
|
1393
|
+
```
|
|
1394
|
+
<a name="_cascadedelete"></a>
|
|
1395
|
+
[cascadeDelete](https://github.com/alfateam/rdb-demo/blob/master/cascadeDelete.js)
|
|
1396
|
+
```js
|
|
1397
|
+
let orange = require('orange-orm');
|
|
1398
|
+
|
|
1399
|
+
let Customer = orange.table('_customer');
|
|
1400
|
+
let Order = orange.table('_order');
|
|
1401
|
+
let OrderLine = orange.table('_orderLine');
|
|
1402
|
+
|
|
1403
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1404
|
+
Customer.column('cName').string().as('name');
|
|
1405
|
+
|
|
1406
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1407
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1408
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
1409
|
+
|
|
1410
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1411
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1412
|
+
|
|
1413
|
+
let orderToCustomer = Order.join(Customer).by('oCustomerId').as('customer');
|
|
1414
|
+
Customer.hasMany(orderToCustomer).as('orders');
|
|
1415
|
+
|
|
1416
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1417
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1418
|
+
|
|
1419
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1420
|
+
|
|
1421
|
+
await db.transaction(async () => {
|
|
1422
|
+
let customer = await Customer.getById('87654399-0000-0000-0000-000000000000');
|
|
1423
|
+
await customer.cascadeDelete();
|
|
1424
|
+
});
|
|
1425
|
+
```
|
|
1426
|
+
<a name="_bulkdelete"></a>
|
|
1427
|
+
[bulk delete](https://github.com/alfateam/rdb-demo/blob/master/bulkDelete.js)
|
|
1428
|
+
```js
|
|
1429
|
+
let orange = require('orange-orm');
|
|
1430
|
+
|
|
1431
|
+
let Customer = orange.table('_customer');
|
|
1432
|
+
|
|
1433
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1434
|
+
Customer.column('cName').string().as('name');
|
|
1435
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1436
|
+
Customer.column('cRegdate').date().as('registeredDate');
|
|
1437
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
1438
|
+
Customer.column('cPicture').binary().as('picture');
|
|
1439
|
+
|
|
1440
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1441
|
+
|
|
1442
|
+
await db.transaction(async () => {
|
|
1443
|
+
let filter = Customer.id.eq('87654321-0000-0000-0000-000000000000');
|
|
1444
|
+
await Customer.delete(filter);
|
|
1445
|
+
});
|
|
1446
|
+
```
|
|
1447
|
+
<a name="_cascadedelete"></a>
|
|
1448
|
+
[bulk cascadeDelete](https://github.com/alfateam/rdb-demo/blob/master/bulkCascadeDelete.js)
|
|
1449
|
+
```js
|
|
1450
|
+
let orange = require('orange-orm');
|
|
1451
|
+
|
|
1452
|
+
let Customer = orange.table('_customer');
|
|
1453
|
+
let Order = orange.table('_order');
|
|
1454
|
+
let OrderLine = orange.table('_orderLine');
|
|
1455
|
+
|
|
1456
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1457
|
+
Customer.column('cName').string().as('name');
|
|
1458
|
+
|
|
1459
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1460
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1461
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
1462
|
+
|
|
1463
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1464
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1465
|
+
|
|
1466
|
+
let orderToCustomer = Order.join(Customer).by('oCustomerId').as('customer');
|
|
1467
|
+
Customer.hasMany(orderToCustomer).as('orders');
|
|
1468
|
+
|
|
1469
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1470
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1471
|
+
|
|
1472
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1473
|
+
|
|
1474
|
+
await db.transaction(async () => {
|
|
1475
|
+
let filter = Customer.id.eq('87654399-0000-0000-0000-000000000000');
|
|
1476
|
+
await Customer.cascadeDelete(filter);
|
|
1477
|
+
});
|
|
1478
|
+
```
|
|
1479
|
+
<a name="_defaultvalues"></a>
|
|
1480
|
+
[default values](https://github.com/alfateam/rdb-demo/blob/master/defaultValues.js)
|
|
1481
|
+
```js
|
|
1482
|
+
let orange = require('orange-orm');
|
|
1483
|
+
|
|
1484
|
+
let buf = Buffer.alloc(10);
|
|
1485
|
+
buf.write('\u00bd + \u00bc = \u00be', 0);
|
|
1486
|
+
|
|
1487
|
+
let Customer = orange.table('_customer');
|
|
1488
|
+
|
|
1489
|
+
/*unless overridden, numeric is default 0,
|
|
1490
|
+
string is default null,
|
|
1491
|
+
guid is default null,
|
|
1492
|
+
date is default null,
|
|
1493
|
+
binary is default null,
|
|
1494
|
+
boolean is default false,
|
|
1495
|
+
json is default null
|
|
1496
|
+
*/
|
|
1497
|
+
|
|
1498
|
+
Customer.primaryColumn('cId').guid().as('id').default(null);
|
|
1499
|
+
Customer.column('cName').string().as('name').default('default name');
|
|
1500
|
+
Customer.column('cBalance').numeric().as('balance').default(2000);
|
|
1501
|
+
Customer.column('cRegdate').date().as('registeredDate').default(() => new Date());
|
|
1502
|
+
Customer.column('cIsActive').boolean().as('isActive').default(true);
|
|
1503
|
+
Customer.column('cPicture').binary().as('picture').default(buf);
|
|
1504
|
+
Customer.column('cDocument').json().as('document').default({foo: true});
|
|
1505
|
+
|
|
1506
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1507
|
+
|
|
1508
|
+
await db.transaction(async () => {
|
|
1509
|
+
let customer = Customer.insert('abcdef02-0000-0000-0000-000000000000')
|
|
1510
|
+
console.log(await customer.toDto());
|
|
1511
|
+
});
|
|
1512
|
+
```
|
|
1513
|
+
<a name="_conventions"></a>
|
|
1514
|
+
[conventions](https://github.com/alfateam/rdb-demo/blob/master/conventions.js)
|
|
1515
|
+
```js
|
|
1516
|
+
let orange = require('orange-orm');
|
|
1517
|
+
|
|
1518
|
+
let Customer = orange.table('_customer');
|
|
1519
|
+
|
|
1520
|
+
Customer.primaryColumn('cId').guid(); //property name will also be cId
|
|
1521
|
+
Customer.column('cName').string(); //property name will also be cName
|
|
1522
|
+
|
|
1523
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1524
|
+
|
|
1525
|
+
await db.transaction(async () => {
|
|
1526
|
+
let customer = Customer.insert('abcdef01-0000-0000-0000-000000000000')
|
|
1527
|
+
customer.cName = 'Paul';
|
|
1528
|
+
console.log(await customer.toDto());
|
|
1529
|
+
});
|
|
1530
|
+
```
|
|
1531
|
+
<a name="_updatejoin"></a>
|
|
1532
|
+
[update a join-relation](https://github.com/alfateam/rdb-demo/blob/master/updateJoin.js)
|
|
1533
|
+
```js
|
|
1534
|
+
let orange = require('orange-orm');
|
|
1535
|
+
|
|
1536
|
+
let Customer = orange.table('_customer');
|
|
1537
|
+
let Order = orange.table('_order');
|
|
1538
|
+
|
|
1539
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1540
|
+
Customer.column('cName').string().as('name');
|
|
1541
|
+
|
|
1542
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1543
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1544
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
1545
|
+
|
|
1546
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
1547
|
+
|
|
1548
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1549
|
+
|
|
1550
|
+
await db.transaction(async () => {
|
|
1551
|
+
let order = await Order.getById('b0000000-b000-0000-0000-000000000000');
|
|
1552
|
+
let yokoId = '12345678-0000-0000-0000-000000000000';
|
|
1553
|
+
order.customerId = yokoId;
|
|
1554
|
+
let customer = await order.customer;
|
|
1555
|
+
console.log(customer.name);
|
|
1556
|
+
});
|
|
1557
|
+
```
|
|
1558
|
+
<a name="_updatehasone"></a>
|
|
1559
|
+
[update a hasOne-relation](https://github.com/alfateam/rdb-demo/blob/master/updateHasOne.js)
|
|
1560
|
+
```js
|
|
1561
|
+
let orange = require('orange-orm');
|
|
1562
|
+
|
|
1563
|
+
let Order = orange.table('_order');
|
|
1564
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
1565
|
+
|
|
1566
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1567
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1568
|
+
|
|
1569
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
1570
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
1571
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
1572
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
1573
|
+
|
|
1574
|
+
let deliveryAddress_order_relation = DeliveryAddress.hasone(Order).by('dOrderId').as('order');
|
|
1575
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
1576
|
+
|
|
1577
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1578
|
+
|
|
1579
|
+
await db.transaction(async () => {
|
|
1580
|
+
let address = DeliveryAddress.insert('eeeeeeee-0000-0000-0000-000000000000');
|
|
1581
|
+
address.orderId = 'a0000000-a000-0000-0000-000000000000';
|
|
1582
|
+
address.name = 'Sgt. Pepper';
|
|
1583
|
+
address.street = 'L18 Penny Lane';
|
|
1584
|
+
let order = await address.order;
|
|
1585
|
+
console.log((await order.deliveryAddress).street);
|
|
1586
|
+
});
|
|
1587
|
+
```
|
|
1588
|
+
<a name="_updatehasmany"></a>
|
|
1589
|
+
[update a hasMany-relation](https://github.com/alfateam/rdb-demo/blob/master/updateHasMany.js)
|
|
1590
|
+
```js
|
|
1591
|
+
let orange = require('orange-orm');
|
|
1592
|
+
|
|
1593
|
+
let Order = orange.table('_order');
|
|
1594
|
+
let OrderLine = orange.table('_orderLine');
|
|
1595
|
+
|
|
1596
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
1597
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
1598
|
+
|
|
1599
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
1600
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
1601
|
+
OrderLine.column('lProduct').string().as('product');
|
|
1602
|
+
|
|
1603
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
1604
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
1605
|
+
|
|
1606
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1607
|
+
let orderIdWithNoLines = 'c0000000-c000-0000-0000-000000000000';
|
|
1608
|
+
|
|
1609
|
+
await db.transaction(async () => {
|
|
1610
|
+
let orderIdWithNoLines = 'c0000000-c000-0000-0000-000000000000';
|
|
1611
|
+
|
|
1612
|
+
let line = OrderLine.insert('eeeeeeee-0001-0000-0000-000000000000');
|
|
1613
|
+
line.orderId = orderIdWithNoLines;
|
|
1614
|
+
line.product = 'Roller blades';
|
|
1615
|
+
|
|
1616
|
+
let line2 = OrderLine.insert('eeeeeeee-0002-0000-0000-000000000000');
|
|
1617
|
+
line2.orderId = orderIdWithNoLines;
|
|
1618
|
+
line2.product = 'Helmet';
|
|
1619
|
+
|
|
1620
|
+
let order = await line.order;
|
|
1621
|
+
let lines = await order.lines;
|
|
1622
|
+
console.log('Number of lines: ' + lines.length);
|
|
1623
|
+
});
|
|
1624
|
+
```
|
|
1625
|
+
<a name="_rowlock"></a>
|
|
1626
|
+
[row lock](https://github.com/alfateam/rdb-demo/blob/master/exclusive.js)
|
|
1627
|
+
(not in sqlite)
|
|
1628
|
+
```js
|
|
1629
|
+
let orange = require('orange-orm');
|
|
1630
|
+
|
|
1631
|
+
let Customer = orange.table('_customer');
|
|
1632
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1633
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1634
|
+
|
|
1635
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1636
|
+
|
|
1637
|
+
await showBalance();
|
|
1638
|
+
await updateConcurrently();
|
|
1639
|
+
await showBalance();
|
|
1640
|
+
|
|
1641
|
+
function showBalance() {
|
|
1642
|
+
return db.transaction(async () => {
|
|
1643
|
+
let customer = await Customer.getById.exclusive('a0000000-0000-0000-0000-000000000000');
|
|
1644
|
+
console.log('Balance: ' + customer.balance);
|
|
1645
|
+
});
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
function updateConcurrently() {
|
|
1649
|
+
let concurrent1 = db.transaction(async () => {
|
|
1650
|
+
let customer = await Customer.getById.exclusive('a0000000-0000-0000-0000-000000000000');
|
|
1651
|
+
customer.balance += 100;
|
|
1652
|
+
});
|
|
1653
|
+
|
|
1654
|
+
let concurrent2 = db.transaction(async () => {
|
|
1655
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1656
|
+
customer.balance += 100;
|
|
1657
|
+
});
|
|
1658
|
+
|
|
1659
|
+
return Promise.all([concurrent1, concurrent2]);
|
|
1660
|
+
}
|
|
1661
|
+
```
|
|
1662
|
+
<a name="_transactionlock"></a>
|
|
1663
|
+
[transaction lock](https://github.com/alfateam/rdb-demo/blob/master/lock.js)
|
|
1664
|
+
(postgres only)
|
|
1665
|
+
```js
|
|
1666
|
+
let orange = require('orange-orm');
|
|
1667
|
+
|
|
1668
|
+
let Customer = orange.table('_customer');
|
|
1669
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1670
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1671
|
+
|
|
1672
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1673
|
+
|
|
1674
|
+
await showBalance();
|
|
1675
|
+
await updateConcurrently();
|
|
1676
|
+
await showBalance();
|
|
1677
|
+
|
|
1678
|
+
function showBalance() {
|
|
1679
|
+
return db.transaction(async () => {
|
|
1680
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1681
|
+
console.log('Balance: ' + customer.balance);
|
|
1682
|
+
});
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
function updateConcurrently() {
|
|
1686
|
+
let concurrent1 = db.transaction(async () => {
|
|
1687
|
+
await db.lock("12345");
|
|
1688
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1689
|
+
customer.balance += 100;
|
|
1690
|
+
});
|
|
1691
|
+
|
|
1692
|
+
let concurrent2 = db.transaction(async () => {
|
|
1693
|
+
await db.lock("12345");
|
|
1694
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1695
|
+
customer.balance += 100;
|
|
1696
|
+
});
|
|
1697
|
+
|
|
1698
|
+
return Promise.all([concurrent1, concurrent2]);
|
|
1699
|
+
}
|
|
1700
|
+
```
|
|
1701
|
+
<a name="_sessionlock"></a>
|
|
1702
|
+
[session lock](https://github.com/alfateam/rdb-demo/blob/master/sessionLock.js)
|
|
1703
|
+
(postgres only)
|
|
1704
|
+
The function will only be run when a lock has been acquired. The function is awaited for any return value, then lock is released. The function will then forward the return value from the supplied function.
|
|
1705
|
+
```js
|
|
1706
|
+
let orange = require('orange-orm');
|
|
1707
|
+
|
|
1708
|
+
let Customer = orange.table('_customer');
|
|
1709
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1710
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1711
|
+
|
|
1712
|
+
let db = orange('postgres://orange:orange@localhost/rdbdemo');
|
|
1713
|
+
|
|
1714
|
+
await showBalance();
|
|
1715
|
+
await updateConcurrently();
|
|
1716
|
+
await showBalance();
|
|
1717
|
+
|
|
1718
|
+
function showBalance() {
|
|
1719
|
+
return db.transaction(async () => {
|
|
1720
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1721
|
+
console.log('Balance: ' + customer.balance);
|
|
1722
|
+
});
|
|
1723
|
+
}
|
|
1724
|
+
|
|
1725
|
+
function updateConcurrently() {
|
|
1726
|
+
let concurrent1 = db.transaction(async () => {
|
|
1727
|
+
await db.lock("12345", runInLock);
|
|
1728
|
+
//lock released
|
|
1729
|
+
//do other stuff..
|
|
1730
|
+
});
|
|
1731
|
+
|
|
1732
|
+
let concurrent2 = db.transaction(async () => {
|
|
1733
|
+
await db.lock("12345", runInLock);
|
|
1734
|
+
//lock released
|
|
1735
|
+
//do other stuff..
|
|
1736
|
+
});
|
|
1737
|
+
|
|
1738
|
+
async function runInLock() {
|
|
1739
|
+
let customer = await Customer.getById('a0000000-0000-0000-0000-000000000000');
|
|
1740
|
+
customer.balance += 100;
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
return Promise.all([concurrent1, concurrent2]);
|
|
1744
|
+
}
|
|
1745
|
+
```
|
|
1746
|
+
<a name="_equal"></a>
|
|
1747
|
+
[equal](https://github.com/alfateam/rdb-demo/blob/master/filtering/equal.js)
|
|
1748
|
+
```js
|
|
1749
|
+
let orange = require('orange-orm');
|
|
1750
|
+
|
|
1751
|
+
let Customer = orange.table('_customer');
|
|
1752
|
+
|
|
1753
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1754
|
+
Customer.column('cName').string().as('name');
|
|
1755
|
+
|
|
1756
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1757
|
+
|
|
1758
|
+
await db.transaction(async () => {
|
|
1759
|
+
let filter = Customer.name.equal('John');
|
|
1760
|
+
//same as Customer.name.eq('John');
|
|
1761
|
+
let customers = await Customer.getMany(filter);
|
|
1762
|
+
console.log(await customers.toDto());
|
|
1763
|
+
});
|
|
1764
|
+
```
|
|
1765
|
+
<a name="_notequal"></a>
|
|
1766
|
+
[notEqual](https://github.com/alfateam/rdb-demo/blob/master/filtering/notEqual.js)
|
|
1767
|
+
```js
|
|
1768
|
+
let orange = require('orange-orm');
|
|
1769
|
+
|
|
1770
|
+
let Customer = orange.table('_customer');
|
|
1771
|
+
|
|
1772
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1773
|
+
Customer.column('cName').string().as('name');
|
|
1774
|
+
|
|
1775
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1776
|
+
|
|
1777
|
+
await db.transaction(async () => {
|
|
1778
|
+
let filter = Customer.name.notEqual('John');
|
|
1779
|
+
//same as Customer.name.ne('John');
|
|
1780
|
+
let customers = await Customer.getMany(filter);
|
|
1781
|
+
console.log(await customers.toDto());
|
|
1782
|
+
});
|
|
1783
|
+
```
|
|
1784
|
+
<a name="_not"></a>
|
|
1785
|
+
[not](https://github.com/alfateam/rdb-demo/blob/master/filtering/not.js)
|
|
1786
|
+
```js
|
|
1787
|
+
let orange = require('orange-orm');
|
|
1788
|
+
|
|
1789
|
+
let Customer = orange.table('_customer');
|
|
1790
|
+
|
|
1791
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1792
|
+
Customer.column('cName').string().as('name');
|
|
1793
|
+
|
|
1794
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1795
|
+
|
|
1796
|
+
await db.transaction(async () => {
|
|
1797
|
+
let filter = Customer.name.equal('John').not();
|
|
1798
|
+
let customers = await Customer.getMany(filter);
|
|
1799
|
+
console.log(await customers.toDto());
|
|
1800
|
+
});
|
|
1801
|
+
```
|
|
1802
|
+
<a name="_lessthan"></a>
|
|
1803
|
+
[lessThan](https://github.com/alfateam/rdb-demo/blob/master/filtering/lessThan.js)
|
|
1804
|
+
```js
|
|
1805
|
+
let orange = require('orange-orm');
|
|
1806
|
+
|
|
1807
|
+
let Customer = orange.table('_customer');
|
|
1808
|
+
|
|
1809
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1810
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1811
|
+
Customer.column('cName').string().as('name');
|
|
1812
|
+
|
|
1813
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1814
|
+
|
|
1815
|
+
await db.transaction(async () => {
|
|
1816
|
+
let filter = Customer.balance.lessThan(5000);
|
|
1817
|
+
//same as Customer.balance.lt(5000);
|
|
1818
|
+
let customers = await Customer.getMany(filter);
|
|
1819
|
+
console.log(await customers.toDto());
|
|
1820
|
+
});
|
|
1821
|
+
```
|
|
1822
|
+
<a name="_lessthanorequal"></a>
|
|
1823
|
+
[lessThanOrEqual](https://github.com/alfateam/rdb-demo/blob/master/filtering/lessThanOrEqual.js)
|
|
1824
|
+
```js
|
|
1825
|
+
let orange = require('orange-orm');
|
|
1826
|
+
|
|
1827
|
+
let Customer = orange.table('_customer');
|
|
1828
|
+
|
|
1829
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1830
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1831
|
+
Customer.column('cName').string().as('name');
|
|
1832
|
+
|
|
1833
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1834
|
+
|
|
1835
|
+
await db.transaction(async () => {
|
|
1836
|
+
let filter = Customer.balance.lessThanOrEqual(8123);
|
|
1837
|
+
//same as Customer.balance.le(8123);
|
|
1838
|
+
let customers = await Customer.getMany(filter);
|
|
1839
|
+
console.log(await customers.toDto());
|
|
1840
|
+
});
|
|
1841
|
+
```
|
|
1842
|
+
<a name="_greaterthan"></a>
|
|
1843
|
+
[greaterThan](https://github.com/alfateam/rdb-demo/blob/master/filtering/greaterThan.js)
|
|
1844
|
+
```js
|
|
1845
|
+
let orange = require('orange-orm');
|
|
1846
|
+
|
|
1847
|
+
let Customer = orange.table('_customer');
|
|
1848
|
+
|
|
1849
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1850
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1851
|
+
Customer.column('cName').string().as('name');
|
|
1852
|
+
|
|
1853
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1854
|
+
|
|
1855
|
+
await db.transaction(async () => {
|
|
1856
|
+
let filter = Customer.balance.greaterThan(5000);
|
|
1857
|
+
//same as Customer.balance.gt(5000);
|
|
1858
|
+
let customers = await Customer.getMany(filter);
|
|
1859
|
+
console.log(await customers.toDto());
|
|
1860
|
+
});
|
|
1861
|
+
```
|
|
1862
|
+
<a name="_greaterthanorequal"></a>
|
|
1863
|
+
[greaterThanOrEqual](https://github.com/alfateam/rdb-demo/blob/master/filtering/greaterThanOrEqual.js)
|
|
1864
|
+
```js
|
|
1865
|
+
let orange = require('orange-orm');
|
|
1866
|
+
|
|
1867
|
+
let Customer = orange.table('_customer');
|
|
1868
|
+
|
|
1869
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1870
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1871
|
+
Customer.column('cName').string().as('name');
|
|
1872
|
+
|
|
1873
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1874
|
+
|
|
1875
|
+
await db.transaction(async () => {
|
|
1876
|
+
let filter = Customer.balance.greaterThanOrEqual(8123);
|
|
1877
|
+
//same as Customer.balance.ge(8123);
|
|
1878
|
+
let customers = await Customer.getMany(filter);
|
|
1879
|
+
console.log(await customers.toDto());
|
|
1880
|
+
});
|
|
1881
|
+
```
|
|
1882
|
+
<a name="_between"></a>
|
|
1883
|
+
[between](https://github.com/alfateam/rdb-demo/blob/master/filtering/between.js)
|
|
1884
|
+
```js
|
|
1885
|
+
let orange = require('orange-orm');
|
|
1886
|
+
|
|
1887
|
+
let Customer = orange.table('_customer');
|
|
1888
|
+
|
|
1889
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1890
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
1891
|
+
Customer.column('cName').string().as('name');
|
|
1892
|
+
|
|
1893
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1894
|
+
|
|
1895
|
+
await db.transaction(async () => {
|
|
1896
|
+
let filter = Customer.balance.between(3000, 8123);
|
|
1897
|
+
let customers = await Customer.getMany(filter);
|
|
1898
|
+
console.log(await customers.toDto());
|
|
1899
|
+
});
|
|
1900
|
+
```
|
|
1901
|
+
<a name="_in"></a>
|
|
1902
|
+
[in](https://github.com/alfateam/rdb-demo/blob/master/filtering/in.js)
|
|
1903
|
+
```js
|
|
1904
|
+
let orange = require('orange-orm');
|
|
1905
|
+
|
|
1906
|
+
let Customer = orange.table('_customer');
|
|
1907
|
+
|
|
1908
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1909
|
+
Customer.column('cName').string().as('name');
|
|
1910
|
+
|
|
1911
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1912
|
+
|
|
1913
|
+
await db.transaction(async () => {
|
|
1914
|
+
let filter = Customer.name.in(['John', 'Yoko']);
|
|
1915
|
+
let customers = await Customer.getMany(filter);
|
|
1916
|
+
console.log(await customers.toDto());
|
|
1917
|
+
});
|
|
1918
|
+
```
|
|
1919
|
+
<a name="_startswith"></a>
|
|
1920
|
+
[startsWith](https://github.com/alfateam/rdb-demo/blob/master/filtering/startsWith.js)
|
|
1921
|
+
```js
|
|
1922
|
+
let orange = require('orange-orm');
|
|
1923
|
+
|
|
1924
|
+
let Customer = orange.table('_customer');
|
|
1925
|
+
|
|
1926
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1927
|
+
Customer.column('cName').string().as('name');
|
|
1928
|
+
|
|
1929
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1930
|
+
|
|
1931
|
+
await db.transaction(async () => {
|
|
1932
|
+
let filter = Customer.name.startsWith('Jo');
|
|
1933
|
+
let customers = await Customer.getMany(filter);
|
|
1934
|
+
console.log(await customers.toDto());
|
|
1935
|
+
});
|
|
1936
|
+
```
|
|
1937
|
+
<a name="_endswith"></a>
|
|
1938
|
+
[endsWith](https://github.com/alfateam/rdb-demo/blob/master/filtering/endsWith.js)
|
|
1939
|
+
```js
|
|
1940
|
+
let orange = require('orange-orm');
|
|
1941
|
+
|
|
1942
|
+
let Customer = orange.table('_customer');
|
|
1943
|
+
|
|
1944
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1945
|
+
Customer.column('cName').string().as('name');
|
|
1946
|
+
|
|
1947
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1948
|
+
|
|
1949
|
+
await db.transaction(async () => {
|
|
1950
|
+
let filter = Customer.name.endsWith('nny');
|
|
1951
|
+
let customers = await Customer.getMany(filter);
|
|
1952
|
+
console.log(await customers.toDto());
|
|
1953
|
+
});
|
|
1954
|
+
```
|
|
1955
|
+
<a name="_contains"></a>
|
|
1956
|
+
[contains](https://github.com/alfateam/rdb-demo/blob/master/filtering/contains.js)
|
|
1957
|
+
```js
|
|
1958
|
+
let orange = require('orange-orm');
|
|
1959
|
+
|
|
1960
|
+
let Customer = orange.table('_customer');
|
|
1961
|
+
|
|
1962
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1963
|
+
Customer.column('cName').string().as('name');
|
|
1964
|
+
|
|
1965
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1966
|
+
|
|
1967
|
+
await db.transaction(async () => {
|
|
1968
|
+
let filter = Customer.name.contains('ohn');
|
|
1969
|
+
let customers = await Customer.getMany(filter);
|
|
1970
|
+
console.log(await customers.toDto());
|
|
1971
|
+
});
|
|
1972
|
+
```
|
|
1973
|
+
<a name="_iequal"></a>
|
|
1974
|
+
[iEqual](https://github.com/alfateam/rdb-demo/blob/master/filtering/iEqual.js)
|
|
1975
|
+
(postgres only)
|
|
1976
|
+
```js
|
|
1977
|
+
let orange = require('orange-orm');
|
|
1978
|
+
|
|
1979
|
+
let Customer = orange.table('_customer');
|
|
1980
|
+
|
|
1981
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
1982
|
+
Customer.column('cName').string().as('name');
|
|
1983
|
+
|
|
1984
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
1985
|
+
|
|
1986
|
+
await db.transaction(async () => {
|
|
1987
|
+
let filter = Customer.name.iEqual('jOhN');
|
|
1988
|
+
//same as Customer.name.iEq('jOhN');
|
|
1989
|
+
let customers = await Customer.getMany(filter);
|
|
1990
|
+
console.log(await customers.toDto());
|
|
1991
|
+
});
|
|
1992
|
+
```
|
|
1993
|
+
<a name="_istartswith"></a>
|
|
1994
|
+
[iStartsWith](https://github.com/alfateam/rdb-demo/blob/master/filtering/iStartsWith.js)
|
|
1995
|
+
(postgres only)
|
|
1996
|
+
```js
|
|
1997
|
+
let orange = require('orange-orm');
|
|
1998
|
+
|
|
1999
|
+
let Customer = orange.table('_customer');
|
|
2000
|
+
|
|
2001
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2002
|
+
Customer.column('cName').string().as('name');
|
|
2003
|
+
|
|
2004
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2005
|
+
|
|
2006
|
+
await db.transaction(async () => {
|
|
2007
|
+
let filter = Customer.name.iStartsWith('jo');
|
|
2008
|
+
let customers = await Customer.getMany(filter);
|
|
2009
|
+
console.log(await customers.toDto());
|
|
2010
|
+
});
|
|
2011
|
+
```
|
|
2012
|
+
<a name="_iendswith"></a>
|
|
2013
|
+
[iEndsWith](https://github.com/alfateam/rdb-demo/blob/master/filtering/iEndsWith.js)
|
|
2014
|
+
(postgres only)
|
|
2015
|
+
```js
|
|
2016
|
+
let orange = require('orange-orm');
|
|
2017
|
+
|
|
2018
|
+
let Customer = orange.table('_customer');
|
|
2019
|
+
|
|
2020
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2021
|
+
Customer.column('cName').string().as('name');
|
|
2022
|
+
|
|
2023
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2024
|
+
|
|
2025
|
+
await db.transaction(async () => {
|
|
2026
|
+
let filter = Customer.name.iEndsWith('nNy');
|
|
2027
|
+
let customers = await Customer.getMany(filter);
|
|
2028
|
+
console.log(await customers.toDto());
|
|
2029
|
+
});
|
|
2030
|
+
```
|
|
2031
|
+
<a name="_icontains"></a>
|
|
2032
|
+
[iContains](https://github.com/alfateam/rdb-demo/blob/master/filtering/iContains.js)
|
|
2033
|
+
(postgres only)
|
|
2034
|
+
```js
|
|
2035
|
+
let orange = require('orange-orm');
|
|
2036
|
+
|
|
2037
|
+
let Customer = orange.table('_customer');
|
|
2038
|
+
|
|
2039
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2040
|
+
Customer.column('cName').string().as('name');
|
|
2041
|
+
|
|
2042
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2043
|
+
|
|
2044
|
+
await db.transaction(async () => {
|
|
2045
|
+
let filter = Customer.name.iContains('oHn');
|
|
2046
|
+
let customers = await Customer.getMany(filter);
|
|
2047
|
+
console.log(await customers.toDto());
|
|
2048
|
+
});
|
|
2049
|
+
```
|
|
2050
|
+
<a name="_exists"></a>
|
|
2051
|
+
[exists](https://github.com/alfateam/rdb-demo/blob/master/filtering/exists.js)
|
|
2052
|
+
```js
|
|
2053
|
+
let orange = require('orange-orm');
|
|
2054
|
+
|
|
2055
|
+
let Order = orange.table('_order');
|
|
2056
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
2057
|
+
|
|
2058
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
2059
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
2060
|
+
|
|
2061
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
2062
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
2063
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
2064
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
2065
|
+
|
|
2066
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
2067
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
2068
|
+
|
|
2069
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2070
|
+
|
|
2071
|
+
await db.transaction(async () => {
|
|
2072
|
+
let filter = Order.deliveryAddress.exists();
|
|
2073
|
+
let orders = await Order.getMany(filter);
|
|
2074
|
+
console.log(await orders.toDto());
|
|
2075
|
+
});
|
|
2076
|
+
```
|
|
2077
|
+
<a name="_or"></a>
|
|
2078
|
+
[or](https://github.com/alfateam/rdb-demo/blob/master/filtering/or.js)
|
|
2079
|
+
```js
|
|
2080
|
+
let orange = require('orange-orm');
|
|
2081
|
+
|
|
2082
|
+
let Customer = orange.table('_customer');
|
|
2083
|
+
|
|
2084
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2085
|
+
Customer.column('cName').string().as('name');
|
|
2086
|
+
|
|
2087
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2088
|
+
|
|
2089
|
+
await db.transaction(async () => {
|
|
2090
|
+
let john = Customer.name.equal('John');
|
|
2091
|
+
let yoko = Customer.name.equal('Yoko');
|
|
2092
|
+
let filter = john.or(yoko);
|
|
2093
|
+
let customers = await Customer.getMany(filter);
|
|
2094
|
+
console.log(await customers.toDto());
|
|
2095
|
+
});
|
|
2096
|
+
```
|
|
2097
|
+
<a name="_and"></a>
|
|
2098
|
+
[and](https://github.com/alfateam/rdb-demo/blob/master/filtering/and.js)
|
|
2099
|
+
```js
|
|
2100
|
+
let orange = require('orange-orm');
|
|
2101
|
+
|
|
2102
|
+
let Customer = orange.table('_customer');
|
|
2103
|
+
|
|
2104
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2105
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
2106
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
2107
|
+
Customer.column('cName').string().as('name');
|
|
2108
|
+
|
|
2109
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2110
|
+
|
|
2111
|
+
await db.transaction(async () => {
|
|
2112
|
+
let isActive = Customer.isActive.equal(true);
|
|
2113
|
+
let highBalance = Customer.balance.greaterThan(8000);
|
|
2114
|
+
let filter = isActive.and(highBalance);
|
|
2115
|
+
let customers = await Customer.getMany(filter);
|
|
2116
|
+
console.log(await customers.toDto());
|
|
2117
|
+
});
|
|
2118
|
+
```
|
|
2119
|
+
<a name="_oralternative"></a>
|
|
2120
|
+
[or alternative syntax](https://github.com/alfateam/rdb-demo/blob/master/filtering/orAlternative.js)
|
|
2121
|
+
```js
|
|
2122
|
+
let orange = require('orange-orm');
|
|
2123
|
+
|
|
2124
|
+
let Customer = orange.table('_customer');
|
|
2125
|
+
|
|
2126
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2127
|
+
Customer.column('cName').string().as('name');
|
|
2128
|
+
|
|
2129
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2130
|
+
|
|
2131
|
+
await db.transaction(async () => {
|
|
2132
|
+
let john = Customer.name.equal('John');
|
|
2133
|
+
let yoko = Customer.name.equal('Yoko');
|
|
2134
|
+
let filter = orange.filter.or(john).or(yoko);
|
|
2135
|
+
//alternatively orange.filter.and(john).or(yoko);
|
|
2136
|
+
let customers = await Customer.getMany(filter);
|
|
2137
|
+
console.log(await customers.toDto());
|
|
2138
|
+
});
|
|
2139
|
+
```
|
|
2140
|
+
<a name="_andalternative"></a>
|
|
2141
|
+
[and alternative syntax](https://github.com/alfateam/rdb-demo/blob/master/filtering/andAlternative.js)
|
|
2142
|
+
```js
|
|
2143
|
+
let orange = require('orange-orm');
|
|
2144
|
+
|
|
2145
|
+
let Customer = orange.table('_customer');
|
|
2146
|
+
|
|
2147
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2148
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
2149
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
2150
|
+
Customer.column('cName').string().as('name');
|
|
2151
|
+
|
|
2152
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2153
|
+
|
|
2154
|
+
await db.transaction(async () => {
|
|
2155
|
+
let isActive = Customer.isActive.equal(true);
|
|
2156
|
+
let highBalance = Customer.balance.greaterThan(8000);
|
|
2157
|
+
let filter = orange.filter.and(isActive).and(highBalance);
|
|
2158
|
+
//alternatively orange.filter.or(isActive).and(highBalance);
|
|
2159
|
+
let customers = await Customer.getMany(filter);
|
|
2160
|
+
console.log(await customers.toDto());
|
|
2161
|
+
});
|
|
2162
|
+
```
|
|
2163
|
+
<a name="_any"></a>
|
|
2164
|
+
[any filter](https://github.com/alfateam/rdb-demo/blob/master/filtering/any.js)
|
|
2165
|
+
```js
|
|
2166
|
+
let orange = require('orange-orm');
|
|
2167
|
+
|
|
2168
|
+
let Order = orange.table('_order');
|
|
2169
|
+
let Customer = orange.table('_customer');
|
|
2170
|
+
let OrderLine = orange.table('_orderLine');
|
|
2171
|
+
|
|
2172
|
+
Order.primaryColumn('id').guid();
|
|
2173
|
+
Order.column('customerId').guid();
|
|
2174
|
+
Order.column('orderNo').string();
|
|
2175
|
+
|
|
2176
|
+
Customer.primaryColumn('id').guid();
|
|
2177
|
+
Customer.column('isActive').boolean();
|
|
2178
|
+
Customer.column('balance').numeric();
|
|
2179
|
+
Customer.column('name').string();
|
|
2180
|
+
|
|
2181
|
+
OrderLine.primaryColumn('id').guid();
|
|
2182
|
+
OrderLine.column('orderId').guid();
|
|
2183
|
+
OrderLine.column('product').string();
|
|
2184
|
+
|
|
2185
|
+
Order.join(Customer).by('customerId').as('customer');
|
|
2186
|
+
|
|
2187
|
+
let line_order_relation = OrderLine.join(Order).by('orderId').as('order');
|
|
2188
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
2189
|
+
|
|
2190
|
+
let db = orange.sqlite(__dirname + '/../db/rdbDemo');
|
|
2191
|
+
|
|
2192
|
+
await db.transaction(async () => {
|
|
2193
|
+
let filter = Order.lines.any( line => {
|
|
2194
|
+
let aFilter = line.product.contains('a');
|
|
2195
|
+
let cFilter = line.product.startsWith('c');
|
|
2196
|
+
return aFilter.and(cFilter);
|
|
2197
|
+
});
|
|
2198
|
+
let orders = await Order.getMany(filter);
|
|
2199
|
+
console.log(inspect(await orders.toDto(), false, 10));
|
|
2200
|
+
});
|
|
2201
|
+
```
|
|
2202
|
+
<a name="_all"></a>
|
|
2203
|
+
[all filter](https://github.com/alfateam/rdb-demo/blob/master/filtering/all.js)
|
|
2204
|
+
```js
|
|
2205
|
+
let orange = require('orange-orm');
|
|
2206
|
+
|
|
2207
|
+
let Order = orange.table('_order');
|
|
2208
|
+
let Customer = orange.table('_customer');
|
|
2209
|
+
let OrderLine = orange.table('_orderLine');
|
|
2210
|
+
|
|
2211
|
+
Order.primaryColumn('id').guid();
|
|
2212
|
+
Order.column('customerId').guid();
|
|
2213
|
+
Order.column('orderNo').string();
|
|
2214
|
+
|
|
2215
|
+
Customer.primaryColumn('id').guid();
|
|
2216
|
+
Customer.column('isActive').boolean();
|
|
2217
|
+
Customer.column('balance').numeric();
|
|
2218
|
+
Customer.column('name').string();
|
|
2219
|
+
|
|
2220
|
+
OrderLine.primaryColumn('id').guid();
|
|
2221
|
+
OrderLine.column('orderId').guid();
|
|
2222
|
+
OrderLine.column('product').string();
|
|
2223
|
+
|
|
2224
|
+
Order.join(Customer).by('customerId').as('customer');
|
|
2225
|
+
|
|
2226
|
+
let line_order_relation = OrderLine.join(Order).by('orderId').as('order');
|
|
2227
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
2228
|
+
|
|
2229
|
+
let db = orange.sqlite(__dirname + '/../db/rdbDemo');
|
|
2230
|
+
|
|
2231
|
+
await db.transaction(async () => {
|
|
2232
|
+
let filter = Order.lines.all( line => {
|
|
2233
|
+
return line.product.contains('sub');
|
|
2234
|
+
});
|
|
2235
|
+
let orders = await Order.getMany(filter);
|
|
2236
|
+
console.log(inspect(await orders.toDto(), false, 10));
|
|
2237
|
+
});
|
|
2238
|
+
```
|
|
2239
|
+
<a name="_none"></a>
|
|
2240
|
+
[none filter](https://github.com/alfateam/rdb-demo/blob/master/filtering/none.js)
|
|
2241
|
+
```js
|
|
2242
|
+
let orange = require('orange-orm');
|
|
2243
|
+
|
|
2244
|
+
let Order = orange.table('_order');
|
|
2245
|
+
let Customer = orange.table('_customer');
|
|
2246
|
+
let OrderLine = orange.table('_orderLine');
|
|
2247
|
+
|
|
2248
|
+
Order.primaryColumn('id').guid();
|
|
2249
|
+
Order.column('customerId').guid();
|
|
2250
|
+
Order.column('orderNo').string();
|
|
2251
|
+
|
|
2252
|
+
Customer.primaryColumn('id').guid();
|
|
2253
|
+
Customer.column('isActive').boolean();
|
|
2254
|
+
Customer.column('balance').numeric();
|
|
2255
|
+
Customer.column('name').string();
|
|
2256
|
+
|
|
2257
|
+
OrderLine.primaryColumn('id').guid();
|
|
2258
|
+
OrderLine.column('orderId').guid();
|
|
2259
|
+
OrderLine.column('product').string();
|
|
2260
|
+
|
|
2261
|
+
Order.join(Customer).by('customerId').as('customer');
|
|
2262
|
+
|
|
2263
|
+
let line_order_relation = OrderLine.join(Order).by('orderId').as('order');
|
|
2264
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
2265
|
+
|
|
2266
|
+
let db = orange.sqlite(__dirname + '/../db/rdbDemo');
|
|
2267
|
+
|
|
2268
|
+
await db.transaction(async () => {
|
|
2269
|
+
let filter = Order.lines.none( line => {
|
|
2270
|
+
return line.product.contains('sub');
|
|
2271
|
+
});
|
|
2272
|
+
//alternatively: Order.lines.product.contains('sub').not();
|
|
2273
|
+
let orders = await Order.getMany(filter);
|
|
2274
|
+
console.log(inspect(await orders.toDto(), false, 10));
|
|
2275
|
+
});
|
|
2276
|
+
```
|
|
2277
|
+
<a name="_subfilter"></a>
|
|
2278
|
+
[sub filter](https://github.com/alfateam/rdb-demo/blob/master/filtering/subFilter.js)
|
|
2279
|
+
```js
|
|
2280
|
+
let orange = require('orange-orm');
|
|
2281
|
+
|
|
2282
|
+
let Order = orange.table('_order');
|
|
2283
|
+
let DeliveryAddress = orange.table('_deliveryAddress');
|
|
2284
|
+
|
|
2285
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
2286
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
2287
|
+
|
|
2288
|
+
DeliveryAddress.primaryColumn('dId').guid().as('id');
|
|
2289
|
+
DeliveryAddress.column('dOrderId').string().as('orderId');
|
|
2290
|
+
DeliveryAddress.column('dName').string().as('name');
|
|
2291
|
+
DeliveryAddress.column('dStreet').string().as('street');
|
|
2292
|
+
|
|
2293
|
+
let deliveryAddress_order_relation = DeliveryAddress.join(Order).by('dOrderId').as('order');
|
|
2294
|
+
Order.hasOne(deliveryAddress_order_relation).as('deliveryAddress');
|
|
2295
|
+
|
|
2296
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2297
|
+
|
|
2298
|
+
await db.transaction(async () => {
|
|
2299
|
+
let filter = Order.deliveryAddress.street.startsWith('Node');
|
|
2300
|
+
let orders = await Order.getMany(filter);
|
|
2301
|
+
console.log(await orders.toDto());
|
|
2302
|
+
});
|
|
2303
|
+
```
|
|
2304
|
+
<a name="_compositefilter"></a>
|
|
2305
|
+
[composite filter](https://github.com/alfateam/rdb-demo/blob/master/filtering/compositeFilter.js)
|
|
2306
|
+
```js
|
|
2307
|
+
let orange = require('orange-orm');
|
|
2308
|
+
|
|
2309
|
+
let Order = orange.table('_order');
|
|
2310
|
+
let Customer = orange.table('_customer');
|
|
2311
|
+
let OrderLine = orange.table('_orderLine');
|
|
2312
|
+
|
|
2313
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
2314
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
2315
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
2316
|
+
|
|
2317
|
+
Customer.primaryColumn('cId').guid().as('id');
|
|
2318
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
2319
|
+
Customer.column('cBalance').numeric().as('balance');
|
|
2320
|
+
Customer.column('cName').string().as('name');
|
|
2321
|
+
|
|
2322
|
+
OrderLine.primaryColumn('lId').guid().as('id');
|
|
2323
|
+
OrderLine.column('lOrderId').guid().as('orderId');
|
|
2324
|
+
OrderLine.column('lProduct').string().as('product');
|
|
2325
|
+
|
|
2326
|
+
Order.join(Customer).by('oCustomerId').as('customer');
|
|
2327
|
+
|
|
2328
|
+
let line_order_relation = OrderLine.join(Order).by('lOrderId').as('order');
|
|
2329
|
+
Order.hasMany(line_order_relation).as('lines');
|
|
2330
|
+
|
|
2331
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2332
|
+
|
|
2333
|
+
await db.transaction(async () => {
|
|
2334
|
+
let isActive = Order.customer.isActive.eq(true);
|
|
2335
|
+
let didOrderCar = Order.lines.product.contains('car');
|
|
2336
|
+
let filter = isActive.and(didOrderCar);
|
|
2337
|
+
//alternatively orange.filter.and(isActive).and(didOrderCar);
|
|
2338
|
+
let orders = await Order.getMany(filter);
|
|
2339
|
+
console.log(inspect(await orders.toDto(), false, 10));
|
|
2340
|
+
});
|
|
2341
|
+
```
|
|
2342
|
+
<a name="_rawsqlfilter"></a>
|
|
2343
|
+
[raw sql filter](https://github.com/alfateam/rdb-demo/blob/master/filtering/rawSqlFilter.js)
|
|
2344
|
+
```js
|
|
2345
|
+
let inspect = require('util').inspect;
|
|
2346
|
+
let orange = require('orange-orm');
|
|
2347
|
+
|
|
2348
|
+
let Order = orange.table('_order');
|
|
2349
|
+
Order.primaryColumn('oId').guid().as('id');
|
|
2350
|
+
Order.column('oOrderNo').string().as('orderNo');
|
|
2351
|
+
Order.column('oCustomerId').guid().as('customerId');
|
|
2352
|
+
|
|
2353
|
+
let Customer = orange.table('_customer');
|
|
2354
|
+
Customer.primaryColumn('cid').guid().as('id');
|
|
2355
|
+
Customer.column('cName').string().as('name');
|
|
2356
|
+
Customer.column('cBalance').string().as('balance');
|
|
2357
|
+
Customer.column('cIsActive').boolean().as('isActive');
|
|
2358
|
+
|
|
2359
|
+
let orderCustomerJoin = Order.join(Customer).by('oCustomerId').as('customer');
|
|
2360
|
+
Customer.hasMany(orderCustomerJoin).as('orders');
|
|
2361
|
+
|
|
2362
|
+
let db = orange('postgres://postgres:postgres@localhost/test');
|
|
2363
|
+
|
|
2364
|
+
await db.transaction(async () => {
|
|
2365
|
+
let filter = {
|
|
2366
|
+
sql: 'exists (select 1 from _customer where _customer.cId = oCustomerId and _customer.cBalance > 3000 and _customer.cName LIKE ?)',
|
|
2367
|
+
parameters: ['%o%']
|
|
2368
|
+
};
|
|
2369
|
+
let orders = await Order.getMany(filter);
|
|
2370
|
+
let strategy = { customer: null }
|
|
2371
|
+
console.log(await orders.toDto(strategy));
|
|
2372
|
+
});
|
|
2373
|
+
```
|