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/src/pg/insert.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
let newInsertCommand = require('../table/commands/newInsertCommand');
|
|
2
|
+
let newInsertCommandCore = require('../table/commands/newInsertCommandCore');
|
|
3
|
+
let executeQueries = require('../table/executeQueries');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
function insertDefault(table, row, options) {
|
|
7
|
+
let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
|
|
8
|
+
insertCmd.disallowCompress = true;
|
|
9
|
+
|
|
10
|
+
return executeQueries([insertCmd]).then((result) => result[result.length - 1]);
|
|
11
|
+
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = insertDefault;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
let lastInsertedSql = require('./lastInsertedSql');
|
|
2
|
+
let getSessionContext = require('../table/getSessionContext');
|
|
3
|
+
|
|
4
|
+
function insertSql(table, row, options) {
|
|
5
|
+
let columnNames = [];
|
|
6
|
+
let regularColumnNames = [];
|
|
7
|
+
let conflictColumnUpdateSql = '';
|
|
8
|
+
let values = [];
|
|
9
|
+
let sql = 'INSERT INTO ' + table._dbName + ' ';
|
|
10
|
+
addDiscriminators();
|
|
11
|
+
addColumns();
|
|
12
|
+
if (columnNames.length === 0)
|
|
13
|
+
sql += `${outputInserted()}DEFAULT VALUES ${lastInsertedSql(table)}`;
|
|
14
|
+
else
|
|
15
|
+
sql = sql + '(' + columnNames.join(',') + ') ' + outputInserted() + 'VALUES (' + values.join(',') + ')' + onConflict() + lastInsertedSql(table);
|
|
16
|
+
return sql;
|
|
17
|
+
|
|
18
|
+
function onConflict() {
|
|
19
|
+
if (options.concurrency === 'skipOnConflict' || options.concurrency === 'overwrite') {
|
|
20
|
+
const primaryKeys = table._primaryColumns.map(x => x._dbName).join(',');
|
|
21
|
+
return ` ON CONFLICT(${primaryKeys}) ${conflictColumnUpdateSql} `;
|
|
22
|
+
}
|
|
23
|
+
else return '';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function addDiscriminators() {
|
|
27
|
+
let discriminators = table._columnDiscriminators;
|
|
28
|
+
for (let i = 0; i < discriminators.length; i++) {
|
|
29
|
+
let parts = discriminators[i].split('=');
|
|
30
|
+
columnNames.push(parts[0]);
|
|
31
|
+
values.push(parts[1]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function addColumns() {
|
|
36
|
+
let conflictColumnUpdates = [];
|
|
37
|
+
let columns = table._columns;
|
|
38
|
+
for (let i = 0; i < columns.length; i++) {
|
|
39
|
+
let column = columns[i];
|
|
40
|
+
regularColumnNames.push(column._dbName);
|
|
41
|
+
if (row['__' + column.alias] !== undefined) {
|
|
42
|
+
columnNames.push(column._dbName);
|
|
43
|
+
values.push('%s');
|
|
44
|
+
addConflictUpdate(column);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (conflictColumnUpdates.length === 0)
|
|
48
|
+
conflictColumnUpdateSql = 'DO NOTHING';
|
|
49
|
+
else
|
|
50
|
+
conflictColumnUpdateSql = 'DO UPDATE SET ' + conflictColumnUpdates.join(',');
|
|
51
|
+
|
|
52
|
+
function addConflictUpdate(column) {
|
|
53
|
+
let concurrency = options[column.alias]?.concurrency || options.concurrency;
|
|
54
|
+
if (concurrency === 'overwrite')
|
|
55
|
+
conflictColumnUpdates.push(`${column._dbName}=EXCLUDED.${column._dbName}`);
|
|
56
|
+
else if (concurrency === 'optimistic')
|
|
57
|
+
conflictColumnUpdates.push(`${column._dbName} = CASE WHEN ${table._dbName}.${column._dbName} <> EXCLUDED.${column._dbName} THEN CAST(random()::int || '12345678-1234-1234-1234-123456789012Conflict when updating ${column._dbName}12345678-1234-1234-1234-123456789012' AS INTEGER) ELSE ${table._dbName}.${column._dbName} END`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
function outputInserted() {
|
|
63
|
+
let context = getSessionContext();
|
|
64
|
+
if (!context.lastInsertedIsSeparate && context.outputInsertedSql)
|
|
65
|
+
return context.outputInsertedSql(table) + ' ';
|
|
66
|
+
return '';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
module.exports = insertSql;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function lastInsertedSql(table) {
|
|
2
|
+
let separator = '';
|
|
3
|
+
let result = 'RETURNING ';
|
|
4
|
+
for (let i = 0; i < table._columns.length; i++) {
|
|
5
|
+
result += separator + table._columns[i]._dbName;
|
|
6
|
+
separator = ',';
|
|
7
|
+
}
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
module.exports = lastInsertedSql;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function limitAndOffset(span) {
|
|
2
|
+
if (span.offset)
|
|
3
|
+
return ` limit ${limit()} offset ${span.offset}`;
|
|
4
|
+
else if (span.limit || span.limit === 0)
|
|
5
|
+
return ` limit ${span.limit}`;
|
|
6
|
+
else
|
|
7
|
+
return '';
|
|
8
|
+
|
|
9
|
+
function limit() {
|
|
10
|
+
if (span.limit || span.limit === 0)
|
|
11
|
+
return span.limit;
|
|
12
|
+
else
|
|
13
|
+
return 'all';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = limitAndOffset;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
let createDomain = require('../createDomain');
|
|
2
|
+
let newTransaction = require('./newTransaction');
|
|
3
|
+
let begin = require('../table/begin');
|
|
4
|
+
let commit = require('../table/commit');
|
|
5
|
+
let rollback = require('../table/rollback');
|
|
6
|
+
let newPool = require('./newPool');
|
|
7
|
+
let lock = require('../lock');
|
|
8
|
+
let executeSchema = require('./schema');
|
|
9
|
+
let useHook = require('../useHook');
|
|
10
|
+
let promise = require('promise/domains');
|
|
11
|
+
let versionArray = process.version.replace('v', '').split('.');
|
|
12
|
+
let major = parseInt(versionArray[0]);
|
|
13
|
+
let express = require('../hostExpress');
|
|
14
|
+
let hostLocal = require('../hostLocal');
|
|
15
|
+
let doQuery = require('../query');
|
|
16
|
+
let releaseDbClient = require('../table/releaseDbClient');
|
|
17
|
+
let setSessionSingleton = require('../table/setSessionSingleton');
|
|
18
|
+
let types = require('pg').types;
|
|
19
|
+
|
|
20
|
+
types.setTypeParser(1700, function(val) {
|
|
21
|
+
return parseFloat(val);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
function newDatabase(connectionString, poolOptions) {
|
|
25
|
+
if (!connectionString)
|
|
26
|
+
throw new Error('Connection string cannot be empty');
|
|
27
|
+
var pool;
|
|
28
|
+
if (!poolOptions)
|
|
29
|
+
pool = newPool.bind(null, connectionString, poolOptions);
|
|
30
|
+
else
|
|
31
|
+
pool = newPool(connectionString, poolOptions);
|
|
32
|
+
|
|
33
|
+
let c = { poolFactory: pool, hostLocal, express };
|
|
34
|
+
|
|
35
|
+
c.transaction = function(options, fn) {
|
|
36
|
+
if ((arguments.length === 1) && (typeof options === 'function')) {
|
|
37
|
+
fn = options;
|
|
38
|
+
options = undefined;
|
|
39
|
+
}
|
|
40
|
+
let domain = createDomain();
|
|
41
|
+
|
|
42
|
+
if (fn)
|
|
43
|
+
return domain.run(runInTransaction);
|
|
44
|
+
else if ((major >= 12) && useHook()) {
|
|
45
|
+
domain.exitContext = true;
|
|
46
|
+
return domain.start().then(run);
|
|
47
|
+
}
|
|
48
|
+
else
|
|
49
|
+
return domain.run(run);
|
|
50
|
+
|
|
51
|
+
async function runInTransaction() {
|
|
52
|
+
let result;
|
|
53
|
+
let transaction = newTransaction(domain, pool);
|
|
54
|
+
await new Promise(transaction)
|
|
55
|
+
.then(begin)
|
|
56
|
+
.then(negotiateSchema)
|
|
57
|
+
.then(fn)
|
|
58
|
+
.then((res) => result = res)
|
|
59
|
+
.then(c.commit)
|
|
60
|
+
.then(null, c.rollback);
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function run() {
|
|
65
|
+
let p;
|
|
66
|
+
let transaction = newTransaction(domain, pool);
|
|
67
|
+
if (useHook())
|
|
68
|
+
p = new Promise(transaction);
|
|
69
|
+
else
|
|
70
|
+
p = new promise(transaction);
|
|
71
|
+
|
|
72
|
+
return p.then(begin)
|
|
73
|
+
.then(negotiateSchema);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function negotiateSchema(previous) {
|
|
77
|
+
let schema = options && options.schema;
|
|
78
|
+
if (!schema)
|
|
79
|
+
return previous;
|
|
80
|
+
return executeSchema(schema);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
c.createTransaction = function(options) {
|
|
85
|
+
let domain = createDomain();
|
|
86
|
+
let transaction = newTransaction(domain, pool);
|
|
87
|
+
let p = domain.run(() => new Promise(transaction).then(begin).then(negotiateSchema));
|
|
88
|
+
|
|
89
|
+
function run(fn) {
|
|
90
|
+
return p.then(domain.run.bind(domain, fn));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function negotiateSchema(previous) {
|
|
94
|
+
let schema = options && options.schema;
|
|
95
|
+
if (!schema)
|
|
96
|
+
return previous;
|
|
97
|
+
return executeSchema(schema);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return run;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
c.bindTransaction = function() {
|
|
104
|
+
// @ts-ignore
|
|
105
|
+
var domain = process.domain;
|
|
106
|
+
let p = domain.run(() => true);
|
|
107
|
+
|
|
108
|
+
function run(fn) {
|
|
109
|
+
return p.then(domain.run.bind(domain, fn));
|
|
110
|
+
}
|
|
111
|
+
return run;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
c.query = function(query) {
|
|
115
|
+
let domain = createDomain();
|
|
116
|
+
let transaction = newTransaction(domain, pool);
|
|
117
|
+
let p = domain.run(() => new Promise(transaction)
|
|
118
|
+
.then(() => setSessionSingleton('changes', []))
|
|
119
|
+
.then(() => doQuery(query).then(onResult, onError)));
|
|
120
|
+
return p;
|
|
121
|
+
|
|
122
|
+
function onResult(result) {
|
|
123
|
+
releaseDbClient();
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function onError(e) {
|
|
128
|
+
releaseDbClient();
|
|
129
|
+
throw e;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
c.rollback = rollback;
|
|
135
|
+
c.commit = commit;
|
|
136
|
+
c.lock = lock;
|
|
137
|
+
c.schema = executeSchema;
|
|
138
|
+
|
|
139
|
+
c.end = function() {
|
|
140
|
+
if (poolOptions)
|
|
141
|
+
return pool.end();
|
|
142
|
+
else
|
|
143
|
+
return Promise.resolve();
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
c.accept = function(caller) {
|
|
147
|
+
caller.visitPg();
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
return c;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
module.exports = newDatabase;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var pools = require('../pools');
|
|
2
|
+
var promise = require('../table/promise');
|
|
3
|
+
var end = require('./pool/end');
|
|
4
|
+
var newPgPool = require('./pool/newPgPool');
|
|
5
|
+
var newId = require('../newId');
|
|
6
|
+
|
|
7
|
+
function newPool(connectionString, poolOptions) {
|
|
8
|
+
var pool = newPgPool(connectionString, poolOptions);
|
|
9
|
+
var id = newId();
|
|
10
|
+
var boundEnd = end.bind(null, pool, id);
|
|
11
|
+
var c = {};
|
|
12
|
+
|
|
13
|
+
c.connect = pool.connect;
|
|
14
|
+
c.end = promise.denodeify(boundEnd);
|
|
15
|
+
pools[id] = c;
|
|
16
|
+
return c;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = newPool;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var wrapQuery = require('./wrapQuery');
|
|
2
|
+
var wrapQueryStream = require('./wrapQueryStream');
|
|
3
|
+
var encodeDate = require('./encodeDate');
|
|
4
|
+
var encodeBoolean = require('./encodeBoolean');
|
|
5
|
+
var deleteFromSql = require('./deleteFromSql');
|
|
6
|
+
var selectForUpdateSql = require('./selectForUpdateSql');
|
|
7
|
+
var limitAndOffset = require('./limitAndOffset');
|
|
8
|
+
var formatDateOut = require('./formatDateOut');
|
|
9
|
+
var encodeJSON = require('./encodeJSON');
|
|
10
|
+
var insertSql = require('./insertSql');
|
|
11
|
+
var insert = require('./insert');
|
|
12
|
+
|
|
13
|
+
function newResolveTransaction(domain, pool) {
|
|
14
|
+
var rdb = {poolFactory: pool};
|
|
15
|
+
if (!pool.connect) {
|
|
16
|
+
pool = pool();
|
|
17
|
+
rdb.pool = pool;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return function(onSuccess, onError) {
|
|
21
|
+
pool.connect(onConnected);
|
|
22
|
+
|
|
23
|
+
function onConnected(err, client, done) {
|
|
24
|
+
try {
|
|
25
|
+
if (err) {
|
|
26
|
+
onError(err);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
client.executeQuery = wrapQuery(client);
|
|
30
|
+
client.streamQuery = wrapQueryStream(client);
|
|
31
|
+
rdb.engine = 'pg';
|
|
32
|
+
rdb.dbClient = client;
|
|
33
|
+
rdb.dbClientDone = done;
|
|
34
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
35
|
+
rdb.encodeDate = encodeDate;
|
|
36
|
+
rdb.encodeJSON = encodeJSON;
|
|
37
|
+
rdb.formatDateOut = formatDateOut;
|
|
38
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
39
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
40
|
+
rdb.lastInsertedIsSeparate = false;
|
|
41
|
+
rdb.insertSql = insertSql;
|
|
42
|
+
rdb.insert = insert;
|
|
43
|
+
rdb.multipleStatements = true;
|
|
44
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
45
|
+
rdb.accept = function(caller) {
|
|
46
|
+
caller.visitPg();
|
|
47
|
+
};
|
|
48
|
+
rdb.aggregateCount = 0;
|
|
49
|
+
domain.rdb = rdb;
|
|
50
|
+
onSuccess();
|
|
51
|
+
} catch (e) {
|
|
52
|
+
onError(e);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = newResolveTransaction;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
// database host defaults to localhost
|
|
3
|
+
host: 'localhost',
|
|
4
|
+
|
|
5
|
+
//database user's name
|
|
6
|
+
user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
|
|
7
|
+
|
|
8
|
+
//name of database to connect
|
|
9
|
+
database: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
|
|
10
|
+
|
|
11
|
+
//database user's password
|
|
12
|
+
password: null,
|
|
13
|
+
|
|
14
|
+
//database port
|
|
15
|
+
port: 5432,
|
|
16
|
+
|
|
17
|
+
//number of rows to return at a time from a prepared statement's
|
|
18
|
+
//portal. 0 will return all rows at once
|
|
19
|
+
rows: 0,
|
|
20
|
+
|
|
21
|
+
// binary result mode
|
|
22
|
+
binary: false,
|
|
23
|
+
|
|
24
|
+
//Connection pool options - see https://github.com/coopernurse/node-pool
|
|
25
|
+
//number of connections to use in connection pool
|
|
26
|
+
//0 will disable connection pooling
|
|
27
|
+
poolSize: 0,
|
|
28
|
+
|
|
29
|
+
//max milliseconds a client can go unused before it is removed
|
|
30
|
+
//from the pool and destroyed
|
|
31
|
+
poolIdleTimeout: 30000,
|
|
32
|
+
|
|
33
|
+
//frequeny to check for idle clients within the client pool
|
|
34
|
+
reapIntervalMillis: 1000,
|
|
35
|
+
|
|
36
|
+
//pool log function / boolean
|
|
37
|
+
poolLog: false,
|
|
38
|
+
|
|
39
|
+
client_encoding: '',
|
|
40
|
+
|
|
41
|
+
ssl: false,
|
|
42
|
+
|
|
43
|
+
application_name : undefined,
|
|
44
|
+
fallback_application_name: undefined
|
|
45
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* eslint-disable no-prototype-builtins */
|
|
2
|
+
//slightly modified code from github.com/brianc/node-postgres
|
|
3
|
+
var EventEmitter = require('events').EventEmitter;
|
|
4
|
+
|
|
5
|
+
var defaults = require('./defaults');
|
|
6
|
+
var genericPool = require('../../generic-pool');
|
|
7
|
+
var _pg = require('pg');
|
|
8
|
+
|
|
9
|
+
function newPgPool(connectionString, poolOptions) {
|
|
10
|
+
poolOptions = poolOptions || {};
|
|
11
|
+
let pg = poolOptions.native ? _pg.native : _pg;
|
|
12
|
+
var pool = genericPool.Pool({
|
|
13
|
+
max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
|
|
14
|
+
idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
|
|
15
|
+
reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
|
|
16
|
+
log: poolOptions.log || defaults.poolLog,
|
|
17
|
+
create: function(cb) {
|
|
18
|
+
var client = new pg.Client(connectionString);
|
|
19
|
+
client.connect(function(err) {
|
|
20
|
+
if (err) return cb(err, null);
|
|
21
|
+
|
|
22
|
+
//handle connected client background errors by emitting event
|
|
23
|
+
//via the pg object and then removing errored client from the pool
|
|
24
|
+
client.on('error', function(e) {
|
|
25
|
+
pool.emit('error', e, client);
|
|
26
|
+
|
|
27
|
+
// If the client is already being destroyed, the error
|
|
28
|
+
// occurred during stream ending. Do not attempt to destroy
|
|
29
|
+
// the client again.
|
|
30
|
+
if (!client._destroying) {
|
|
31
|
+
pool.destroy(client);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Remove connection from pool on disconnect
|
|
36
|
+
client.on('end', function(_e) {
|
|
37
|
+
// Do not enter infinite loop between pool.destroy
|
|
38
|
+
// and client 'end' event...
|
|
39
|
+
if (!client._destroying) {
|
|
40
|
+
pool.destroy(client);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
client.poolCount = 0;
|
|
44
|
+
return cb(null, client);
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
destroy: function(client) {
|
|
48
|
+
client._destroying = true;
|
|
49
|
+
client.poolCount = undefined;
|
|
50
|
+
client.end();
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//mixin EventEmitter to pool
|
|
54
|
+
EventEmitter.call(pool);
|
|
55
|
+
for (var key in EventEmitter.prototype) {
|
|
56
|
+
if (EventEmitter.prototype.hasOwnProperty(key)) {
|
|
57
|
+
pool[key] = EventEmitter.prototype[key];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//monkey-patch with connect method
|
|
61
|
+
pool.connect = function(cb) {
|
|
62
|
+
var domain = process.domain;
|
|
63
|
+
pool.acquire(function(err, client) {
|
|
64
|
+
if (domain) {
|
|
65
|
+
cb = domain.bind(cb);
|
|
66
|
+
}
|
|
67
|
+
if (err) return cb(err, null, function() {
|
|
68
|
+
/*NOOP*/ });
|
|
69
|
+
client.poolCount++;
|
|
70
|
+
cb(null, client, function(err) {
|
|
71
|
+
if (err) {
|
|
72
|
+
pool.destroy(client);
|
|
73
|
+
} else {
|
|
74
|
+
pool.release(client);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
return pool;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
module.exports = newPgPool;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function replaceParamChar(query, params) {
|
|
2
|
+
if (params.length === 0)
|
|
3
|
+
return query.sql();
|
|
4
|
+
var splitted = query.sql().split('?');
|
|
5
|
+
var sql = '';
|
|
6
|
+
var lastIndex = splitted.length - 1;
|
|
7
|
+
for (var i = 0; i < lastIndex; i++) {
|
|
8
|
+
sql += splitted[i] + '$' + (i + 1);
|
|
9
|
+
}
|
|
10
|
+
sql += splitted[lastIndex];
|
|
11
|
+
return sql;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = replaceParamChar;
|
package/src/pg/schema.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var query = require('../query');
|
|
2
|
+
|
|
3
|
+
function executeSchema(schema) {
|
|
4
|
+
if (!schema)
|
|
5
|
+
throw new Error('Missing schema');
|
|
6
|
+
if (!Array.isArray(schema))
|
|
7
|
+
schema = [schema];
|
|
8
|
+
return query('SET LOCAL search_path TO ' + schema.join(','));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
module.exports = executeSchema;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var log = require('../table/log');
|
|
2
|
+
var replaceParamChar = require('./replaceParamChar');
|
|
3
|
+
|
|
4
|
+
function wrapQuery(connection) {
|
|
5
|
+
var runOriginalQuery = connection.query;
|
|
6
|
+
return runQuery;
|
|
7
|
+
|
|
8
|
+
function runQuery(query, onCompleted) {
|
|
9
|
+
var params = query.parameters;
|
|
10
|
+
var sql = replaceParamChar(query, params);
|
|
11
|
+
query = {
|
|
12
|
+
text: sql,
|
|
13
|
+
values: params,
|
|
14
|
+
types: query.types
|
|
15
|
+
};
|
|
16
|
+
log.emitQuery({sql, parameters: params});
|
|
17
|
+
|
|
18
|
+
runOriginalQuery.call(connection, query, onInnerCompleted);
|
|
19
|
+
|
|
20
|
+
function onInnerCompleted(err, result) {
|
|
21
|
+
if (err)
|
|
22
|
+
onCompleted(err);
|
|
23
|
+
else {
|
|
24
|
+
if (Array.isArray(result))
|
|
25
|
+
result = result[result.length-1];
|
|
26
|
+
onCompleted(null, result.rows);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = wrapQuery;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var log = require('../table/log');
|
|
2
|
+
var replaceParamChar = require('./replaceParamChar');
|
|
3
|
+
var newStreamableQuery = require('./newStreamableQuery');
|
|
4
|
+
|
|
5
|
+
function wrapQueryStream(connection) {
|
|
6
|
+
var runOriginalQuery = connection.query;
|
|
7
|
+
return runQuery;
|
|
8
|
+
|
|
9
|
+
function runQuery(query, options) {
|
|
10
|
+
var params = query.parameters;
|
|
11
|
+
var sql = replaceParamChar(query, params);
|
|
12
|
+
log.emitQuery({sql, parameters: params});
|
|
13
|
+
query = newStreamableQuery(sql, params, options);
|
|
14
|
+
|
|
15
|
+
return runOriginalQuery.call(connection, query);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
module.exports = wrapQueryStream;
|
package/src/pools.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var pools = require('./newObject')();
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(pools, 'end', {
|
|
4
|
+
enumerable: false,
|
|
5
|
+
value: end
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
function end() {
|
|
9
|
+
var all = [];
|
|
10
|
+
for (var poolId in pools) {
|
|
11
|
+
var endPool = pools[poolId].end();
|
|
12
|
+
all.push(endPool);
|
|
13
|
+
}
|
|
14
|
+
return Promise.all(all);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = pools;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function negotiateParameters(parameters) {
|
|
2
|
+
if(parameters === undefined)
|
|
3
|
+
return [];
|
|
4
|
+
else if(parameters.length !== undefined)
|
|
5
|
+
return parameters;
|
|
6
|
+
else
|
|
7
|
+
throw new Error('Query has invalid parameters property. Must be undefined or array');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
module.exports = negotiateParameters;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function negotiateSql(query) {
|
|
2
|
+
if(typeof(query) === 'string')
|
|
3
|
+
return function() { return query; };
|
|
4
|
+
|
|
5
|
+
var sql = query.sql;
|
|
6
|
+
if(typeof(sql) === 'function')
|
|
7
|
+
return sql;
|
|
8
|
+
else if(typeof(sql) === 'string')
|
|
9
|
+
return function() { return sql; };
|
|
10
|
+
else
|
|
11
|
+
throw new Error('Query lacks sql property string or function');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = negotiateSql;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var negotiateSql = require('./negotiateSql');
|
|
2
|
+
var negotiateParameters = require('./negotiateParameters');
|
|
3
|
+
|
|
4
|
+
function wrapQuery(query) {
|
|
5
|
+
var safeSql = negotiateSql(query);
|
|
6
|
+
var safeParameters = negotiateParameters(query.parameters);
|
|
7
|
+
let obj = {
|
|
8
|
+
sql: safeSql,
|
|
9
|
+
parameters: safeParameters
|
|
10
|
+
};
|
|
11
|
+
if (query.types)
|
|
12
|
+
obj.types = query.types;
|
|
13
|
+
return obj;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
module.exports = wrapQuery;
|
package/src/query.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var executeQueries = require('./table/executeQueries');
|
|
2
|
+
var wrapQuery = require('./query/wrapQuery');
|
|
3
|
+
|
|
4
|
+
function doQuery(query) {
|
|
5
|
+
var wrappedQuery = wrapQuery(query);
|
|
6
|
+
return executeQueries([wrappedQuery]).then(unwrapResult);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function unwrapResult(results) {
|
|
10
|
+
return results[0];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
module.exports = doQuery;
|