ts-prorm-orm 1.1.0
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/CHANGELOG.md +1111 -0
- package/LICENSE +21 -0
- package/README.md +573 -0
- package/dist/audit/history-query.js +180 -0
- package/dist/audit/index.js +23 -0
- package/dist/audit/logger.js +236 -0
- package/dist/cache/cache-manager.js +84 -0
- package/dist/cache/index.js +16 -0
- package/dist/cache/redis-cluster-cache.js +557 -0
- package/dist/cli.js +2200 -0
- package/dist/compliance/audit-trail.js +68 -0
- package/dist/compliance/backup-verification.js +685 -0
- package/dist/compliance/breach-detector.js +505 -0
- package/dist/compliance/consent-record.js +227 -0
- package/dist/compliance/consent-versioning.js +331 -0
- package/dist/compliance/cross-border-log.js +530 -0
- package/dist/compliance/data-classifier.js +258 -0
- package/dist/compliance/data-lineage.js +565 -0
- package/dist/compliance/data-masker.js +303 -0
- package/dist/compliance/data-portability.js +265 -0
- package/dist/compliance/data-retention.js +195 -0
- package/dist/compliance/dsar-workflow.js +342 -0
- package/dist/compliance/field-encryption.js +223 -0
- package/dist/compliance/immutable-record.js +148 -0
- package/dist/compliance/index.js +260 -0
- package/dist/compliance/privacy-impact-assessment.js +364 -0
- package/dist/compliance/pseudonymization.js +269 -0
- package/dist/compliance/query-firewall.js +1182 -0
- package/dist/compliance/rate-limiter.js +580 -0
- package/dist/compliance/right-to-erasure.js +117 -0
- package/dist/compliance/row-level-security.js +246 -0
- package/dist/compliance/security-decorator.js +574 -0
- package/dist/compliance/security-monitor.js +525 -0
- package/dist/compliance/sensitive-data-discovery.js +476 -0
- package/dist/compliance/session-isolation.js +472 -0
- package/dist/compliance/tls-enforcer.js +108 -0
- package/dist/compliance/worm-storage.js +712 -0
- package/dist/connection-manager.js +198 -0
- package/dist/connection-pool.js +519 -0
- package/dist/decorators/audit.js +136 -0
- package/dist/decorators/belongs-to-many.js +115 -0
- package/dist/decorators/belongs-to.js +115 -0
- package/dist/decorators/check.js +435 -0
- package/dist/decorators/collate.js +329 -0
- package/dist/decorators/comment.js +205 -0
- package/dist/decorators/database-settings.js +236 -0
- package/dist/decorators/default.js +244 -0
- package/dist/decorators/encryption.js +235 -0
- package/dist/decorators/engine.js +97 -0
- package/dist/decorators/fk-constraints.js +594 -0
- package/dist/decorators/foreign-table.js +136 -0
- package/dist/decorators/generated.js +274 -0
- package/dist/decorators/has-many.js +127 -0
- package/dist/decorators/has-one.js +116 -0
- package/dist/decorators/hstore.js +129 -0
- package/dist/decorators/index.js +355 -0
- package/dist/decorators/json-column.js +83 -0
- package/dist/decorators/jsonb.js +101 -0
- package/dist/decorators/orm-decorators.js +425 -0
- package/dist/decorators/permissions.js +294 -0
- package/dist/decorators/procedure.js +210 -0
- package/dist/decorators/query-options.js +556 -0
- package/dist/decorators/range.js +167 -0
- package/dist/decorators/set-column.js +83 -0
- package/dist/decorators/spatial.js +114 -0
- package/dist/decorators/storage.js +580 -0
- package/dist/decorators/timezone.js +512 -0
- package/dist/decorators/trigger.js +90 -0
- package/dist/decorators/uuid.js +135 -0
- package/dist/decorators/view.js +258 -0
- package/dist/diagrams/chen-diagram.js +354 -0
- package/dist/diagrams/class-diagram.js +384 -0
- package/dist/diagrams/dependency-diagram.js +432 -0
- package/dist/diagrams/er-diagram.js +605 -0
- package/dist/diagrams/flow-diagram.js +394 -0
- package/dist/diagrams/gantt-diagram.js +411 -0
- package/dist/diagrams/index-diagram.js +353 -0
- package/dist/diagrams/index.js +184 -0
- package/dist/diagrams/migration-diagram.js +316 -0
- package/dist/diagrams/model-diagram.js +616 -0
- package/dist/diagrams/package-diagram.js +376 -0
- package/dist/diagrams/palette.js +85 -0
- package/dist/diagrams/relational-diagram.js +455 -0
- package/dist/diagrams/schemadoc-diagram.js +309 -0
- package/dist/diagrams/sequence-diagram.js +307 -0
- package/dist/diagrams/state-diagram.js +344 -0
- package/dist/diagrams/svg-dom.js +111 -0
- package/dist/diagrams/tree-diagram.js +250 -0
- package/dist/dialects/clickhouse/index.js +1742 -0
- package/dist/dialects/cockroachdb/index.js +4677 -0
- package/dist/dialects/cratedb/index.js +441 -0
- package/dist/dialects/databricks/index.js +517 -0
- package/dist/dialects/db2/index.js +2225 -0
- package/dist/dialects/dialect.js +720 -0
- package/dist/dialects/duckdb/index.js +2014 -0
- package/dist/dialects/exasol/index.js +357 -0
- package/dist/dialects/firebird/index.js +495 -0
- package/dist/dialects/greenplum/index.js +457 -0
- package/dist/dialects/hana/index.js +1741 -0
- package/dist/dialects/mariadb/index.js +3590 -0
- package/dist/dialects/mssql/index.js +2296 -0
- package/dist/dialects/mysql/index.js +4058 -0
- package/dist/dialects/oracle/index.js +2999 -0
- package/dist/dialects/postgres/index.js +5319 -0
- package/dist/dialects/query-stream-helper.js +152 -0
- package/dist/dialects/questdb/index.js +433 -0
- package/dist/dialects/redshift/index.js +2277 -0
- package/dist/dialects/singlestore/index.js +354 -0
- package/dist/dialects/snowflake/index.js +2082 -0
- package/dist/dialects/spanner/index.js +1768 -0
- package/dist/dialects/sqlite/index.js +3382 -0
- package/dist/dialects/tidb/index.js +377 -0
- package/dist/dialects/timescaledb/index.js +164 -0
- package/dist/dialects/trino/index.js +420 -0
- package/dist/dialects/turso/index.js +227 -0
- package/dist/dialects/vertica/index.js +317 -0
- package/dist/dialects/yugabytedb/index.js +424 -0
- package/dist/errors/index.js +472 -0
- package/dist/errors/utils.js +340 -0
- package/dist/errors.js +21 -0
- package/dist/extensions/catalog/cloud-warehouse-features.js +207 -0
- package/dist/extensions/catalog/mssql-features.js +147 -0
- package/dist/extensions/catalog/mysql-mariadb-plugins.js +229 -0
- package/dist/extensions/catalog/oracle-db2-features.js +196 -0
- package/dist/extensions/catalog/postgres-extensions.js +516 -0
- package/dist/extensions/index.js +71 -0
- package/dist/extensions/types.js +13 -0
- package/dist/foreign-data.js +173 -0
- package/dist/hooks/hooks-manager.js +350 -0
- package/dist/hooks/index.js +37 -0
- package/dist/index.js +463 -0
- package/dist/logging.js +335 -0
- package/dist/migrations/index.js +40 -0
- package/dist/migrations/migration.js +196 -0
- package/dist/migrations/migrator.js +411 -0
- package/dist/migrations/prormmigration.js +275 -0
- package/dist/migrations/query-interface.js +435 -0
- package/dist/migrations/seeder.js +353 -0
- package/dist/models/associations.js +852 -0
- package/dist/models/constraints.js +288 -0
- package/dist/models/data-types.js +2518 -0
- package/dist/models/decorators.js +445 -0
- package/dist/models/index.js +33 -0
- package/dist/models/indexes.js +531 -0
- package/dist/models/methods.js +382 -0
- package/dist/models/model-manager.js +103 -0
- package/dist/models/model.js +5349 -0
- package/dist/models/operators.js +67 -0
- package/dist/models/scopes.js +189 -0
- package/dist/models/typescript-types.js +26 -0
- package/dist/nosql/aerospike/index.js +205 -0
- package/dist/nosql/allegrograph/index.js +169 -0
- package/dist/nosql/arangodb/index.js +364 -0
- package/dist/nosql/azure-blob/index.js +206 -0
- package/dist/nosql/beanstalkd/index.js +231 -0
- package/dist/nosql/beequeue/index.js +210 -0
- package/dist/nosql/bigchaindb/index.js +195 -0
- package/dist/nosql/bigtable/index.js +224 -0
- package/dist/nosql/blazegraph/index.js +173 -0
- package/dist/nosql/bullmq/index.js +191 -0
- package/dist/nosql/cassandra/index.js +174 -0
- package/dist/nosql/chroma/index.js +190 -0
- package/dist/nosql/cloudflare-kv/index.js +220 -0
- package/dist/nosql/coherence/index.js +200 -0
- package/dist/nosql/cosmosdb/index.js +157 -0
- package/dist/nosql/couchbase/index.js +213 -0
- package/dist/nosql/dax/index.js +212 -0
- package/dist/nosql/deno-kv/index.js +206 -0
- package/dist/nosql/dgraph/index.js +171 -0
- package/dist/nosql/doris/index.js +169 -0
- package/dist/nosql/druid/index.js +162 -0
- package/dist/nosql/dynamodb/index.js +937 -0
- package/dist/nosql/elasticsearch/index.js +377 -0
- package/dist/nosql/etcd/index.js +502 -0
- package/dist/nosql/eventhubs/index.js +213 -0
- package/dist/nosql/eventstore/index.js +254 -0
- package/dist/nosql/faunadb/index.js +188 -0
- package/dist/nosql/firestore/index.js +177 -0
- package/dist/nosql/fluree/index.js +148 -0
- package/dist/nosql/fuseki/index.js +170 -0
- package/dist/nosql/gcs/index.js +172 -0
- package/dist/nosql/gearman/index.js +160 -0
- package/dist/nosql/geode/index.js +196 -0
- package/dist/nosql/graphdb/index.js +169 -0
- package/dist/nosql/graylog/index.js +188 -0
- package/dist/nosql/gridgain/index.js +171 -0
- package/dist/nosql/hazelcast/index.js +162 -0
- package/dist/nosql/hbase/index.js +230 -0
- package/dist/nosql/ignite/index.js +173 -0
- package/dist/nosql/immudb/index.js +184 -0
- package/dist/nosql/index.js +232 -0
- package/dist/nosql/infinispan/index.js +200 -0
- package/dist/nosql/influxdb/index.js +0 -0
- package/dist/nosql/kafka/index.js +234 -0
- package/dist/nosql/keyspaces/index.js +189 -0
- package/dist/nosql/kinesis/index.js +253 -0
- package/dist/nosql/leveldb/index.js +153 -0
- package/dist/nosql/lmdb/index.js +160 -0
- package/dist/nosql/loki/index.js +201 -0
- package/dist/nosql/marklogic/index.js +204 -0
- package/dist/nosql/materialize/index.js +145 -0
- package/dist/nosql/meilisearch/index.js +154 -0
- package/dist/nosql/memcached/index.js +223 -0
- package/dist/nosql/milvus/index.js +410 -0
- package/dist/nosql/minio/index.js +265 -0
- package/dist/nosql/momento/index.js +179 -0
- package/dist/nosql/mongodb/index.js +461 -0
- package/dist/nosql/nats/index.js +247 -0
- package/dist/nosql/nedb/index.js +164 -0
- package/dist/nosql/neo4j/index.js +450 -0
- package/dist/nosql/neptune/index.js +470 -0
- package/dist/nosql/nsq/index.js +200 -0
- package/dist/nosql/opensearch/index.js +186 -0
- package/dist/nosql/orientdb/index.js +175 -0
- package/dist/nosql/papertrail/index.js +200 -0
- package/dist/nosql/pinecone/index.js +0 -0
- package/dist/nosql/pinot/index.js +133 -0
- package/dist/nosql/pouchdb/index.js +172 -0
- package/dist/nosql/prometheus/index.js +174 -0
- package/dist/nosql/provendb/index.js +147 -0
- package/dist/nosql/pubsub/index.js +187 -0
- package/dist/nosql/pulsar/index.js +232 -0
- package/dist/nosql/qdrant/index.js +295 -0
- package/dist/nosql/qldb/index.js +192 -0
- package/dist/nosql/r2/index.js +281 -0
- package/dist/nosql/rabbitmq/index.js +237 -0
- package/dist/nosql/ravendb/index.js +175 -0
- package/dist/nosql/redis/index.js +607 -0
- package/dist/nosql/redpanda/index.js +237 -0
- package/dist/nosql/resque/index.js +203 -0
- package/dist/nosql/rethinkdb/index.js +232 -0
- package/dist/nosql/rocksdb/index.js +152 -0
- package/dist/nosql/rockset/index.js +126 -0
- package/dist/nosql/s3/index.js +298 -0
- package/dist/nosql/scylladb/index.js +178 -0
- package/dist/nosql/signoz/index.js +227 -0
- package/dist/nosql/sns/index.js +201 -0
- package/dist/nosql/solr/index.js +231 -0
- package/dist/nosql/splunk/index.js +227 -0
- package/dist/nosql/sqs/index.js +246 -0
- package/dist/nosql/stardog/index.js +169 -0
- package/dist/nosql/starrocks/index.js +170 -0
- package/dist/nosql/store.js +2 -0
- package/dist/nosql/sumologic/index.js +213 -0
- package/dist/nosql/surrealdb/index.js +179 -0
- package/dist/nosql/terminusdb/index.js +151 -0
- package/dist/nosql/tigergraph/index.js +469 -0
- package/dist/nosql/typesense/index.js +148 -0
- package/dist/nosql/unqlite/index.js +157 -0
- package/dist/nosql/upstash/index.js +167 -0
- package/dist/nosql/vercel-kv/index.js +166 -0
- package/dist/nosql/victoriametrics/index.js +213 -0
- package/dist/nosql/virtuoso/index.js +169 -0
- package/dist/nosql/weaviate/index.js +276 -0
- package/dist/operators/index.js +108 -0
- package/dist/operators.js +2690 -0
- package/dist/prisma-migrate/index.js +38 -0
- package/dist/prisma-migrate/migration-generator.js +125 -0
- package/dist/prisma-migrate/model-generator.js +172 -0
- package/dist/prisma-migrate/relations.js +100 -0
- package/dist/prisma-migrate/schema-parser.js +167 -0
- package/dist/prisma-migrate/type-mapper.js +40 -0
- package/dist/prorm.js +6832 -0
- package/dist/query-builders/cte-builder.js +80 -0
- package/dist/query-builders/functions/aggregate.js +390 -0
- package/dist/query-builders/functions/conditional.js +503 -0
- package/dist/query-builders/functions/datetime.js +695 -0
- package/dist/query-builders/functions/fulltext.js +439 -0
- package/dist/query-builders/functions/index.js +93 -0
- package/dist/query-builders/functions/json.js +427 -0
- package/dist/query-builders/functions/math.js +399 -0
- package/dist/query-builders/functions/string.js +518 -0
- package/dist/query-builders/functions/window.js +328 -0
- package/dist/query-builders/include-builder.js +323 -0
- package/dist/query-builders/index-expression-builder.js +242 -0
- package/dist/query-builders/index.js +161 -0
- package/dist/query-builders/insert-builder.js +164 -0
- package/dist/query-builders/model-helpers.js +38 -0
- package/dist/query-builders/order-limit-builder.js +239 -0
- package/dist/query-builders/sql-compiler.js +2040 -0
- package/dist/query-builders/subquery-builder.js +152 -0
- package/dist/query-builders/update-builder.js +182 -0
- package/dist/query-builders/view-builder.js +218 -0
- package/dist/query-builders/where-builder.js +1532 -0
- package/dist/query-interface.js +622 -0
- package/dist/query-optimizers/batch-optimizer.js +426 -0
- package/dist/query-optimizers/explain-plans.js +415 -0
- package/dist/query-optimizers/index.js +51 -0
- package/dist/query-optimizers/prepared-statement-cache.js +423 -0
- package/dist/query-optimizers/query-hints.js +438 -0
- package/dist/query-optimizers/query-optimizer.js +278 -0
- package/dist/query-optimizers/slow-query-logger.js +271 -0
- package/dist/replica-manager.js +507 -0
- package/dist/schema/index.js +15 -0
- package/dist/schema/migration-generator.js +374 -0
- package/dist/schema/schema-differ.js +549 -0
- package/dist/schema/types.js +6 -0
- package/dist/sql-constants.js +300 -0
- package/dist/sqlite-advanced.js +1047 -0
- package/dist/streams/index.js +12 -0
- package/dist/streams/transforms.js +178 -0
- package/dist/transaction.js +456 -0
- package/dist/types/index.js +180 -0
- package/dist/user-management.js +127 -0
- package/dist/utils/date.js +300 -0
- package/dist/utils/index.js +1079 -0
- package/dist/utils/string.js +161 -0
- package/dist/validators/index.js +19 -0
- package/dist/validators/validator.js +911 -0
- package/package.json +190 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenLink Virtuoso store implementation.
|
|
4
|
+
*
|
|
5
|
+
* Virtuoso is a multi-model server whose RDF triplestore is queried over the
|
|
6
|
+
* SPARQL 1.1 Protocol via a single combined HTTP endpoint (`/sparql`) used for
|
|
7
|
+
* both queries and updates (dispatched by request content-type). There is no
|
|
8
|
+
* SQL-shaped RDF surface here, so it implements the minimal `NoSqlStore`
|
|
9
|
+
* marker interface (`src/nosql/store.ts`) rather than the SQL `Dialect`
|
|
10
|
+
* interface.
|
|
11
|
+
*
|
|
12
|
+
* ## No canonical driver - HTTP over `fetch`
|
|
13
|
+
*
|
|
14
|
+
* Virtuoso's SPARQL endpoint is just an HTTP/SPARQL API. This store talks to
|
|
15
|
+
* the server with the global `fetch`. For tests (and for callers who want
|
|
16
|
+
* their own transport) an alternative client can be injected via
|
|
17
|
+
* `VirtuosoStoreOptions.client`; when omitted, a tiny internal client over
|
|
18
|
+
* `fetch` + `endpoint` is built at connect time.
|
|
19
|
+
*
|
|
20
|
+
* ## Surface
|
|
21
|
+
*
|
|
22
|
+
* - `query(sparql)` -> POST to `/sparql`, returns bindings
|
|
23
|
+
* - `update(sparql)` -> POST to `/sparql`
|
|
24
|
+
* - `ask(sparql)` -> POST an ASK query, returns the boolean
|
|
25
|
+
* - `add(triples)` -> `INSERT DATA { ... }` update
|
|
26
|
+
* - `drop(graph?)` -> `DROP GRAPH <g>` / `DROP ALL` update
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.VirtuosoStore = exports.DEFAULT_VIRTUOSO_SPARQL_PATH = exports.DEFAULT_VIRTUOSO_ENDPOINT = void 0;
|
|
30
|
+
exports.createFetchClient = createFetchClient;
|
|
31
|
+
const errors_1 = require("../../errors");
|
|
32
|
+
/** Default Virtuoso base URL. */
|
|
33
|
+
exports.DEFAULT_VIRTUOSO_ENDPOINT = 'http://localhost:8890';
|
|
34
|
+
/** SPARQL endpoint path. */
|
|
35
|
+
exports.DEFAULT_VIRTUOSO_SPARQL_PATH = '/sparql';
|
|
36
|
+
/** Build a `fetch`-backed SPARQL client for the given endpoint. */
|
|
37
|
+
function createFetchClient(endpoint, headers) {
|
|
38
|
+
const base = endpoint.endsWith('/') ? endpoint : `${endpoint}/`;
|
|
39
|
+
const buildUrl = (path) => new URL(path.replace(/^\//, ''), base).toString();
|
|
40
|
+
return {
|
|
41
|
+
async query(path, sparql) {
|
|
42
|
+
const res = await fetch(buildUrl(path), {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: {
|
|
45
|
+
'Content-Type': 'application/sparql-query',
|
|
46
|
+
Accept: 'application/sparql-results+json',
|
|
47
|
+
...(headers ?? {}),
|
|
48
|
+
},
|
|
49
|
+
body: sparql,
|
|
50
|
+
});
|
|
51
|
+
if (!res.ok)
|
|
52
|
+
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
53
|
+
return res.json();
|
|
54
|
+
},
|
|
55
|
+
async update(path, sparql) {
|
|
56
|
+
const res = await fetch(buildUrl(path), {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: { 'Content-Type': 'application/sparql-update', ...(headers ?? {}) },
|
|
59
|
+
body: sparql,
|
|
60
|
+
});
|
|
61
|
+
if (!res.ok)
|
|
62
|
+
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
63
|
+
const text = await res.text();
|
|
64
|
+
return text || undefined;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* `VirtuosoStore` wraps Virtuoso's `/sparql` endpoint behind the `NoSqlStore`
|
|
70
|
+
* lifecycle.
|
|
71
|
+
*/
|
|
72
|
+
class VirtuosoStore {
|
|
73
|
+
constructor(options = {}) {
|
|
74
|
+
this.name = 'virtuoso';
|
|
75
|
+
this.library = 'fetch';
|
|
76
|
+
this.client = null;
|
|
77
|
+
this.connected = false;
|
|
78
|
+
this.endpoint = options.endpoint ?? exports.DEFAULT_VIRTUOSO_ENDPOINT;
|
|
79
|
+
this.sparqlPath = options.sparqlPath ?? exports.DEFAULT_VIRTUOSO_SPARQL_PATH;
|
|
80
|
+
this.injectedClient = options.client;
|
|
81
|
+
this.headers = options.headers;
|
|
82
|
+
}
|
|
83
|
+
/** SPARQL query endpoint path. */
|
|
84
|
+
get queryPath() {
|
|
85
|
+
return this.sparqlPath;
|
|
86
|
+
}
|
|
87
|
+
/** SPARQL update endpoint path (same endpoint). */
|
|
88
|
+
get updatePath() {
|
|
89
|
+
return this.sparqlPath;
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------
|
|
92
|
+
// Connection lifecycle
|
|
93
|
+
// ---------------------------------------------------------------------
|
|
94
|
+
async connect() {
|
|
95
|
+
if (this.connected && this.client)
|
|
96
|
+
return;
|
|
97
|
+
this.client = this.injectedClient ?? createFetchClient(this.endpoint, this.headers);
|
|
98
|
+
this.connected = true;
|
|
99
|
+
}
|
|
100
|
+
async disconnect() {
|
|
101
|
+
this.client = null;
|
|
102
|
+
this.connected = false;
|
|
103
|
+
}
|
|
104
|
+
isConnected() {
|
|
105
|
+
return this.connected && this.client !== null;
|
|
106
|
+
}
|
|
107
|
+
/** Returns the underlying (internal or injected) SPARQL HTTP client. */
|
|
108
|
+
getClient() {
|
|
109
|
+
return this.requireClient();
|
|
110
|
+
}
|
|
111
|
+
requireClient() {
|
|
112
|
+
if (!this.client) {
|
|
113
|
+
throw new errors_1.ConnectionError('Not connected to Virtuoso', {
|
|
114
|
+
database: 'virtuoso',
|
|
115
|
+
host: this.endpoint,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return this.client;
|
|
119
|
+
}
|
|
120
|
+
// ---------------------------------------------------------------------
|
|
121
|
+
// SPARQL surface
|
|
122
|
+
// ---------------------------------------------------------------------
|
|
123
|
+
/** Runs a SPARQL SELECT/CONSTRUCT query; returns the result bindings. */
|
|
124
|
+
async query(sparql) {
|
|
125
|
+
const client = this.requireClient();
|
|
126
|
+
try {
|
|
127
|
+
const body = await client.query(this.queryPath, sparql);
|
|
128
|
+
return body?.results?.bindings ?? [];
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const parent = err instanceof Error ? err : new Error(String(err));
|
|
132
|
+
throw errors_1.DatabaseError.from(parent, { message: `Virtuoso query failed: ${parent.message}`, sql: sparql });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** Runs a SPARQL ASK query; returns the boolean answer. */
|
|
136
|
+
async ask(sparql) {
|
|
137
|
+
const client = this.requireClient();
|
|
138
|
+
try {
|
|
139
|
+
const body = await client.query(this.queryPath, sparql);
|
|
140
|
+
return Boolean(body?.boolean);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
const parent = err instanceof Error ? err : new Error(String(err));
|
|
144
|
+
throw errors_1.DatabaseError.from(parent, { message: `Virtuoso ask failed: ${parent.message}`, sql: sparql });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** Runs a SPARQL UPDATE (INSERT/DELETE/DROP/...). */
|
|
148
|
+
async update(sparql) {
|
|
149
|
+
const client = this.requireClient();
|
|
150
|
+
try {
|
|
151
|
+
return await client.update(this.updatePath, sparql);
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
const parent = err instanceof Error ? err : new Error(String(err));
|
|
155
|
+
throw errors_1.DatabaseError.from(parent, { message: `Virtuoso update failed: ${parent.message}`, sql: sparql });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** Inserts triples via `INSERT DATA { ... }`. Accepts a triple string or array. */
|
|
159
|
+
async add(triples, graph) {
|
|
160
|
+
const body = Array.isArray(triples) ? triples.join('\n') : triples;
|
|
161
|
+
const inner = graph ? `GRAPH <${graph}> { ${body} }` : body;
|
|
162
|
+
return this.update(`INSERT DATA { ${inner} }`);
|
|
163
|
+
}
|
|
164
|
+
/** Drops a named graph, or all graphs when no graph is given. */
|
|
165
|
+
async drop(graph) {
|
|
166
|
+
return this.update(graph ? `DROP GRAPH <${graph}>` : 'DROP ALL');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.VirtuosoStore = VirtuosoStore;
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Weaviate store implementation.
|
|
4
|
+
*
|
|
5
|
+
* Weaviate is a vector database: collections ("classes") hold objects (a
|
|
6
|
+
* UUID, a JSON `properties` bag, and one or more dense vectors), and the
|
|
7
|
+
* primary query shape is "find the objects whose vector is closest to this
|
|
8
|
+
* vector/text" (optionally constrained by a structured filter), plus plain
|
|
9
|
+
* property-filtered fetches - not SQL, not `WHERE`, not joins. It does not
|
|
10
|
+
* fit the SQL-shaped `Dialect` interface used by the SQL dialects in this
|
|
11
|
+
* repo, so this class implements the minimal `NoSqlStore` marker interface
|
|
12
|
+
* and exposes Weaviate's real collection/object/query operations instead of
|
|
13
|
+
* forcing them into a `query(sql)` shape.
|
|
14
|
+
*
|
|
15
|
+
* Uses the official `weaviate-client` (v3) driver, which exposes a
|
|
16
|
+
* collection-oriented fluent API (`client.collections.get(name).data.*` /
|
|
17
|
+
* `.query.*`) built on gRPC, rather than the older `weaviate-ts-client` (v2)
|
|
18
|
+
* REST/GraphQL client.
|
|
19
|
+
*/
|
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.WeaviateStore = void 0;
|
|
25
|
+
const weaviate_client_1 = __importDefault(require("weaviate-client"));
|
|
26
|
+
const errors_1 = require("../../errors");
|
|
27
|
+
function wrapConnectionError(err, host) {
|
|
28
|
+
const parent = err instanceof Error ? err : new Error(String(err));
|
|
29
|
+
const message = /ECONNREFUSED|fetch failed|WeaviateConnectionError/i.test(parent.message)
|
|
30
|
+
? 'Connection refused'
|
|
31
|
+
: `Unable to connect to Weaviate: ${parent.message}`;
|
|
32
|
+
return new errors_1.ConnectionError(message, { parent, database: 'weaviate', host });
|
|
33
|
+
}
|
|
34
|
+
function wrapDatabaseError(err, message) {
|
|
35
|
+
const parent = err instanceof Error ? err : new Error(String(err));
|
|
36
|
+
// Keep the `action` context (e.g. "Weaviate NEAR VECTOR failed") but don't
|
|
37
|
+
// discard the real underlying Weaviate error text (e.g. "collection
|
|
38
|
+
// 'Article' not found") - append it so callers inspecting `err.message`
|
|
39
|
+
// still see what actually went wrong.
|
|
40
|
+
const combined = message ? `${message}: ${parent.message}` : parent.message;
|
|
41
|
+
return errors_1.DatabaseError.from(parent, { message: combined });
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* `WeaviateStore` wraps a `weaviate-client` (v3) `WeaviateClient` and exposes
|
|
45
|
+
* Weaviate's collection management, object insert/query/update/delete, and
|
|
46
|
+
* near-vector/near-text similarity search as a typed, promise-based API.
|
|
47
|
+
*/
|
|
48
|
+
class WeaviateStore {
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.name = 'weaviate';
|
|
51
|
+
this.library = 'weaviate-client';
|
|
52
|
+
this.client = null;
|
|
53
|
+
this.connected = false;
|
|
54
|
+
this.options = options;
|
|
55
|
+
}
|
|
56
|
+
// ---------------------------------------------------------------------
|
|
57
|
+
// Connection lifecycle
|
|
58
|
+
// ---------------------------------------------------------------------
|
|
59
|
+
async connect() {
|
|
60
|
+
if (this.connected && this.client) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const client = this.options.clusterURL
|
|
65
|
+
? await weaviate_client_1.default.connectToWeaviateCloud(this.options.clusterURL, this.options)
|
|
66
|
+
: await weaviate_client_1.default.connectToLocal(this.options);
|
|
67
|
+
// Unlike ioredis, `connectToLocal`/`connectToWeaviateCloud` already
|
|
68
|
+
// perform init checks (readiness/liveness) by default and throw if
|
|
69
|
+
// they fail, so there's no separate "verify the connection" step
|
|
70
|
+
// needed here - a resolved promise means the client is usable.
|
|
71
|
+
this.client = client;
|
|
72
|
+
this.connected = true;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
this.client = null;
|
|
76
|
+
this.connected = false;
|
|
77
|
+
throw wrapConnectionError(err, this.hostForErrors());
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
hostForErrors() {
|
|
81
|
+
if (this.options.clusterURL) {
|
|
82
|
+
return this.options.clusterURL;
|
|
83
|
+
}
|
|
84
|
+
const local = this.options;
|
|
85
|
+
return local.host;
|
|
86
|
+
}
|
|
87
|
+
async disconnect() {
|
|
88
|
+
if (this.client) {
|
|
89
|
+
await this.client.close();
|
|
90
|
+
this.client = null;
|
|
91
|
+
}
|
|
92
|
+
this.connected = false;
|
|
93
|
+
}
|
|
94
|
+
isConnected() {
|
|
95
|
+
return this.connected && this.client !== null;
|
|
96
|
+
}
|
|
97
|
+
/** Returns the underlying `weaviate-client` `WeaviateClient` for anything not wrapped here. */
|
|
98
|
+
getClient() {
|
|
99
|
+
return this.requireClient();
|
|
100
|
+
}
|
|
101
|
+
requireClient() {
|
|
102
|
+
if (!this.client) {
|
|
103
|
+
throw new errors_1.ConnectionError('Not connected to Weaviate', { database: 'weaviate' });
|
|
104
|
+
}
|
|
105
|
+
return this.client;
|
|
106
|
+
}
|
|
107
|
+
async exec(fn, action) {
|
|
108
|
+
const client = this.requireClient();
|
|
109
|
+
try {
|
|
110
|
+
return await fn(client);
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
throw wrapDatabaseError(err, `Weaviate ${action} failed`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
collection(collectionName) {
|
|
117
|
+
return this.requireClient().collections.get(collectionName);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Build a `FilterValue` (see `nearVector()`/`fetchObjects()`/`deleteMany()`'s
|
|
121
|
+
* `filters` option) against a collection's schema, e.g.
|
|
122
|
+
* `store.filter('Article').byProperty('title').equal('Hello')`.
|
|
123
|
+
*/
|
|
124
|
+
filter(collectionName) {
|
|
125
|
+
return this.collection(collectionName).filter;
|
|
126
|
+
}
|
|
127
|
+
// ---------------------------------------------------------------------
|
|
128
|
+
// Collection (class) management
|
|
129
|
+
// ---------------------------------------------------------------------
|
|
130
|
+
/**
|
|
131
|
+
* Create a new collection ("class"). `properties` declares the object
|
|
132
|
+
* schema (name/dataType/indexing per field); `vectorizer` configures how
|
|
133
|
+
* vectors are produced - pass `weaviate.configure.vectorizer.none()` for
|
|
134
|
+
* bring-your-own vectors, or a module config like
|
|
135
|
+
* `weaviate.configure.vectorizer.text2VecOpenAI()` to have Weaviate call
|
|
136
|
+
* out to an embedding provider (which requires the corresponding API key
|
|
137
|
+
* in `headers`, e.g. `X-OpenAI-Api-Key`, at connect time).
|
|
138
|
+
*/
|
|
139
|
+
async createCollection(collectionName, properties = [], vectorizer, options = {}) {
|
|
140
|
+
return this.exec(async (c) => {
|
|
141
|
+
const created = await c.collections.create({
|
|
142
|
+
name: collectionName,
|
|
143
|
+
properties,
|
|
144
|
+
vectorizers: vectorizer,
|
|
145
|
+
...options,
|
|
146
|
+
});
|
|
147
|
+
return created.config.get();
|
|
148
|
+
}, 'CREATE COLLECTION');
|
|
149
|
+
}
|
|
150
|
+
/** Delete a collection and all of its objects. */
|
|
151
|
+
async deleteCollection(collectionName) {
|
|
152
|
+
return this.exec((c) => c.collections.delete(collectionName), 'DELETE COLLECTION');
|
|
153
|
+
}
|
|
154
|
+
/** List every collection's configuration. */
|
|
155
|
+
async listCollections() {
|
|
156
|
+
return this.exec((c) => c.collections.listAll(), 'LIST COLLECTIONS');
|
|
157
|
+
}
|
|
158
|
+
/** Whether a collection with this name exists. */
|
|
159
|
+
async collectionExists(collectionName) {
|
|
160
|
+
return this.exec((c) => c.collections.exists(collectionName), 'COLLECTION EXISTS');
|
|
161
|
+
}
|
|
162
|
+
/** Detailed schema/config for one collection (properties, vectorizer, replication, etc). */
|
|
163
|
+
async getCollection(collectionName) {
|
|
164
|
+
return this.exec((c) => c.collections.export(collectionName), 'GET COLLECTION');
|
|
165
|
+
}
|
|
166
|
+
// ---------------------------------------------------------------------
|
|
167
|
+
// Object insert
|
|
168
|
+
// ---------------------------------------------------------------------
|
|
169
|
+
/**
|
|
170
|
+
* Insert a single object. `object.vector` (renamed `vectors` on the wire)
|
|
171
|
+
* may be omitted entirely for collections with a server-side vectorizer
|
|
172
|
+
* module, or supplied explicitly (a plain array, or a `{ name: vector }`
|
|
173
|
+
* map for named-vector collections) for `none`/self-provided vectorizers.
|
|
174
|
+
* Returns the object's UUID (generated if `object.id` wasn't given).
|
|
175
|
+
*/
|
|
176
|
+
async insertObject(collectionName, object = {}) {
|
|
177
|
+
return this.exec((c) => c.collections.get(collectionName).data.insert(object), 'INSERT');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Insert multiple objects in a single request (no client-side batching -
|
|
181
|
+
* all `objects` are sent together). Per-object failures are reported in
|
|
182
|
+
* the returned `errors`/`hasErrors` rather than rejecting the whole call;
|
|
183
|
+
* check `hasErrors` to detect partial failures.
|
|
184
|
+
*/
|
|
185
|
+
async insertMany(collectionName, objects) {
|
|
186
|
+
return this.exec((c) => c.collections.get(collectionName).data.insertMany(objects), 'INSERT MANY');
|
|
187
|
+
}
|
|
188
|
+
// ---------------------------------------------------------------------
|
|
189
|
+
// Query / similarity search
|
|
190
|
+
// ---------------------------------------------------------------------
|
|
191
|
+
/** Find the objects whose vector is closest to `vector`, optionally constrained by `options.filters`. */
|
|
192
|
+
async nearVector(collectionName, vector, options = {}) {
|
|
193
|
+
return this.exec((c) => c.collections.get(collectionName).query.nearVector(vector, options), 'NEAR VECTOR');
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Find the objects whose vector is closest to the vectorized form of
|
|
197
|
+
* `query` (a single string, or multiple strings averaged together).
|
|
198
|
+
* Requires the collection to have a text vectorizer module configured
|
|
199
|
+
* (this is not a keyword/BM25 search - use `getClient()` for that).
|
|
200
|
+
*/
|
|
201
|
+
async nearText(collectionName, query, options = {}) {
|
|
202
|
+
return this.exec((c) => c.collections.get(collectionName).query.nearText(query, options), 'NEAR TEXT');
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Fetch objects without a similarity search - the vector-store analogue
|
|
206
|
+
* of `SELECT ... WHERE ...`. Supports `limit`/`offset`/cursor-based
|
|
207
|
+
* pagination (`after`), `filters`, and `returnProperties` to select which
|
|
208
|
+
* fields come back.
|
|
209
|
+
*/
|
|
210
|
+
async fetchObjects(collectionName, options = {}) {
|
|
211
|
+
return this.exec((c) => c.collections.get(collectionName).query.fetchObjects(options), 'FETCH OBJECTS');
|
|
212
|
+
}
|
|
213
|
+
/** Fetch a single object by its UUID. Returns `null` if no object with that ID exists. */
|
|
214
|
+
async fetchObjectById(collectionName, id, options = {}) {
|
|
215
|
+
return this.exec((c) => c.collections.get(collectionName).query.fetchObjectById(id, options), 'FETCH OBJECT BY ID');
|
|
216
|
+
}
|
|
217
|
+
// ---------------------------------------------------------------------
|
|
218
|
+
// Update / replace
|
|
219
|
+
// ---------------------------------------------------------------------
|
|
220
|
+
/**
|
|
221
|
+
* Partially update an object (`PATCH` semantics) - only the fields in
|
|
222
|
+
* `fields.properties`/`fields.vectors` are changed; everything else on
|
|
223
|
+
* the object is left as-is.
|
|
224
|
+
*/
|
|
225
|
+
async updateObject(collectionName, id, fields) {
|
|
226
|
+
return this.exec((c) => c.collections.get(collectionName).data.update({ id, ...fields }), 'UPDATE');
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Fully replace an object (`PUT` semantics) - any property not present in
|
|
230
|
+
* `fields.properties` is cleared, unlike `updateObject()`.
|
|
231
|
+
*/
|
|
232
|
+
async replaceObject(collectionName, id, fields) {
|
|
233
|
+
return this.exec((c) => c.collections.get(collectionName).data.replace({ id, ...fields }), 'REPLACE');
|
|
234
|
+
}
|
|
235
|
+
// ---------------------------------------------------------------------
|
|
236
|
+
// Delete
|
|
237
|
+
// ---------------------------------------------------------------------
|
|
238
|
+
/** Whether an object with this UUID exists in the collection. */
|
|
239
|
+
async objectExists(collectionName, id) {
|
|
240
|
+
return this.exec((c) => c.collections.get(collectionName).data.exists(id), 'OBJECT EXISTS');
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Delete a single object by its UUID. Returns `true` if an object was
|
|
244
|
+
* actually deleted.
|
|
245
|
+
*
|
|
246
|
+
* The real `weaviate-client` `data.deleteById()` issues a REST `DELETE`
|
|
247
|
+
* and resolves `true` unconditionally (Weaviate's `DELETE
|
|
248
|
+
* /objects/{id}` returns success whether or not an object with that id
|
|
249
|
+
* existed) - it does not itself report whether anything was deleted.
|
|
250
|
+
* Check existence first so the documented "returns whether something
|
|
251
|
+
* was actually deleted" contract holds against the real driver, not
|
|
252
|
+
* just the test mock (whose `Map.delete()` happens to return that for
|
|
253
|
+
* free).
|
|
254
|
+
*/
|
|
255
|
+
async deleteObject(collectionName, id) {
|
|
256
|
+
return this.exec(async (c) => {
|
|
257
|
+
const collection = c.collections.get(collectionName);
|
|
258
|
+
const existed = await collection.data.exists(id);
|
|
259
|
+
if (!existed) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
await collection.data.deleteById(id);
|
|
263
|
+
return true;
|
|
264
|
+
}, 'DELETE');
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Delete every object matching `where` (build one with `filter()`). Pass
|
|
268
|
+
* `{ verbose: true }` to get back the per-object outcome in
|
|
269
|
+
* `result.objects`; otherwise only the aggregate counts are populated.
|
|
270
|
+
*/
|
|
271
|
+
async deleteMany(collectionName, where, options = {}) {
|
|
272
|
+
return this.exec((c) => c.collections.get(collectionName).data.deleteMany(where, options), 'DELETE MANY');
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
exports.WeaviateStore = WeaviateStore;
|
|
276
|
+
exports.default = WeaviateStore;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Operators module - re-exports all operators and helper functions
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.endsWith = exports.notStartsWith = exports.startsWith = exports.arrayAll = exports.arrayAny = exports.arrayOverlaps = exports.arrayContainedBy = exports.arrayContains = exports.jsonPathQuery = exports.jsonPathExists = exports.jsonDeletePath = exports.jsonDelete = exports.jsonConcat = exports.jsonHasKey = exports.jsonContains = exports.jsonKey = exports.json = exports.overlap = exports.contains = exports.notExists = exports.exists = exports.isNotNull = exports.isNull = exports.notBetween = exports.between = exports.notIn = exports.inOp = exports.notIRegexp = exports.iRegexp = exports.notRegexp = exports.regexp = exports.notILike = exports.iLike = exports.notLike = exports.like = exports.lte = exports.lt = exports.gte = exports.gt = exports.ne = exports.eq = exports.not = exports.or = exports.and = exports.where = exports.operatorToWhereKey = exports.getOperatorString = exports.isOperator = exports.Operators = exports.Op = void 0;
|
|
7
|
+
exports.isOrderExpression = exports.random = exports.desc = exports.asc = exports.phraseToTsquery = exports.plainToTsquery = exports.toTsquery = exports.toTsvector = exports.matchFulltext = exports.matchAgainst = exports.Cast = exports.isConvExpression = exports.isExtractExpression = exports.isCastExpression = exports.conv = exports.extract = exports.cast = exports.isRawLiteral = exports.isLiteralExpression = exports.isColExpression = exports.isFnExpression = exports.literalExpr = exports.literal = exports.col = exports.fn = exports.all = exports.any = exports.notSubstring = exports.substring = exports.notEndsWith = void 0;
|
|
8
|
+
// Re-export all operators and symbols
|
|
9
|
+
var operators_1 = require("../operators");
|
|
10
|
+
Object.defineProperty(exports, "Op", { enumerable: true, get: function () { return operators_1.Op; } });
|
|
11
|
+
Object.defineProperty(exports, "Operators", { enumerable: true, get: function () { return operators_1.Operators; } });
|
|
12
|
+
Object.defineProperty(exports, "isOperator", { enumerable: true, get: function () { return operators_1.isOperator; } });
|
|
13
|
+
Object.defineProperty(exports, "getOperatorString", { enumerable: true, get: function () { return operators_1.getOperatorString; } });
|
|
14
|
+
Object.defineProperty(exports, "operatorToWhereKey", { enumerable: true, get: function () { return operators_1.operatorToWhereKey; } });
|
|
15
|
+
// Re-export helper functions
|
|
16
|
+
var operators_2 = require("../operators");
|
|
17
|
+
// Core where helpers
|
|
18
|
+
Object.defineProperty(exports, "where", { enumerable: true, get: function () { return operators_2.where; } });
|
|
19
|
+
Object.defineProperty(exports, "and", { enumerable: true, get: function () { return operators_2.and; } });
|
|
20
|
+
Object.defineProperty(exports, "or", { enumerable: true, get: function () { return operators_2.or; } });
|
|
21
|
+
Object.defineProperty(exports, "not", { enumerable: true, get: function () { return operators_2.not; } });
|
|
22
|
+
// Comparison helpers
|
|
23
|
+
Object.defineProperty(exports, "eq", { enumerable: true, get: function () { return operators_2.eq; } });
|
|
24
|
+
Object.defineProperty(exports, "ne", { enumerable: true, get: function () { return operators_2.ne; } });
|
|
25
|
+
Object.defineProperty(exports, "gt", { enumerable: true, get: function () { return operators_2.gt; } });
|
|
26
|
+
Object.defineProperty(exports, "gte", { enumerable: true, get: function () { return operators_2.gte; } });
|
|
27
|
+
Object.defineProperty(exports, "lt", { enumerable: true, get: function () { return operators_2.lt; } });
|
|
28
|
+
Object.defineProperty(exports, "lte", { enumerable: true, get: function () { return operators_2.lte; } });
|
|
29
|
+
// Like operators
|
|
30
|
+
Object.defineProperty(exports, "like", { enumerable: true, get: function () { return operators_2.like; } });
|
|
31
|
+
Object.defineProperty(exports, "notLike", { enumerable: true, get: function () { return operators_2.notLike; } });
|
|
32
|
+
Object.defineProperty(exports, "iLike", { enumerable: true, get: function () { return operators_2.iLike; } });
|
|
33
|
+
Object.defineProperty(exports, "notILike", { enumerable: true, get: function () { return operators_2.notILike; } });
|
|
34
|
+
// Regexp operators
|
|
35
|
+
Object.defineProperty(exports, "regexp", { enumerable: true, get: function () { return operators_2.regexp; } });
|
|
36
|
+
Object.defineProperty(exports, "notRegexp", { enumerable: true, get: function () { return operators_2.notRegexp; } });
|
|
37
|
+
Object.defineProperty(exports, "iRegexp", { enumerable: true, get: function () { return operators_2.iRegexp; } });
|
|
38
|
+
Object.defineProperty(exports, "notIRegexp", { enumerable: true, get: function () { return operators_2.notIRegexp; } });
|
|
39
|
+
// Array/in operators
|
|
40
|
+
Object.defineProperty(exports, "inOp", { enumerable: true, get: function () { return operators_2.in; } });
|
|
41
|
+
Object.defineProperty(exports, "notIn", { enumerable: true, get: function () { return operators_2.notIn; } });
|
|
42
|
+
Object.defineProperty(exports, "between", { enumerable: true, get: function () { return operators_2.between; } });
|
|
43
|
+
Object.defineProperty(exports, "notBetween", { enumerable: true, get: function () { return operators_2.notBetween; } });
|
|
44
|
+
// Null operators
|
|
45
|
+
Object.defineProperty(exports, "isNull", { enumerable: true, get: function () { return operators_2.isNull; } });
|
|
46
|
+
Object.defineProperty(exports, "isNotNull", { enumerable: true, get: function () { return operators_2.isNotNull; } });
|
|
47
|
+
// Exists operators for anti-joins
|
|
48
|
+
Object.defineProperty(exports, "exists", { enumerable: true, get: function () { return operators_2.exists; } });
|
|
49
|
+
Object.defineProperty(exports, "notExists", { enumerable: true, get: function () { return operators_2.notExists; } });
|
|
50
|
+
// JSON/Array operators
|
|
51
|
+
Object.defineProperty(exports, "contains", { enumerable: true, get: function () { return operators_2.contains; } });
|
|
52
|
+
Object.defineProperty(exports, "overlap", { enumerable: true, get: function () { return operators_2.overlap; } });
|
|
53
|
+
Object.defineProperty(exports, "json", { enumerable: true, get: function () { return operators_2.json; } });
|
|
54
|
+
Object.defineProperty(exports, "jsonKey", { enumerable: true, get: function () { return operators_2.jsonKey; } });
|
|
55
|
+
Object.defineProperty(exports, "jsonContains", { enumerable: true, get: function () { return operators_2.jsonContains; } });
|
|
56
|
+
Object.defineProperty(exports, "jsonHasKey", { enumerable: true, get: function () { return operators_2.jsonHasKey; } });
|
|
57
|
+
Object.defineProperty(exports, "jsonConcat", { enumerable: true, get: function () { return operators_2.jsonConcat; } });
|
|
58
|
+
Object.defineProperty(exports, "jsonDelete", { enumerable: true, get: function () { return operators_2.jsonDelete; } });
|
|
59
|
+
Object.defineProperty(exports, "jsonDeletePath", { enumerable: true, get: function () { return operators_2.jsonDeletePath; } });
|
|
60
|
+
Object.defineProperty(exports, "jsonPathExists", { enumerable: true, get: function () { return operators_2.jsonPathExists; } });
|
|
61
|
+
Object.defineProperty(exports, "jsonPathQuery", { enumerable: true, get: function () { return operators_2.jsonPathQuery; } });
|
|
62
|
+
// PostgreSQL Array operators
|
|
63
|
+
Object.defineProperty(exports, "arrayContains", { enumerable: true, get: function () { return operators_2.arrayContains; } });
|
|
64
|
+
Object.defineProperty(exports, "arrayContainedBy", { enumerable: true, get: function () { return operators_2.arrayContainedBy; } });
|
|
65
|
+
Object.defineProperty(exports, "arrayOverlaps", { enumerable: true, get: function () { return operators_2.arrayOverlaps; } });
|
|
66
|
+
Object.defineProperty(exports, "arrayAny", { enumerable: true, get: function () { return operators_2.arrayAny; } });
|
|
67
|
+
Object.defineProperty(exports, "arrayAll", { enumerable: true, get: function () { return operators_2.arrayAll; } });
|
|
68
|
+
// Search operators
|
|
69
|
+
Object.defineProperty(exports, "startsWith", { enumerable: true, get: function () { return operators_2.startsWith; } });
|
|
70
|
+
Object.defineProperty(exports, "notStartsWith", { enumerable: true, get: function () { return operators_2.notStartsWith; } });
|
|
71
|
+
Object.defineProperty(exports, "endsWith", { enumerable: true, get: function () { return operators_2.endsWith; } });
|
|
72
|
+
Object.defineProperty(exports, "notEndsWith", { enumerable: true, get: function () { return operators_2.notEndsWith; } });
|
|
73
|
+
Object.defineProperty(exports, "substring", { enumerable: true, get: function () { return operators_2.substring; } });
|
|
74
|
+
Object.defineProperty(exports, "notSubstring", { enumerable: true, get: function () { return operators_2.notSubstring; } });
|
|
75
|
+
// Array ANY/ALL operators
|
|
76
|
+
Object.defineProperty(exports, "any", { enumerable: true, get: function () { return operators_2.any; } });
|
|
77
|
+
Object.defineProperty(exports, "all", { enumerable: true, get: function () { return operators_2.all; } });
|
|
78
|
+
// SQL Functions
|
|
79
|
+
Object.defineProperty(exports, "fn", { enumerable: true, get: function () { return operators_2.fn; } });
|
|
80
|
+
Object.defineProperty(exports, "col", { enumerable: true, get: function () { return operators_2.col; } });
|
|
81
|
+
Object.defineProperty(exports, "literal", { enumerable: true, get: function () { return operators_2.literal; } });
|
|
82
|
+
Object.defineProperty(exports, "literalExpr", { enumerable: true, get: function () { return operators_2.literalExpr; } });
|
|
83
|
+
Object.defineProperty(exports, "isFnExpression", { enumerable: true, get: function () { return operators_2.isFnExpression; } });
|
|
84
|
+
Object.defineProperty(exports, "isColExpression", { enumerable: true, get: function () { return operators_2.isColExpression; } });
|
|
85
|
+
Object.defineProperty(exports, "isLiteralExpression", { enumerable: true, get: function () { return operators_2.isLiteralExpression; } });
|
|
86
|
+
Object.defineProperty(exports, "isRawLiteral", { enumerable: true, get: function () { return operators_2.isRawLiteral; } });
|
|
87
|
+
// Cast/Extract/Convert functions
|
|
88
|
+
Object.defineProperty(exports, "cast", { enumerable: true, get: function () { return operators_2.cast; } });
|
|
89
|
+
Object.defineProperty(exports, "extract", { enumerable: true, get: function () { return operators_2.extract; } });
|
|
90
|
+
Object.defineProperty(exports, "conv", { enumerable: true, get: function () { return operators_2.conv; } });
|
|
91
|
+
Object.defineProperty(exports, "isCastExpression", { enumerable: true, get: function () { return operators_2.isCastExpression; } });
|
|
92
|
+
Object.defineProperty(exports, "isExtractExpression", { enumerable: true, get: function () { return operators_2.isExtractExpression; } });
|
|
93
|
+
Object.defineProperty(exports, "isConvExpression", { enumerable: true, get: function () { return operators_2.isConvExpression; } });
|
|
94
|
+
// Cast helpers
|
|
95
|
+
Object.defineProperty(exports, "Cast", { enumerable: true, get: function () { return operators_2.Cast; } });
|
|
96
|
+
// Full-text search operators
|
|
97
|
+
Object.defineProperty(exports, "matchAgainst", { enumerable: true, get: function () { return operators_2.matchAgainst; } });
|
|
98
|
+
Object.defineProperty(exports, "matchFulltext", { enumerable: true, get: function () { return operators_2.matchFulltext; } });
|
|
99
|
+
Object.defineProperty(exports, "toTsvector", { enumerable: true, get: function () { return operators_2.toTsvector; } });
|
|
100
|
+
Object.defineProperty(exports, "toTsquery", { enumerable: true, get: function () { return operators_2.toTsquery; } });
|
|
101
|
+
Object.defineProperty(exports, "plainToTsquery", { enumerable: true, get: function () { return operators_2.plainToTsquery; } });
|
|
102
|
+
Object.defineProperty(exports, "phraseToTsquery", { enumerable: true, get: function () { return operators_2.phraseToTsquery; } });
|
|
103
|
+
// Re-export order helper functions
|
|
104
|
+
var operators_3 = require("../operators");
|
|
105
|
+
Object.defineProperty(exports, "asc", { enumerable: true, get: function () { return operators_3.asc; } });
|
|
106
|
+
Object.defineProperty(exports, "desc", { enumerable: true, get: function () { return operators_3.desc; } });
|
|
107
|
+
Object.defineProperty(exports, "random", { enumerable: true, get: function () { return operators_3.random; } });
|
|
108
|
+
Object.defineProperty(exports, "isOrderExpression", { enumerable: true, get: function () { return operators_3.isOrderExpression; } });
|