mongo.do 0.1.0 → 0.1.1
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/dist/cli/index.d.ts +1 -15
- package/dist/cli/index.js +4083 -196
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2740 -20
- package/dist/index.js +9375 -27
- package/dist/index.js.map +1 -1
- package/dist/worker-entrypoint-BEW23Gmp.d.ts +1331 -0
- package/dist/worker.d.ts +6 -5
- package/dist/worker.js +5477 -18
- package/dist/worker.js.map +1 -1
- package/package.json +3 -2
- package/dist/agentfs/adapters/anthropic.d.ts +0 -176
- package/dist/agentfs/adapters/anthropic.d.ts.map +0 -1
- package/dist/agentfs/adapters/anthropic.js +0 -629
- package/dist/agentfs/adapters/anthropic.js.map +0 -1
- package/dist/agentfs/adapters/index.d.ts +0 -21
- package/dist/agentfs/adapters/index.d.ts.map +0 -1
- package/dist/agentfs/adapters/index.js +0 -23
- package/dist/agentfs/adapters/index.js.map +0 -1
- package/dist/agentfs/adapters/vercel.d.ts +0 -260
- package/dist/agentfs/adapters/vercel.d.ts.map +0 -1
- package/dist/agentfs/adapters/vercel.js +0 -288
- package/dist/agentfs/adapters/vercel.js.map +0 -1
- package/dist/agentfs/glob.d.ts +0 -116
- package/dist/agentfs/glob.d.ts.map +0 -1
- package/dist/agentfs/glob.js +0 -270
- package/dist/agentfs/glob.js.map +0 -1
- package/dist/agentfs/grep.d.ts +0 -83
- package/dist/agentfs/grep.d.ts.map +0 -1
- package/dist/agentfs/grep.js +0 -193
- package/dist/agentfs/grep.js.map +0 -1
- package/dist/agentfs/index.d.ts +0 -22
- package/dist/agentfs/index.d.ts.map +0 -1
- package/dist/agentfs/index.js +0 -18
- package/dist/agentfs/index.js.map +0 -1
- package/dist/agentfs/kv-store.d.ts +0 -128
- package/dist/agentfs/kv-store.d.ts.map +0 -1
- package/dist/agentfs/kv-store.js +0 -227
- package/dist/agentfs/kv-store.js.map +0 -1
- package/dist/agentfs/mondo-agent.d.ts +0 -255
- package/dist/agentfs/mondo-agent.d.ts.map +0 -1
- package/dist/agentfs/mondo-agent.js +0 -879
- package/dist/agentfs/mondo-agent.js.map +0 -1
- package/dist/agentfs/toolcalls.d.ts +0 -130
- package/dist/agentfs/toolcalls.d.ts.map +0 -1
- package/dist/agentfs/toolcalls.js +0 -178
- package/dist/agentfs/toolcalls.js.map +0 -1
- package/dist/agentfs/types.d.ts +0 -171
- package/dist/agentfs/types.d.ts.map +0 -1
- package/dist/agentfs/types.js +0 -7
- package/dist/agentfs/types.js.map +0 -1
- package/dist/agentfs/vfs.d.ts +0 -249
- package/dist/agentfs/vfs.d.ts.map +0 -1
- package/dist/agentfs/vfs.js +0 -469
- package/dist/agentfs/vfs.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/mcp.d.ts +0 -119
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/mcp.js +0 -418
- package/dist/cli/mcp.js.map +0 -1
- package/dist/cli/server.d.ts +0 -179
- package/dist/cli/server.d.ts.map +0 -1
- package/dist/cli/server.js +0 -441
- package/dist/cli/server.js.map +0 -1
- package/dist/client/Collection.d.ts +0 -199
- package/dist/client/Collection.d.ts.map +0 -1
- package/dist/client/Collection.js +0 -256
- package/dist/client/Collection.js.map +0 -1
- package/dist/client/Database.d.ts +0 -68
- package/dist/client/Database.d.ts.map +0 -1
- package/dist/client/Database.js +0 -105
- package/dist/client/Database.js.map +0 -1
- package/dist/client/MongoClient.d.ts +0 -165
- package/dist/client/MongoClient.d.ts.map +0 -1
- package/dist/client/MongoClient.js +0 -307
- package/dist/client/MongoClient.js.map +0 -1
- package/dist/client/aggregation-cursor.d.ts +0 -210
- package/dist/client/aggregation-cursor.d.ts.map +0 -1
- package/dist/client/aggregation-cursor.js +0 -509
- package/dist/client/aggregation-cursor.js.map +0 -1
- package/dist/client/bulk-write.d.ts +0 -216
- package/dist/client/bulk-write.d.ts.map +0 -1
- package/dist/client/bulk-write.js +0 -63
- package/dist/client/bulk-write.js.map +0 -1
- package/dist/client/change-stream.d.ts +0 -245
- package/dist/client/change-stream.d.ts.map +0 -1
- package/dist/client/change-stream.js +0 -429
- package/dist/client/change-stream.js.map +0 -1
- package/dist/client/cursor.d.ts +0 -85
- package/dist/client/cursor.d.ts.map +0 -1
- package/dist/client/cursor.js +0 -156
- package/dist/client/cursor.js.map +0 -1
- package/dist/client/http-cursor.d.ts +0 -233
- package/dist/client/http-cursor.d.ts.map +0 -1
- package/dist/client/http-cursor.js +0 -496
- package/dist/client/http-cursor.js.map +0 -1
- package/dist/client/index.d.ts +0 -18
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -24
- package/dist/client/index.js.map +0 -1
- package/dist/client/mongo-client.d.ts +0 -60
- package/dist/client/mongo-client.d.ts.map +0 -1
- package/dist/client/mongo-client.js +0 -190
- package/dist/client/mongo-client.js.map +0 -1
- package/dist/client/mongo-collection.d.ts +0 -359
- package/dist/client/mongo-collection.d.ts.map +0 -1
- package/dist/client/mongo-collection.js +0 -1641
- package/dist/client/mongo-collection.js.map +0 -1
- package/dist/client/mongo-cursor.d.ts +0 -257
- package/dist/client/mongo-cursor.d.ts.map +0 -1
- package/dist/client/mongo-cursor.js +0 -621
- package/dist/client/mongo-cursor.js.map +0 -1
- package/dist/client/mongo-database.d.ts +0 -88
- package/dist/client/mongo-database.d.ts.map +0 -1
- package/dist/client/mongo-database.js +0 -139
- package/dist/client/mongo-database.js.map +0 -1
- package/dist/client/session.d.ts +0 -210
- package/dist/client/session.d.ts.map +0 -1
- package/dist/client/session.js +0 -326
- package/dist/client/session.js.map +0 -1
- package/dist/durable-object/index-manager.d.ts +0 -173
- package/dist/durable-object/index-manager.d.ts.map +0 -1
- package/dist/durable-object/index-manager.js +0 -764
- package/dist/durable-object/index-manager.js.map +0 -1
- package/dist/durable-object/index.d.ts +0 -12
- package/dist/durable-object/index.d.ts.map +0 -1
- package/dist/durable-object/index.js +0 -8
- package/dist/durable-object/index.js.map +0 -1
- package/dist/durable-object/mcp-handler.d.ts +0 -52
- package/dist/durable-object/mcp-handler.d.ts.map +0 -1
- package/dist/durable-object/mcp-handler.js +0 -186
- package/dist/durable-object/mcp-handler.js.map +0 -1
- package/dist/durable-object/migrations.d.ts +0 -40
- package/dist/durable-object/migrations.d.ts.map +0 -1
- package/dist/durable-object/migrations.js +0 -121
- package/dist/durable-object/migrations.js.map +0 -1
- package/dist/durable-object/mondo-database.d.ts +0 -148
- package/dist/durable-object/mondo-database.d.ts.map +0 -1
- package/dist/durable-object/mondo-database.js +0 -621
- package/dist/durable-object/mondo-database.js.map +0 -1
- package/dist/durable-object/schema.d.ts +0 -192
- package/dist/durable-object/schema.d.ts.map +0 -1
- package/dist/durable-object/schema.js +0 -186
- package/dist/durable-object/schema.js.map +0 -1
- package/dist/embedding/document-serializer.d.ts +0 -118
- package/dist/embedding/document-serializer.d.ts.map +0 -1
- package/dist/embedding/document-serializer.js +0 -339
- package/dist/embedding/document-serializer.js.map +0 -1
- package/dist/embedding/embedding-manager.d.ts +0 -136
- package/dist/embedding/embedding-manager.d.ts.map +0 -1
- package/dist/embedding/embedding-manager.js +0 -176
- package/dist/embedding/embedding-manager.js.map +0 -1
- package/dist/embedding/index.d.ts +0 -9
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js +0 -9
- package/dist/embedding/index.js.map +0 -1
- package/dist/executor/aggregation-executor.d.ts +0 -93
- package/dist/executor/aggregation-executor.d.ts.map +0 -1
- package/dist/executor/aggregation-executor.js +0 -275
- package/dist/executor/aggregation-executor.js.map +0 -1
- package/dist/executor/function-executor.d.ts +0 -39
- package/dist/executor/function-executor.d.ts.map +0 -1
- package/dist/executor/function-executor.js +0 -168
- package/dist/executor/function-executor.js.map +0 -1
- package/dist/executor/index.d.ts +0 -4
- package/dist/executor/index.d.ts.map +0 -1
- package/dist/executor/index.js +0 -4
- package/dist/executor/index.js.map +0 -1
- package/dist/executor/vector-search-executor.d.ts +0 -71
- package/dist/executor/vector-search-executor.d.ts.map +0 -1
- package/dist/executor/vector-search-executor.js +0 -113
- package/dist/executor/vector-search-executor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/adapters/anthropic-adapter.d.ts +0 -256
- package/dist/mcp/adapters/anthropic-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/anthropic-adapter.js +0 -409
- package/dist/mcp/adapters/anthropic-adapter.js.map +0 -1
- package/dist/mcp/adapters/base-adapter.d.ts +0 -164
- package/dist/mcp/adapters/base-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/base-adapter.js +0 -277
- package/dist/mcp/adapters/base-adapter.js.map +0 -1
- package/dist/mcp/adapters/errors.d.ts +0 -173
- package/dist/mcp/adapters/errors.d.ts.map +0 -1
- package/dist/mcp/adapters/errors.js +0 -305
- package/dist/mcp/adapters/errors.js.map +0 -1
- package/dist/mcp/adapters/index.d.ts +0 -65
- package/dist/mcp/adapters/index.d.ts.map +0 -1
- package/dist/mcp/adapters/index.js +0 -92
- package/dist/mcp/adapters/index.js.map +0 -1
- package/dist/mcp/adapters/streaming.d.ts +0 -200
- package/dist/mcp/adapters/streaming.d.ts.map +0 -1
- package/dist/mcp/adapters/streaming.js +0 -381
- package/dist/mcp/adapters/streaming.js.map +0 -1
- package/dist/mcp/adapters/vercel-adapter.d.ts +0 -321
- package/dist/mcp/adapters/vercel-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/vercel-adapter.js +0 -487
- package/dist/mcp/adapters/vercel-adapter.js.map +0 -1
- package/dist/mcp/agent.d.ts +0 -192
- package/dist/mcp/agent.d.ts.map +0 -1
- package/dist/mcp/agent.js +0 -338
- package/dist/mcp/agent.js.map +0 -1
- package/dist/mcp/cli.d.ts +0 -71
- package/dist/mcp/cli.d.ts.map +0 -1
- package/dist/mcp/cli.js +0 -218
- package/dist/mcp/cli.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -15
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -20
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/sandbox/database-proxy.d.ts +0 -118
- package/dist/mcp/sandbox/database-proxy.d.ts.map +0 -1
- package/dist/mcp/sandbox/database-proxy.js +0 -154
- package/dist/mcp/sandbox/database-proxy.js.map +0 -1
- package/dist/mcp/sandbox/index.d.ts +0 -8
- package/dist/mcp/sandbox/index.d.ts.map +0 -1
- package/dist/mcp/sandbox/index.js +0 -7
- package/dist/mcp/sandbox/index.js.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -72
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.js +0 -379
- package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
- package/dist/mcp/sandbox/template.d.ts +0 -48
- package/dist/mcp/sandbox/template.d.ts.map +0 -1
- package/dist/mcp/sandbox/template.js +0 -147
- package/dist/mcp/sandbox/template.js.map +0 -1
- package/dist/mcp/sandbox/worker-evaluator.d.ts +0 -160
- package/dist/mcp/sandbox/worker-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/worker-evaluator.js +0 -217
- package/dist/mcp/sandbox/worker-evaluator.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -75
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -278
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tool-call-auditor.d.ts +0 -188
- package/dist/mcp/tool-call-auditor.d.ts.map +0 -1
- package/dist/mcp/tool-call-auditor.js +0 -198
- package/dist/mcp/tool-call-auditor.js.map +0 -1
- package/dist/mcp/tools/do.d.ts +0 -51
- package/dist/mcp/tools/do.d.ts.map +0 -1
- package/dist/mcp/tools/do.js +0 -113
- package/dist/mcp/tools/do.js.map +0 -1
- package/dist/mcp/tools/fetch.d.ts +0 -43
- package/dist/mcp/tools/fetch.d.ts.map +0 -1
- package/dist/mcp/tools/fetch.js +0 -127
- package/dist/mcp/tools/fetch.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -9
- package/dist/mcp/tools/index.d.ts.map +0 -1
- package/dist/mcp/tools/index.js +0 -9
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -60
- package/dist/mcp/tools/search.d.ts.map +0 -1
- package/dist/mcp/tools/search.js +0 -278
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/transport/http.d.ts +0 -144
- package/dist/mcp/transport/http.d.ts.map +0 -1
- package/dist/mcp/transport/http.js +0 -545
- package/dist/mcp/transport/http.js.map +0 -1
- package/dist/mcp/transport/index.d.ts +0 -10
- package/dist/mcp/transport/index.d.ts.map +0 -1
- package/dist/mcp/transport/index.js +0 -12
- package/dist/mcp/transport/index.js.map +0 -1
- package/dist/mcp/transport/stdio.d.ts +0 -132
- package/dist/mcp/transport/stdio.d.ts.map +0 -1
- package/dist/mcp/transport/stdio.js +0 -466
- package/dist/mcp/transport/stdio.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -476
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -178
- package/dist/mcp/types.js.map +0 -1
- package/dist/olap/cdc/cdc-buffer.d.ts +0 -92
- package/dist/olap/cdc/cdc-buffer.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-buffer.js +0 -146
- package/dist/olap/cdc/cdc-buffer.js.map +0 -1
- package/dist/olap/cdc/cdc-emitter.d.ts +0 -118
- package/dist/olap/cdc/cdc-emitter.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-emitter.js +0 -217
- package/dist/olap/cdc/cdc-emitter.js.map +0 -1
- package/dist/olap/cdc/cdc-schema.d.ts +0 -119
- package/dist/olap/cdc/cdc-schema.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-schema.js +0 -253
- package/dist/olap/cdc/cdc-schema.js.map +0 -1
- package/dist/olap/cdc/index.d.ts +0 -10
- package/dist/olap/cdc/index.d.ts.map +0 -1
- package/dist/olap/cdc/index.js +0 -10
- package/dist/olap/cdc/index.js.map +0 -1
- package/dist/olap/clickhouse/iceberg.d.ts +0 -164
- package/dist/olap/clickhouse/iceberg.d.ts.map +0 -1
- package/dist/olap/clickhouse/iceberg.js +0 -138
- package/dist/olap/clickhouse/iceberg.js.map +0 -1
- package/dist/olap/clickhouse/index.d.ts +0 -14
- package/dist/olap/clickhouse/index.d.ts.map +0 -1
- package/dist/olap/clickhouse/index.js +0 -14
- package/dist/olap/clickhouse/index.js.map +0 -1
- package/dist/olap/clickhouse/mapper.d.ts +0 -170
- package/dist/olap/clickhouse/mapper.d.ts.map +0 -1
- package/dist/olap/clickhouse/mapper.js +0 -654
- package/dist/olap/clickhouse/mapper.js.map +0 -1
- package/dist/olap/clickhouse/olap-backend.d.ts +0 -181
- package/dist/olap/clickhouse/olap-backend.d.ts.map +0 -1
- package/dist/olap/clickhouse/olap-backend.js +0 -1083
- package/dist/olap/clickhouse/olap-backend.js.map +0 -1
- package/dist/olap/clickhouse/query-executor.d.ts +0 -163
- package/dist/olap/clickhouse/query-executor.d.ts.map +0 -1
- package/dist/olap/clickhouse/query-executor.js +0 -560
- package/dist/olap/clickhouse/query-executor.js.map +0 -1
- package/dist/olap/clickhouse/query.d.ts +0 -134
- package/dist/olap/clickhouse/query.d.ts.map +0 -1
- package/dist/olap/clickhouse/query.js +0 -512
- package/dist/olap/clickhouse/query.js.map +0 -1
- package/dist/olap/stage/index.d.ts +0 -6
- package/dist/olap/stage/index.d.ts.map +0 -1
- package/dist/olap/stage/index.js +0 -6
- package/dist/olap/stage/index.js.map +0 -1
- package/dist/olap/stage/parser.d.ts +0 -68
- package/dist/olap/stage/parser.d.ts.map +0 -1
- package/dist/olap/stage/parser.js +0 -293
- package/dist/olap/stage/parser.js.map +0 -1
- package/dist/olap/stage/router.d.ts +0 -94
- package/dist/olap/stage/router.d.ts.map +0 -1
- package/dist/olap/stage/router.js +0 -390
- package/dist/olap/stage/router.js.map +0 -1
- package/dist/rpc/endpoint.d.ts +0 -52
- package/dist/rpc/endpoint.d.ts.map +0 -1
- package/dist/rpc/endpoint.js +0 -734
- package/dist/rpc/endpoint.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -34
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -45
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/rpc-client.d.ts +0 -275
- package/dist/rpc/rpc-client.d.ts.map +0 -1
- package/dist/rpc/rpc-client.js +0 -735
- package/dist/rpc/rpc-client.js.map +0 -1
- package/dist/rpc/rpc-target.d.ts +0 -220
- package/dist/rpc/rpc-target.d.ts.map +0 -1
- package/dist/rpc/rpc-target.js +0 -500
- package/dist/rpc/rpc-target.js.map +0 -1
- package/dist/rpc/worker-entrypoint.d.ts +0 -159
- package/dist/rpc/worker-entrypoint.d.ts.map +0 -1
- package/dist/rpc/worker-entrypoint.js +0 -212
- package/dist/rpc/worker-entrypoint.js.map +0 -1
- package/dist/server.d.ts +0 -18
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -129
- package/dist/server.js.map +0 -1
- package/dist/studio/components/browser/CollectionItem.d.ts +0 -26
- package/dist/studio/components/browser/CollectionItem.d.ts.map +0 -1
- package/dist/studio/components/browser/CollectionItem.js +0 -143
- package/dist/studio/components/browser/CollectionItem.js.map +0 -1
- package/dist/studio/components/browser/CollectionTree.d.ts +0 -45
- package/dist/studio/components/browser/CollectionTree.d.ts.map +0 -1
- package/dist/studio/components/browser/CollectionTree.js +0 -207
- package/dist/studio/components/browser/CollectionTree.js.map +0 -1
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts +0 -51
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.js +0 -185
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.js.map +0 -1
- package/dist/studio/components/browser/DatabaseBrowser.d.ts +0 -46
- package/dist/studio/components/browser/DatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/components/browser/DatabaseBrowser.js +0 -304
- package/dist/studio/components/browser/DatabaseBrowser.js.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionItem.test.js +0 -169
- package/dist/studio/components/browser/__tests__/CollectionItem.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionTree.test.js +0 -203
- package/dist/studio/components/browser/__tests__/CollectionTree.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts +0 -8
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js +0 -522
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js +0 -518
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/setup.js +0 -22
- package/dist/studio/components/browser/__tests__/setup.js.map +0 -1
- package/dist/studio/components/browser/index.d.ts +0 -15
- package/dist/studio/components/browser/index.d.ts.map +0 -1
- package/dist/studio/components/browser/index.js +0 -10
- package/dist/studio/components/browser/index.js.map +0 -1
- package/dist/studio/components/browser/types.d.ts +0 -33
- package/dist/studio/components/browser/types.d.ts.map +0 -1
- package/dist/studio/components/browser/types.js +0 -5
- package/dist/studio/components/browser/types.js.map +0 -1
- package/dist/studio/components/connection/ConnectionForm.d.ts +0 -59
- package/dist/studio/components/connection/ConnectionForm.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionForm.js +0 -274
- package/dist/studio/components/connection/ConnectionForm.js.map +0 -1
- package/dist/studio/components/connection/ConnectionList.d.ts +0 -59
- package/dist/studio/components/connection/ConnectionList.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionList.js +0 -286
- package/dist/studio/components/connection/ConnectionList.js.map +0 -1
- package/dist/studio/components/connection/ConnectionPanel.d.ts +0 -132
- package/dist/studio/components/connection/ConnectionPanel.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionPanel.js +0 -293
- package/dist/studio/components/connection/ConnectionPanel.js.map +0 -1
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts +0 -8
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts.map +0 -1
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js +0 -632
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js.map +0 -1
- package/dist/studio/components/connection/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/connection/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/connection/__tests__/setup.js +0 -11
- package/dist/studio/components/connection/__tests__/setup.js.map +0 -1
- package/dist/studio/components/connection/index.d.ts +0 -10
- package/dist/studio/components/connection/index.d.ts.map +0 -1
- package/dist/studio/components/connection/index.js +0 -7
- package/dist/studio/components/connection/index.js.map +0 -1
- package/dist/studio/components/crud/DeleteDocumentDialog.d.ts +0 -91
- package/dist/studio/components/crud/DeleteDocumentDialog.d.ts.map +0 -1
- package/dist/studio/components/crud/DeleteDocumentDialog.js +0 -273
- package/dist/studio/components/crud/DeleteDocumentDialog.js.map +0 -1
- package/dist/studio/components/crud/DocumentEditor.d.ts +0 -32
- package/dist/studio/components/crud/DocumentEditor.d.ts.map +0 -1
- package/dist/studio/components/crud/DocumentEditor.js +0 -546
- package/dist/studio/components/crud/DocumentEditor.js.map +0 -1
- package/dist/studio/components/crud/InsertDocumentDialog.d.ts +0 -78
- package/dist/studio/components/crud/InsertDocumentDialog.d.ts.map +0 -1
- package/dist/studio/components/crud/InsertDocumentDialog.js +0 -323
- package/dist/studio/components/crud/InsertDocumentDialog.js.map +0 -1
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts +0 -5
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js +0 -298
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts +0 -8
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.js +0 -368
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts +0 -2
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js +0 -352
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/crud/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/setup.js +0 -22
- package/dist/studio/components/crud/__tests__/setup.js.map +0 -1
- package/dist/studio/components/crud/index.d.ts +0 -12
- package/dist/studio/components/crud/index.d.ts.map +0 -1
- package/dist/studio/components/crud/index.js +0 -11
- package/dist/studio/components/crud/index.js.map +0 -1
- package/dist/studio/hooks/useConnection.d.ts +0 -127
- package/dist/studio/hooks/useConnection.d.ts.map +0 -1
- package/dist/studio/hooks/useConnection.js +0 -414
- package/dist/studio/hooks/useConnection.js.map +0 -1
- package/dist/studio/hooks/useDatabaseBrowser.d.ts +0 -107
- package/dist/studio/hooks/useDatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/hooks/useDatabaseBrowser.js +0 -294
- package/dist/studio/hooks/useDatabaseBrowser.js.map +0 -1
- package/dist/studio/index.d.ts +0 -16
- package/dist/studio/index.d.ts.map +0 -1
- package/dist/studio/index.js +0 -14
- package/dist/studio/index.js.map +0 -1
- package/dist/studio/types/connection.d.ts +0 -266
- package/dist/studio/types/connection.d.ts.map +0 -1
- package/dist/studio/types/connection.js +0 -159
- package/dist/studio/types/connection.js.map +0 -1
- package/dist/studio/vitest.config.d.ts +0 -3
- package/dist/studio/vitest.config.d.ts.map +0 -1
- package/dist/studio/vitest.config.js +0 -33
- package/dist/studio/vitest.config.js.map +0 -1
- package/dist/translator/aggregation-translator.d.ts +0 -51
- package/dist/translator/aggregation-translator.d.ts.map +0 -1
- package/dist/translator/aggregation-translator.js +0 -324
- package/dist/translator/aggregation-translator.js.map +0 -1
- package/dist/translator/dialect.d.ts +0 -131
- package/dist/translator/dialect.d.ts.map +0 -1
- package/dist/translator/dialect.js +0 -276
- package/dist/translator/dialect.js.map +0 -1
- package/dist/translator/geo-translator.d.ts +0 -91
- package/dist/translator/geo-translator.d.ts.map +0 -1
- package/dist/translator/geo-translator.js +0 -587
- package/dist/translator/geo-translator.js.map +0 -1
- package/dist/translator/hybrid-translator.d.ts +0 -70
- package/dist/translator/hybrid-translator.d.ts.map +0 -1
- package/dist/translator/hybrid-translator.js +0 -193
- package/dist/translator/hybrid-translator.js.map +0 -1
- package/dist/translator/index.d.ts +0 -13
- package/dist/translator/index.d.ts.map +0 -1
- package/dist/translator/index.js +0 -11
- package/dist/translator/index.js.map +0 -1
- package/dist/translator/query-translator.d.ts +0 -211
- package/dist/translator/query-translator.d.ts.map +0 -1
- package/dist/translator/query-translator.js +0 -1276
- package/dist/translator/query-translator.js.map +0 -1
- package/dist/translator/search-highlight.d.ts +0 -83
- package/dist/translator/search-highlight.d.ts.map +0 -1
- package/dist/translator/search-highlight.js +0 -83
- package/dist/translator/search-highlight.js.map +0 -1
- package/dist/translator/search-translator.d.ts +0 -155
- package/dist/translator/search-translator.d.ts.map +0 -1
- package/dist/translator/search-translator.js +0 -241
- package/dist/translator/search-translator.js.map +0 -1
- package/dist/translator/stages/add-fields-stage.d.ts +0 -7
- package/dist/translator/stages/add-fields-stage.d.ts.map +0 -1
- package/dist/translator/stages/add-fields-stage.js +0 -72
- package/dist/translator/stages/add-fields-stage.js.map +0 -1
- package/dist/translator/stages/bucket-stage.d.ts +0 -7
- package/dist/translator/stages/bucket-stage.d.ts.map +0 -1
- package/dist/translator/stages/bucket-stage.js +0 -87
- package/dist/translator/stages/bucket-stage.js.map +0 -1
- package/dist/translator/stages/count-stage.d.ts +0 -7
- package/dist/translator/stages/count-stage.d.ts.map +0 -1
- package/dist/translator/stages/count-stage.js +0 -12
- package/dist/translator/stages/count-stage.js.map +0 -1
- package/dist/translator/stages/expression-translator.d.ts +0 -68
- package/dist/translator/stages/expression-translator.d.ts.map +0 -1
- package/dist/translator/stages/expression-translator.js +0 -467
- package/dist/translator/stages/expression-translator.js.map +0 -1
- package/dist/translator/stages/facet-stage.d.ts +0 -13
- package/dist/translator/stages/facet-stage.d.ts.map +0 -1
- package/dist/translator/stages/facet-stage.js +0 -26
- package/dist/translator/stages/facet-stage.js.map +0 -1
- package/dist/translator/stages/fusion-stages.d.ts +0 -118
- package/dist/translator/stages/fusion-stages.d.ts.map +0 -1
- package/dist/translator/stages/fusion-stages.js +0 -201
- package/dist/translator/stages/fusion-stages.js.map +0 -1
- package/dist/translator/stages/group-stage.d.ts +0 -8
- package/dist/translator/stages/group-stage.d.ts.map +0 -1
- package/dist/translator/stages/group-stage.js +0 -123
- package/dist/translator/stages/group-stage.js.map +0 -1
- package/dist/translator/stages/index.d.ts +0 -24
- package/dist/translator/stages/index.d.ts.map +0 -1
- package/dist/translator/stages/index.js +0 -24
- package/dist/translator/stages/index.js.map +0 -1
- package/dist/translator/stages/join-optimizer.d.ts +0 -37
- package/dist/translator/stages/join-optimizer.d.ts.map +0 -1
- package/dist/translator/stages/join-optimizer.js +0 -93
- package/dist/translator/stages/join-optimizer.js.map +0 -1
- package/dist/translator/stages/limit-stage.d.ts +0 -7
- package/dist/translator/stages/limit-stage.d.ts.map +0 -1
- package/dist/translator/stages/limit-stage.js +0 -11
- package/dist/translator/stages/limit-stage.js.map +0 -1
- package/dist/translator/stages/lookup-stage.d.ts +0 -7
- package/dist/translator/stages/lookup-stage.d.ts.map +0 -1
- package/dist/translator/stages/lookup-stage.js +0 -73
- package/dist/translator/stages/lookup-stage.js.map +0 -1
- package/dist/translator/stages/match-stage.d.ts +0 -7
- package/dist/translator/stages/match-stage.d.ts.map +0 -1
- package/dist/translator/stages/match-stage.js +0 -14
- package/dist/translator/stages/match-stage.js.map +0 -1
- package/dist/translator/stages/optimizer.d.ts +0 -15
- package/dist/translator/stages/optimizer.d.ts.map +0 -1
- package/dist/translator/stages/optimizer.js +0 -249
- package/dist/translator/stages/optimizer.js.map +0 -1
- package/dist/translator/stages/parallel-facet.d.ts +0 -47
- package/dist/translator/stages/parallel-facet.d.ts.map +0 -1
- package/dist/translator/stages/parallel-facet.js +0 -57
- package/dist/translator/stages/parallel-facet.js.map +0 -1
- package/dist/translator/stages/project-stage.d.ts +0 -8
- package/dist/translator/stages/project-stage.d.ts.map +0 -1
- package/dist/translator/stages/project-stage.js +0 -145
- package/dist/translator/stages/project-stage.js.map +0 -1
- package/dist/translator/stages/search-stage.d.ts +0 -60
- package/dist/translator/stages/search-stage.d.ts.map +0 -1
- package/dist/translator/stages/search-stage.js +0 -89
- package/dist/translator/stages/search-stage.js.map +0 -1
- package/dist/translator/stages/skip-stage.d.ts +0 -7
- package/dist/translator/stages/skip-stage.d.ts.map +0 -1
- package/dist/translator/stages/skip-stage.js +0 -11
- package/dist/translator/stages/skip-stage.js.map +0 -1
- package/dist/translator/stages/sort-stage.d.ts +0 -7
- package/dist/translator/stages/sort-stage.d.ts.map +0 -1
- package/dist/translator/stages/sort-stage.js +0 -21
- package/dist/translator/stages/sort-stage.js.map +0 -1
- package/dist/translator/stages/types.d.ts +0 -136
- package/dist/translator/stages/types.d.ts.map +0 -1
- package/dist/translator/stages/types.js +0 -5
- package/dist/translator/stages/types.js.map +0 -1
- package/dist/translator/stages/unwind-stage.d.ts +0 -7
- package/dist/translator/stages/unwind-stage.d.ts.map +0 -1
- package/dist/translator/stages/unwind-stage.js +0 -61
- package/dist/translator/stages/unwind-stage.js.map +0 -1
- package/dist/translator/stages/vector-search-stage.d.ts +0 -53
- package/dist/translator/stages/vector-search-stage.d.ts.map +0 -1
- package/dist/translator/stages/vector-search-stage.js +0 -62
- package/dist/translator/stages/vector-search-stage.js.map +0 -1
- package/dist/translator/update-translator.d.ts +0 -148
- package/dist/translator/update-translator.d.ts.map +0 -1
- package/dist/translator/update-translator.js +0 -819
- package/dist/translator/update-translator.js.map +0 -1
- package/dist/translator/vector-translator.d.ts +0 -89
- package/dist/translator/vector-translator.d.ts.map +0 -1
- package/dist/translator/vector-translator.js +0 -106
- package/dist/translator/vector-translator.js.map +0 -1
- package/dist/types/env.d.ts +0 -31
- package/dist/types/env.d.ts.map +0 -1
- package/dist/types/env.js +0 -5
- package/dist/types/env.js.map +0 -1
- package/dist/types/function.d.ts +0 -65
- package/dist/types/function.d.ts.map +0 -1
- package/dist/types/function.js +0 -5
- package/dist/types/function.js.map +0 -1
- package/dist/types/index.d.ts +0 -137
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -13
- package/dist/types/index.js.map +0 -1
- package/dist/types/mongodb.d.ts +0 -258
- package/dist/types/mongodb.d.ts.map +0 -1
- package/dist/types/mongodb.js +0 -5
- package/dist/types/mongodb.js.map +0 -1
- package/dist/types/objectid.d.ts +0 -130
- package/dist/types/objectid.d.ts.map +0 -1
- package/dist/types/objectid.js +0 -314
- package/dist/types/objectid.js.map +0 -1
- package/dist/types/rpc.d.ts +0 -313
- package/dist/types/rpc.d.ts.map +0 -1
- package/dist/types/rpc.js +0 -136
- package/dist/types/rpc.js.map +0 -1
- package/dist/types/vectorize.d.ts +0 -136
- package/dist/types/vectorize.d.ts.map +0 -1
- package/dist/types/vectorize.js +0 -8
- package/dist/types/vectorize.js.map +0 -1
- package/dist/utils/sql-safety.d.ts +0 -64
- package/dist/utils/sql-safety.d.ts.map +0 -1
- package/dist/utils/sql-safety.js +0 -112
- package/dist/utils/sql-safety.js.map +0 -1
- package/dist/validation/document-validator.d.ts +0 -195
- package/dist/validation/document-validator.d.ts.map +0 -1
- package/dist/validation/document-validator.js +0 -529
- package/dist/validation/document-validator.js.map +0 -1
- package/dist/vectorize/document-serializer.d.ts +0 -119
- package/dist/vectorize/document-serializer.d.ts.map +0 -1
- package/dist/vectorize/document-serializer.js +0 -320
- package/dist/vectorize/document-serializer.js.map +0 -1
- package/dist/wire/auth/index.d.ts +0 -5
- package/dist/wire/auth/index.d.ts.map +0 -1
- package/dist/wire/auth/index.js +0 -5
- package/dist/wire/auth/index.js.map +0 -1
- package/dist/wire/auth/scram.d.ts +0 -160
- package/dist/wire/auth/scram.d.ts.map +0 -1
- package/dist/wire/auth/scram.js +0 -425
- package/dist/wire/auth/scram.js.map +0 -1
- package/dist/wire/backend/interface.d.ts +0 -168
- package/dist/wire/backend/interface.d.ts.map +0 -1
- package/dist/wire/backend/interface.js +0 -10
- package/dist/wire/backend/interface.js.map +0 -1
- package/dist/wire/backend/local-sqlite.d.ts +0 -89
- package/dist/wire/backend/local-sqlite.d.ts.map +0 -1
- package/dist/wire/backend/local-sqlite.js +0 -1002
- package/dist/wire/backend/local-sqlite.js.map +0 -1
- package/dist/wire/backend/query-router.d.ts +0 -197
- package/dist/wire/backend/query-router.d.ts.map +0 -1
- package/dist/wire/backend/query-router.js +0 -590
- package/dist/wire/backend/query-router.js.map +0 -1
- package/dist/wire/backend/validation.d.ts +0 -26
- package/dist/wire/backend/validation.d.ts.map +0 -1
- package/dist/wire/backend/validation.js +0 -79
- package/dist/wire/backend/validation.js.map +0 -1
- package/dist/wire/backend/workers-proxy.d.ts +0 -95
- package/dist/wire/backend/workers-proxy.d.ts.map +0 -1
- package/dist/wire/backend/workers-proxy.js +0 -429
- package/dist/wire/backend/workers-proxy.js.map +0 -1
- package/dist/wire/commands/admin.d.ts +0 -49
- package/dist/wire/commands/admin.d.ts.map +0 -1
- package/dist/wire/commands/admin.js +0 -272
- package/dist/wire/commands/admin.js.map +0 -1
- package/dist/wire/commands/aggregate.d.ts +0 -15
- package/dist/wire/commands/aggregate.d.ts.map +0 -1
- package/dist/wire/commands/aggregate.js +0 -98
- package/dist/wire/commands/aggregate.js.map +0 -1
- package/dist/wire/commands/auth.d.ts +0 -58
- package/dist/wire/commands/auth.d.ts.map +0 -1
- package/dist/wire/commands/auth.js +0 -158
- package/dist/wire/commands/auth.js.map +0 -1
- package/dist/wire/commands/crud.d.ts +0 -49
- package/dist/wire/commands/crud.d.ts.map +0 -1
- package/dist/wire/commands/crud.js +0 -336
- package/dist/wire/commands/crud.js.map +0 -1
- package/dist/wire/commands/hello.d.ts +0 -35
- package/dist/wire/commands/hello.d.ts.map +0 -1
- package/dist/wire/commands/hello.js +0 -204
- package/dist/wire/commands/hello.js.map +0 -1
- package/dist/wire/commands/index.d.ts +0 -24
- package/dist/wire/commands/index.d.ts.map +0 -1
- package/dist/wire/commands/index.js +0 -145
- package/dist/wire/commands/index.js.map +0 -1
- package/dist/wire/commands/router.d.ts +0 -46
- package/dist/wire/commands/router.d.ts.map +0 -1
- package/dist/wire/commands/router.js +0 -151
- package/dist/wire/commands/router.js.map +0 -1
- package/dist/wire/commands/types.d.ts +0 -51
- package/dist/wire/commands/types.d.ts.map +0 -1
- package/dist/wire/commands/types.js +0 -15
- package/dist/wire/commands/types.js.map +0 -1
- package/dist/wire/index.d.ts +0 -15
- package/dist/wire/index.d.ts.map +0 -1
- package/dist/wire/index.js +0 -19
- package/dist/wire/index.js.map +0 -1
- package/dist/wire/message.d.ts +0 -49
- package/dist/wire/message.d.ts.map +0 -1
- package/dist/wire/message.js +0 -299
- package/dist/wire/message.js.map +0 -1
- package/dist/wire/server.d.ts +0 -145
- package/dist/wire/server.d.ts.map +0 -1
- package/dist/wire/server.js +0 -284
- package/dist/wire/server.js.map +0 -1
- package/dist/wire/types.d.ts +0 -140
- package/dist/wire/types.d.ts.map +0 -1
- package/dist/wire/types.js +0 -64
- package/dist/wire/types.js.map +0 -1
- package/dist/worker.d.ts.map +0 -1
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* $lookup stage - Performs a left outer join with another collection
|
|
3
|
-
* Translates to SQL LEFT JOIN or subquery
|
|
4
|
-
*/
|
|
5
|
-
import { getFieldPath } from './expression-translator';
|
|
6
|
-
export function translateLookupStage(lookup, context) {
|
|
7
|
-
const params = [];
|
|
8
|
-
const { localField, foreignField } = lookup;
|
|
9
|
-
if (localField && foreignField) {
|
|
10
|
-
// Simple lookup with localField/foreignField
|
|
11
|
-
return translateSimpleLookup(lookup, context, params);
|
|
12
|
-
}
|
|
13
|
-
else if (lookup.let && lookup.pipeline) {
|
|
14
|
-
// Pipeline lookup
|
|
15
|
-
return translatePipelineLookup(lookup, context, params);
|
|
16
|
-
}
|
|
17
|
-
throw new Error('$lookup requires either localField/foreignField or let/pipeline');
|
|
18
|
-
}
|
|
19
|
-
function translateSimpleLookup(lookup, context, params) {
|
|
20
|
-
const { from, localField, foreignField, as } = lookup;
|
|
21
|
-
const source = context.previousCte || context.collection;
|
|
22
|
-
const localPath = getFieldPath('$' + localField);
|
|
23
|
-
const foreignPath = getFieldPath('$' + foreignField);
|
|
24
|
-
// Use a subquery to collect matching documents as a JSON array
|
|
25
|
-
const cteName = `stage_${context.cteIndex}`;
|
|
26
|
-
const cteExpression = `
|
|
27
|
-
SELECT
|
|
28
|
-
${source}.data,
|
|
29
|
-
COALESCE(
|
|
30
|
-
(SELECT json_group_array(${from}.data)
|
|
31
|
-
FROM ${from}
|
|
32
|
-
WHERE json_extract(${from}.data, '${foreignPath}') = json_extract(${source}.data, '${localPath}')),
|
|
33
|
-
'[]'
|
|
34
|
-
) AS lookup_result
|
|
35
|
-
FROM ${source}
|
|
36
|
-
`;
|
|
37
|
-
// The result should merge lookup_result into data as the 'as' field
|
|
38
|
-
const selectClause = `json_set(data, '$.${as}', json(lookup_result)) AS data`;
|
|
39
|
-
return {
|
|
40
|
-
cteExpression: cteExpression.trim(),
|
|
41
|
-
cteName,
|
|
42
|
-
selectClause,
|
|
43
|
-
params,
|
|
44
|
-
transformsShape: true
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function translatePipelineLookup(lookup, context, params) {
|
|
48
|
-
const { from, as } = lookup;
|
|
49
|
-
// For pipeline lookups, we need to handle variable substitution
|
|
50
|
-
// This is a simplified implementation
|
|
51
|
-
const source = context.previousCte || context.collection;
|
|
52
|
-
const cteName = `stage_${context.cteIndex}`;
|
|
53
|
-
// Build the inner query for the lookup
|
|
54
|
-
// In a full implementation, we'd translate the pipeline with variable substitution
|
|
55
|
-
const cteExpression = `
|
|
56
|
-
SELECT
|
|
57
|
-
${source}.data,
|
|
58
|
-
COALESCE(
|
|
59
|
-
(SELECT json_group_array(${from}.data) FROM ${from}),
|
|
60
|
-
'[]'
|
|
61
|
-
) AS lookup_result
|
|
62
|
-
FROM ${source}
|
|
63
|
-
`;
|
|
64
|
-
const selectClause = `json_set(data, '$.${as}', json(lookup_result)) AS data`;
|
|
65
|
-
return {
|
|
66
|
-
cteExpression: cteExpression.trim(),
|
|
67
|
-
cteName,
|
|
68
|
-
selectClause,
|
|
69
|
-
params,
|
|
70
|
-
transformsShape: true
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=lookup-stage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lookup-stage.js","sourceRoot":"","sources":["../../../src/translator/stages/lookup-stage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,MAAM,UAAU,oBAAoB,CAClC,MAAmB,EACnB,OAAqB;IAErB,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAE3C,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/B,6CAA6C;QAC7C,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACvD,CAAC;SAAM,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACzC,kBAAkB;QAClB,OAAO,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;AACpF,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAmB,EACnB,OAAqB,EACrB,MAAiB;IAEjB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAA;IACxD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,GAAG,UAAW,CAAC,CAAA;IACjD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,GAAG,YAAa,CAAC,CAAA;IAErD,+DAA+D;IAC/D,MAAM,OAAO,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC3C,MAAM,aAAa,GAAG;;QAEhB,MAAM;;mCAEqB,IAAI;gBACvB,IAAI;8BACU,IAAI,WAAW,WAAW,qBAAqB,MAAM,WAAW,SAAS;;;WAG5F,MAAM;GACd,CAAA;IAED,oEAAoE;IACpE,MAAM,YAAY,GAAG,qBAAqB,EAAE,iCAAiC,CAAA;IAE7E,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE;QACnC,OAAO;QACP,YAAY;QACZ,MAAM;QACN,eAAe,EAAE,IAAI;KACtB,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAmB,EACnB,OAAqB,EACrB,MAAiB;IAEjB,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;IAE3B,gEAAgE;IAChE,sCAAsC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAA;IACxD,MAAM,OAAO,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAA;IAE3C,uCAAuC;IACvC,mFAAmF;IACnF,MAAM,aAAa,GAAG;;QAEhB,MAAM;;mCAEqB,IAAI,eAAe,IAAI;;;WAG/C,MAAM;GACd,CAAA;IAED,MAAM,YAAY,GAAG,qBAAqB,EAAE,iCAAiC,CAAA;IAE7E,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE;QACnC,OAAO;QACP,YAAY;QACZ,MAAM;QACN,eAAe,EAAE,IAAI;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* $match stage - Filters documents based on a query condition
|
|
3
|
-
* Translates to SQL WHERE clause using QueryTranslator
|
|
4
|
-
*/
|
|
5
|
-
import type { StageResult, StageContext } from './types';
|
|
6
|
-
export declare function translateMatchStage(matchQuery: Record<string, unknown>, _context: StageContext): StageResult;
|
|
7
|
-
//# sourceMappingURL=match-stage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"match-stage.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/match-stage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAExD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,EAAE,YAAY,GACrB,WAAW,CAQb"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* $match stage - Filters documents based on a query condition
|
|
3
|
-
* Translates to SQL WHERE clause using QueryTranslator
|
|
4
|
-
*/
|
|
5
|
-
import { QueryTranslator } from '../query-translator';
|
|
6
|
-
export function translateMatchStage(matchQuery, _context) {
|
|
7
|
-
const queryTranslator = new QueryTranslator();
|
|
8
|
-
const { sql, params } = queryTranslator.translate(matchQuery);
|
|
9
|
-
return {
|
|
10
|
-
whereClause: sql,
|
|
11
|
-
params
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=match-stage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"match-stage.js","sourceRoot":"","sources":["../../../src/translator/stages/match-stage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGrD,MAAM,UAAU,mBAAmB,CACjC,UAAmC,EACnC,QAAsB;IAEtB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAE7D,OAAO;QACL,WAAW,EAAE,GAAG;QAChB,MAAM;KACP,CAAA;AACH,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pipeline Optimizer - Optimizes aggregation pipelines before translation
|
|
3
|
-
*
|
|
4
|
-
* Optimizations:
|
|
5
|
-
* 1. Predicate pushdown: Move $match stages as early as possible
|
|
6
|
-
* 2. Projection pushdown: Reduce fields carried through pipeline
|
|
7
|
-
* 3. Stage merging: Combine adjacent compatible stages
|
|
8
|
-
* 4. Redundant stage elimination
|
|
9
|
-
*/
|
|
10
|
-
import type { PipelineStage } from './types';
|
|
11
|
-
/**
|
|
12
|
-
* Optimize an aggregation pipeline
|
|
13
|
-
*/
|
|
14
|
-
export declare function optimizePipeline(pipeline: PipelineStage[]): PipelineStage[];
|
|
15
|
-
//# sourceMappingURL=optimizer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAS3E"}
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pipeline Optimizer - Optimizes aggregation pipelines before translation
|
|
3
|
-
*
|
|
4
|
-
* Optimizations:
|
|
5
|
-
* 1. Predicate pushdown: Move $match stages as early as possible
|
|
6
|
-
* 2. Projection pushdown: Reduce fields carried through pipeline
|
|
7
|
-
* 3. Stage merging: Combine adjacent compatible stages
|
|
8
|
-
* 4. Redundant stage elimination
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Optimize an aggregation pipeline
|
|
12
|
-
*/
|
|
13
|
-
export function optimizePipeline(pipeline) {
|
|
14
|
-
let optimized = [...pipeline];
|
|
15
|
-
// Apply optimizations in order
|
|
16
|
-
optimized = pushdownPredicates(optimized);
|
|
17
|
-
optimized = mergeAdjacentStages(optimized);
|
|
18
|
-
optimized = eliminateRedundantStages(optimized);
|
|
19
|
-
return optimized;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Push $match stages as early as possible in the pipeline
|
|
23
|
-
* This reduces the number of documents processed by subsequent stages
|
|
24
|
-
*/
|
|
25
|
-
function pushdownPredicates(pipeline) {
|
|
26
|
-
const result = [];
|
|
27
|
-
for (let i = 0; i < pipeline.length; i++) {
|
|
28
|
-
const stage = pipeline[i];
|
|
29
|
-
const stageType = getStageType(stage);
|
|
30
|
-
if (stageType !== '$match') {
|
|
31
|
-
result.push(stage);
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
// Try to push this $match earlier
|
|
35
|
-
const matchCondition = stage.$match;
|
|
36
|
-
const pushPosition = findEarliestPushPosition(result, matchCondition);
|
|
37
|
-
if (pushPosition < result.length) {
|
|
38
|
-
// Insert at the earlier position
|
|
39
|
-
result.splice(pushPosition, 0, stage);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
result.push(stage);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return result;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Find the earliest position where a $match can be pushed
|
|
49
|
-
*/
|
|
50
|
-
function findEarliestPushPosition(stages, matchCondition) {
|
|
51
|
-
const matchFields = extractFieldsFromCondition(matchCondition);
|
|
52
|
-
// Walk backwards through stages
|
|
53
|
-
for (let i = stages.length - 1; i >= 0; i--) {
|
|
54
|
-
const stage = stages[i];
|
|
55
|
-
const stageType = getStageType(stage);
|
|
56
|
-
// Can't push past stages that modify the fields we're matching on
|
|
57
|
-
if (stageType === '$group') {
|
|
58
|
-
// $group completely changes document shape
|
|
59
|
-
return i + 1;
|
|
60
|
-
}
|
|
61
|
-
if (stageType === '$project' || stageType === '$addFields') {
|
|
62
|
-
const projectFields = getAffectedFields(stage);
|
|
63
|
-
if (matchFields.some(f => projectFields.has(f))) {
|
|
64
|
-
return i + 1;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (stageType === '$unwind') {
|
|
68
|
-
const unwindField = getUnwindField(stage);
|
|
69
|
-
if (matchFields.some(f => f === unwindField || f.startsWith(unwindField + '.'))) {
|
|
70
|
-
return i + 1;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (stageType === '$lookup') {
|
|
74
|
-
const lookupAs = getLookupAsField(stage);
|
|
75
|
-
if (matchFields.some(f => f === lookupAs || f.startsWith(lookupAs + '.'))) {
|
|
76
|
-
return i + 1;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// $sort, $limit, $skip don't affect fields
|
|
80
|
-
// We can generally push $match past them (though order matters for correctness)
|
|
81
|
-
if (stageType === '$limit' || stageType === '$skip') {
|
|
82
|
-
// Can't push past limit/skip as it changes result set
|
|
83
|
-
return i + 1;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return 0;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Merge adjacent compatible stages
|
|
90
|
-
*/
|
|
91
|
-
function mergeAdjacentStages(pipeline) {
|
|
92
|
-
const result = [];
|
|
93
|
-
for (const stage of pipeline) {
|
|
94
|
-
if (result.length === 0) {
|
|
95
|
-
result.push(stage);
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
const prevStage = result[result.length - 1];
|
|
99
|
-
const merged = tryMergeStages(prevStage, stage);
|
|
100
|
-
if (merged) {
|
|
101
|
-
result[result.length - 1] = merged;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
result.push(stage);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Try to merge two stages into one
|
|
111
|
-
*/
|
|
112
|
-
function tryMergeStages(first, second) {
|
|
113
|
-
const firstType = getStageType(first);
|
|
114
|
-
const secondType = getStageType(second);
|
|
115
|
-
// Merge adjacent $match stages
|
|
116
|
-
if (firstType === '$match' && secondType === '$match') {
|
|
117
|
-
const firstMatch = first.$match;
|
|
118
|
-
const secondMatch = second.$match;
|
|
119
|
-
return {
|
|
120
|
-
$match: {
|
|
121
|
-
$and: [firstMatch, secondMatch]
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
// Merge adjacent $addFields stages
|
|
126
|
-
if (firstType === '$addFields' && secondType === '$addFields') {
|
|
127
|
-
const firstFields = first.$addFields;
|
|
128
|
-
const secondFields = second.$addFields;
|
|
129
|
-
return {
|
|
130
|
-
$addFields: {
|
|
131
|
-
...firstFields,
|
|
132
|
-
...secondFields
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
// Merge adjacent $project stages (if compatible)
|
|
137
|
-
if (firstType === '$project' && secondType === '$project') {
|
|
138
|
-
const firstProject = first.$project;
|
|
139
|
-
const secondProject = second.$project;
|
|
140
|
-
// Only merge if both are inclusion or both are exclusion
|
|
141
|
-
const firstIsExclusion = isExclusionProject(firstProject);
|
|
142
|
-
const secondIsExclusion = isExclusionProject(secondProject);
|
|
143
|
-
if (firstIsExclusion === secondIsExclusion) {
|
|
144
|
-
return {
|
|
145
|
-
$project: {
|
|
146
|
-
...firstProject,
|
|
147
|
-
...secondProject
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return null;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Eliminate redundant stages
|
|
156
|
-
*/
|
|
157
|
-
function eliminateRedundantStages(pipeline) {
|
|
158
|
-
return pipeline.filter((stage, index) => {
|
|
159
|
-
const stageType = getStageType(stage);
|
|
160
|
-
// Remove empty $match
|
|
161
|
-
if (stageType === '$match') {
|
|
162
|
-
const matchCondition = stage.$match;
|
|
163
|
-
if (Object.keys(matchCondition).length === 0) {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// Remove $limit 0 followed by anything (no results anyway)
|
|
168
|
-
if (stageType === '$limit') {
|
|
169
|
-
const limit = stage.$limit;
|
|
170
|
-
if (limit === 0) {
|
|
171
|
-
// Keep only this stage, remove rest
|
|
172
|
-
return true;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// Remove duplicate $sort stages (only last one matters)
|
|
176
|
-
if (stageType === '$sort' && index < pipeline.length - 1) {
|
|
177
|
-
for (let i = index + 1; i < pipeline.length; i++) {
|
|
178
|
-
const laterStageType = getStageType(pipeline[i]);
|
|
179
|
-
if (laterStageType === '$sort') {
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
// If we hit a stage that depends on order, keep this sort
|
|
183
|
-
if (['$limit', '$skip', '$first', '$last'].includes(laterStageType)) {
|
|
184
|
-
return true;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return true;
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Helper functions
|
|
193
|
-
*/
|
|
194
|
-
function getStageType(stage) {
|
|
195
|
-
return Object.keys(stage)[0];
|
|
196
|
-
}
|
|
197
|
-
function extractFieldsFromCondition(condition) {
|
|
198
|
-
const fields = [];
|
|
199
|
-
for (const [key, value] of Object.entries(condition)) {
|
|
200
|
-
if (key.startsWith('$')) {
|
|
201
|
-
// Logical operator
|
|
202
|
-
if (Array.isArray(value)) {
|
|
203
|
-
for (const subCondition of value) {
|
|
204
|
-
fields.push(...extractFieldsFromCondition(subCondition));
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
fields.push(key);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return fields;
|
|
213
|
-
}
|
|
214
|
-
function getAffectedFields(stage) {
|
|
215
|
-
const stageType = getStageType(stage);
|
|
216
|
-
const fields = new Set();
|
|
217
|
-
if (stageType === '$project') {
|
|
218
|
-
const project = stage.$project;
|
|
219
|
-
for (const key of Object.keys(project)) {
|
|
220
|
-
fields.add(key);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
else if (stageType === '$addFields') {
|
|
224
|
-
const addFields = stage.$addFields;
|
|
225
|
-
for (const key of Object.keys(addFields)) {
|
|
226
|
-
fields.add(key);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return fields;
|
|
230
|
-
}
|
|
231
|
-
function getUnwindField(stage) {
|
|
232
|
-
const unwind = stage.$unwind;
|
|
233
|
-
if (typeof unwind === 'string') {
|
|
234
|
-
return unwind.replace(/^\$/, '');
|
|
235
|
-
}
|
|
236
|
-
return unwind.path.replace(/^\$/, '');
|
|
237
|
-
}
|
|
238
|
-
function getLookupAsField(stage) {
|
|
239
|
-
const lookup = stage.$lookup;
|
|
240
|
-
return lookup.as;
|
|
241
|
-
}
|
|
242
|
-
function isExclusionProject(project) {
|
|
243
|
-
return Object.entries(project).every(([key, value]) => {
|
|
244
|
-
if (key === '_id')
|
|
245
|
-
return true;
|
|
246
|
-
return value === 0;
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
//# sourceMappingURL=optimizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/translator/stages/optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parallel Facet Executor - Executes multiple facet pipelines concurrently
|
|
3
|
-
*
|
|
4
|
-
* This module provides utilities for executing facet queries in parallel,
|
|
5
|
-
* taking advantage of the independent nature of each facet.
|
|
6
|
-
*/
|
|
7
|
-
export interface FacetQuery {
|
|
8
|
-
name: string;
|
|
9
|
-
sql: string;
|
|
10
|
-
params: unknown[];
|
|
11
|
-
}
|
|
12
|
-
export interface FacetResult {
|
|
13
|
-
name: string;
|
|
14
|
-
rows: unknown[];
|
|
15
|
-
}
|
|
16
|
-
export interface FacetExecutionPlan {
|
|
17
|
-
/** Queries that can be executed in parallel */
|
|
18
|
-
parallelQueries: FacetQuery[];
|
|
19
|
-
/** Combined result structure */
|
|
20
|
-
combineResults: (results: FacetResult[]) => Record<string, unknown[]>;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Create an execution plan for parallel facet queries
|
|
24
|
-
*/
|
|
25
|
-
export declare function createFacetExecutionPlan(facets: Record<string, {
|
|
26
|
-
sql: string;
|
|
27
|
-
params: unknown[];
|
|
28
|
-
}>): FacetExecutionPlan;
|
|
29
|
-
/**
|
|
30
|
-
* Example executor interface for parallel facet execution
|
|
31
|
-
* This would be implemented by the database layer
|
|
32
|
-
*/
|
|
33
|
-
export interface ParallelExecutor {
|
|
34
|
-
executeParallel(queries: FacetQuery[]): Promise<FacetResult[]>;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Create a mock parallel executor for testing
|
|
38
|
-
*/
|
|
39
|
-
export declare function createMockParallelExecutor(queryHandler: (sql: string, params: unknown[]) => unknown[]): ParallelExecutor;
|
|
40
|
-
/**
|
|
41
|
-
* Batch facet execution - groups queries for efficient execution
|
|
42
|
-
*/
|
|
43
|
-
export declare function batchFacetQueries(facets: Record<string, {
|
|
44
|
-
sql: string;
|
|
45
|
-
params: unknown[];
|
|
46
|
-
}>, batchSize?: number): FacetQuery[][];
|
|
47
|
-
//# sourceMappingURL=parallel-facet.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-facet.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/parallel-facet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,eAAe,EAAE,UAAU,EAAE,CAAA;IAC7B,gCAAgC;IAChC,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;CACtE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,GACzD,kBAAkB,CAiBpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;CAC/D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,GAC1D,gBAAgB,CAalB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,EAC1D,SAAS,GAAE,MAAU,GACpB,UAAU,EAAE,EAAE,CAahB"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parallel Facet Executor - Executes multiple facet pipelines concurrently
|
|
3
|
-
*
|
|
4
|
-
* This module provides utilities for executing facet queries in parallel,
|
|
5
|
-
* taking advantage of the independent nature of each facet.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Create an execution plan for parallel facet queries
|
|
9
|
-
*/
|
|
10
|
-
export function createFacetExecutionPlan(facets) {
|
|
11
|
-
const parallelQueries = Object.entries(facets).map(([name, query]) => ({
|
|
12
|
-
name,
|
|
13
|
-
sql: query.sql,
|
|
14
|
-
params: query.params
|
|
15
|
-
}));
|
|
16
|
-
return {
|
|
17
|
-
parallelQueries,
|
|
18
|
-
combineResults: (results) => {
|
|
19
|
-
const combined = {};
|
|
20
|
-
for (const result of results) {
|
|
21
|
-
combined[result.name] = result.rows;
|
|
22
|
-
}
|
|
23
|
-
return combined;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Create a mock parallel executor for testing
|
|
29
|
-
*/
|
|
30
|
-
export function createMockParallelExecutor(queryHandler) {
|
|
31
|
-
return {
|
|
32
|
-
async executeParallel(queries) {
|
|
33
|
-
// Execute all queries in parallel using Promise.all
|
|
34
|
-
const results = await Promise.all(queries.map(async (query) => ({
|
|
35
|
-
name: query.name,
|
|
36
|
-
rows: queryHandler(query.sql, query.params)
|
|
37
|
-
})));
|
|
38
|
-
return results;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Batch facet execution - groups queries for efficient execution
|
|
44
|
-
*/
|
|
45
|
-
export function batchFacetQueries(facets, batchSize = 3) {
|
|
46
|
-
const queries = Object.entries(facets).map(([name, query]) => ({
|
|
47
|
-
name,
|
|
48
|
-
sql: query.sql,
|
|
49
|
-
params: query.params
|
|
50
|
-
}));
|
|
51
|
-
const batches = [];
|
|
52
|
-
for (let i = 0; i < queries.length; i += batchSize) {
|
|
53
|
-
batches.push(queries.slice(i, i + batchSize));
|
|
54
|
-
}
|
|
55
|
-
return batches;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=parallel-facet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-facet.js","sourceRoot":"","sources":["../../../src/translator/stages/parallel-facet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA0D;IAE1D,MAAM,eAAe,GAAiB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CAAA;IAEH,OAAO;QACL,eAAe;QACf,cAAc,EAAE,CAAC,OAAsB,EAAE,EAAE;YACzC,MAAM,QAAQ,GAA8B,EAAE,CAAA;YAC9C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAA;YACrC,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC;KACF,CAAA;AACH,CAAC;AAUD;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAA2D;IAE3D,OAAO;QACL,KAAK,CAAC,eAAe,CAAC,OAAqB;YACzC,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;aAC5C,CAAC,CAAC,CACJ,CAAA;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA0D,EAC1D,YAAoB,CAAC;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CAAA;IAEH,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* $project stage - Reshapes documents by including, excluding, or computing fields
|
|
3
|
-
* Translates to SQL SELECT with json_object, json_remove, or computed expressions
|
|
4
|
-
* Supports multiple SQL dialects (SQLite, ClickHouse)
|
|
5
|
-
*/
|
|
6
|
-
import type { StageResult, StageContext } from './types';
|
|
7
|
-
export declare function translateProjectStage(projection: Record<string, unknown>, context: StageContext): StageResult;
|
|
8
|
-
//# sourceMappingURL=project-stage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-stage.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/project-stage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAwCxD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,YAAY,GACpB,WAAW,CAiBb"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* $project stage - Reshapes documents by including, excluding, or computing fields
|
|
3
|
-
* Translates to SQL SELECT with json_object, json_remove, or computed expressions
|
|
4
|
-
* Supports multiple SQL dialects (SQLite, ClickHouse)
|
|
5
|
-
*/
|
|
6
|
-
import { translateExpression, isFieldReference, getFieldPath } from './expression-translator';
|
|
7
|
-
import { validateFieldPath } from '../../utils/sql-safety.js';
|
|
8
|
-
import { jsonExtract as dialectJsonExtract } from '../dialect';
|
|
9
|
-
/**
|
|
10
|
-
* Recursively collect all field references from a $function expression's args
|
|
11
|
-
*/
|
|
12
|
-
function collectFunctionFieldRefs(expr) {
|
|
13
|
-
if (!expr || typeof expr !== 'object')
|
|
14
|
-
return [];
|
|
15
|
-
const fields = [];
|
|
16
|
-
const exprObj = expr;
|
|
17
|
-
// Check if this is a $function expression
|
|
18
|
-
if ('$function' in exprObj) {
|
|
19
|
-
const fnSpec = exprObj.$function;
|
|
20
|
-
if (fnSpec.args && Array.isArray(fnSpec.args)) {
|
|
21
|
-
for (const arg of fnSpec.args) {
|
|
22
|
-
if (isFieldReference(arg)) {
|
|
23
|
-
// Extract field name from $fieldName reference
|
|
24
|
-
const fieldName = arg.substring(1).split('.')[0];
|
|
25
|
-
if (fieldName) {
|
|
26
|
-
fields.push(fieldName);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// Recursively check nested objects
|
|
33
|
-
for (const value of Object.values(exprObj)) {
|
|
34
|
-
if (value && typeof value === 'object') {
|
|
35
|
-
fields.push(...collectFunctionFieldRefs(value));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return fields;
|
|
39
|
-
}
|
|
40
|
-
export function translateProjectStage(projection, context) {
|
|
41
|
-
const params = [];
|
|
42
|
-
const dialect = context.dialect || 'sqlite';
|
|
43
|
-
const fields = Object.entries(projection);
|
|
44
|
-
// Check if it's an exclusion projection (all values are 0 except _id)
|
|
45
|
-
const isExclusion = fields.every(([key, value]) => {
|
|
46
|
-
if (key === '_id')
|
|
47
|
-
return true;
|
|
48
|
-
return value === 0;
|
|
49
|
-
});
|
|
50
|
-
if (isExclusion) {
|
|
51
|
-
return translateExclusionProject(projection, context, params, dialect);
|
|
52
|
-
}
|
|
53
|
-
// Inclusion or computed projection
|
|
54
|
-
return translateInclusionProject(projection, context, params, dialect);
|
|
55
|
-
}
|
|
56
|
-
function translateExclusionProject(projection, _context, params, dialect = 'sqlite') {
|
|
57
|
-
const fieldsToRemove = Object.entries(projection)
|
|
58
|
-
.filter(([key, value]) => value === 0 && key !== '_id')
|
|
59
|
-
.map(([key]) => {
|
|
60
|
-
// Validate field name to prevent SQL injection
|
|
61
|
-
validateFieldPath(key);
|
|
62
|
-
return `'$.${key}'`;
|
|
63
|
-
});
|
|
64
|
-
let selectClause;
|
|
65
|
-
if (fieldsToRemove.length > 0) {
|
|
66
|
-
if (dialect === 'clickhouse') {
|
|
67
|
-
// ClickHouse doesn't have json_remove, would need different approach
|
|
68
|
-
selectClause = 'data'; // Simplified for now
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
selectClause = `json_remove(data, ${fieldsToRemove.join(', ')}) AS data`;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
selectClause = 'data';
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
selectClause,
|
|
79
|
-
params
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function translateInclusionProject(projection, _context, params, dialect = 'sqlite') {
|
|
83
|
-
const jsonParts = [];
|
|
84
|
-
// Collect all field references needed by $function expressions
|
|
85
|
-
// These need to be included in the output so the function executor can extract them
|
|
86
|
-
const functionFieldRefs = new Set();
|
|
87
|
-
for (const [, value] of Object.entries(projection)) {
|
|
88
|
-
if (typeof value === 'object' && value !== null) {
|
|
89
|
-
const refs = collectFunctionFieldRefs(value);
|
|
90
|
-
refs.forEach(ref => functionFieldRefs.add(ref));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// First, add the explicitly projected fields
|
|
94
|
-
const explicitFields = new Set();
|
|
95
|
-
for (const [key, value] of Object.entries(projection)) {
|
|
96
|
-
// Validate key (output field name) to prevent SQL injection
|
|
97
|
-
validateFieldPath(key);
|
|
98
|
-
explicitFields.add(key);
|
|
99
|
-
if (value === 1) {
|
|
100
|
-
// Include existing field
|
|
101
|
-
const fieldExpr = dialectJsonExtract(dialect, 'data', `$.${key}`);
|
|
102
|
-
jsonParts.push(`'${key}', ${fieldExpr}`);
|
|
103
|
-
}
|
|
104
|
-
else if (typeof value === 'string' && value.startsWith('$')) {
|
|
105
|
-
// Field reference (renaming) - getFieldPath validates the field
|
|
106
|
-
const fieldPath = getFieldPath(value);
|
|
107
|
-
const fieldExpr = dialectJsonExtract(dialect, 'data', fieldPath);
|
|
108
|
-
jsonParts.push(`'${key}', ${fieldExpr}`);
|
|
109
|
-
}
|
|
110
|
-
else if (typeof value === 'object' && value !== null) {
|
|
111
|
-
// Expression
|
|
112
|
-
const exprSql = translateExpression(value, params, dialect);
|
|
113
|
-
jsonParts.push(`'${key}', ${exprSql}`);
|
|
114
|
-
}
|
|
115
|
-
else if (value !== 0) {
|
|
116
|
-
// Literal value
|
|
117
|
-
if (typeof value === 'string') {
|
|
118
|
-
params.push(value);
|
|
119
|
-
jsonParts.push(`'${key}', ?`);
|
|
120
|
-
}
|
|
121
|
-
else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
122
|
-
jsonParts.push(`'${key}', ${JSON.stringify(value)}`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// Add source fields needed by $function that aren't already projected
|
|
127
|
-
// These will be used by the function executor to extract argument values
|
|
128
|
-
for (const fieldRef of functionFieldRefs) {
|
|
129
|
-
if (!explicitFields.has(fieldRef)) {
|
|
130
|
-
// Validate field reference to prevent SQL injection
|
|
131
|
-
validateFieldPath(fieldRef);
|
|
132
|
-
const fieldExpr = dialectJsonExtract(dialect, 'data', `$.${fieldRef}`);
|
|
133
|
-
jsonParts.push(`'${fieldRef}', ${fieldExpr}`);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const selectClause = dialect === 'clickhouse'
|
|
137
|
-
? `tuple(${jsonParts.join(', ')}) AS data`
|
|
138
|
-
: `json_object(${jsonParts.join(', ')}) AS data`;
|
|
139
|
-
return {
|
|
140
|
-
selectClause,
|
|
141
|
-
params,
|
|
142
|
-
transformsShape: true
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=project-stage.js.map
|