@rawsql-ts/ztd-cli 0.14.4 → 0.16.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/README.md +25 -11
- package/dist/commands/init.js +27 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.d.ts +59 -0
- package/dist/commands/lint.js +338 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/sqlLintHelpers.d.ts +18 -0
- package/dist/utils/sqlLintHelpers.js +270 -0
- package/dist/utils/sqlLintHelpers.js.map +1 -0
- package/package.json +11 -4
- package/templates/AGENTS.md +95 -53
- package/templates/README.md +45 -67
- package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.d.ts +38 -0
- package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.js +117 -0
- package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.js.map +1 -0
- package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.d.ts +4 -0
- package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.js +71 -0
- package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.js.map +1 -0
- package/templates/dist/drivers/pg-testkit/src/index.d.ts +5 -0
- package/templates/dist/drivers/pg-testkit/src/index.js +11 -0
- package/templates/dist/drivers/pg-testkit/src/index.js.map +1 -0
- package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.d.ts +3 -0
- package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.js +79 -0
- package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.js.map +1 -0
- package/templates/dist/drivers/pg-testkit/src/types.d.ts +69 -0
- package/templates/dist/drivers/pg-testkit/src/types.js +3 -0
- package/templates/dist/drivers/pg-testkit/src/types.js.map +1 -0
- package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.d.ts +15 -0
- package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.js +34 -0
- package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.js.map +1 -0
- package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.d.ts +12 -0
- package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.js +53 -0
- package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.js.map +1 -0
- package/templates/dist/mapper-core/src/index.d.ts +160 -0
- package/templates/dist/mapper-core/src/index.js +637 -0
- package/templates/dist/mapper-core/src/index.js.map +1 -0
- package/templates/dist/testkit-core/src/errors/index.d.ts +49 -0
- package/templates/dist/testkit-core/src/errors/index.js +111 -0
- package/templates/dist/testkit-core/src/errors/index.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.d.ts +5 -0
- package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.js +29 -0
- package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.d.ts +37 -0
- package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.js +182 -0
- package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/FixtureProvider.d.ts +20 -0
- package/templates/dist/testkit-core/src/fixtures/FixtureProvider.js +121 -0
- package/templates/dist/testkit-core/src/fixtures/FixtureProvider.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/FixtureStore.d.ts +51 -0
- package/templates/dist/testkit-core/src/fixtures/FixtureStore.js +199 -0
- package/templates/dist/testkit-core/src/fixtures/FixtureStore.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.d.ts +10 -0
- package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.js +28 -0
- package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/TableNameResolver.d.ts +18 -0
- package/templates/dist/testkit-core/src/fixtures/TableNameResolver.js +80 -0
- package/templates/dist/testkit-core/src/fixtures/TableNameResolver.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/ddlLint.d.ts +59 -0
- package/templates/dist/testkit-core/src/fixtures/ddlLint.js +489 -0
- package/templates/dist/testkit-core/src/fixtures/ddlLint.js.map +1 -0
- package/templates/dist/testkit-core/src/fixtures/naming.d.ts +1 -0
- package/templates/dist/testkit-core/src/fixtures/naming.js +6 -0
- package/templates/dist/testkit-core/src/fixtures/naming.js.map +1 -0
- package/templates/dist/testkit-core/src/index.d.ts +17 -0
- package/templates/dist/testkit-core/src/index.js +47 -0
- package/templates/dist/testkit-core/src/index.js.map +1 -0
- package/templates/dist/testkit-core/src/logger/NoopLogger.d.ts +8 -0
- package/templates/dist/testkit-core/src/logger/NoopLogger.js +16 -0
- package/templates/dist/testkit-core/src/logger/NoopLogger.js.map +1 -0
- package/templates/dist/testkit-core/src/provider/TestkitProvider.d.ts +57 -0
- package/templates/dist/testkit-core/src/provider/TestkitProvider.js +149 -0
- package/templates/dist/testkit-core/src/provider/TestkitProvider.js.map +1 -0
- package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.d.ts +43 -0
- package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.js +473 -0
- package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.js.map +1 -0
- package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.d.ts +9 -0
- package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.js +38 -0
- package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.js.map +1 -0
- package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.d.ts +42 -0
- package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.js +298 -0
- package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.js.map +1 -0
- package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.d.ts +12 -0
- package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.js +63 -0
- package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.js.map +1 -0
- package/templates/dist/testkit-core/src/types/index.d.ts +69 -0
- package/templates/dist/testkit-core/src/types/index.js +3 -0
- package/templates/dist/testkit-core/src/types/index.js.map +1 -0
- package/templates/dist/testkit-core/src/utils/queryHelpers.d.ts +28 -0
- package/templates/dist/testkit-core/src/utils/queryHelpers.js +81 -0
- package/templates/dist/testkit-core/src/utils/queryHelpers.js.map +1 -0
- package/templates/dist/writer-core/src/index.d.ts +34 -0
- package/templates/dist/writer-core/src/index.js +115 -0
- package/templates/dist/writer-core/src/index.js.map +1 -0
- package/templates/dist/ztd-cli/templates/src/db/sql-client.d.ts +20 -0
- package/templates/dist/ztd-cli/templates/src/db/sql-client.js +3 -0
- package/templates/dist/ztd-cli/templates/src/db/sql-client.js.map +1 -0
- package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.d.ts +36 -0
- package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.js +85 -0
- package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.js.map +1 -0
- package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.d.ts +20 -0
- package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.js +33 -0
- package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.js.map +1 -0
- package/templates/dist/ztd-cli/templates/tests/support/global-setup.d.ts +10 -0
- package/templates/dist/ztd-cli/templates/tests/support/global-setup.js +29 -0
- package/templates/dist/ztd-cli/templates/tests/support/global-setup.js.map +1 -0
- package/templates/dist/ztd-cli/templates/tests/support/testkit-client.d.ts +66 -0
- package/templates/dist/ztd-cli/templates/tests/support/testkit-client.js +552 -0
- package/templates/dist/ztd-cli/templates/tests/support/testkit-client.js.map +1 -0
- package/templates/dist/ztd-cli/templates/tests/user-profiles.test.d.ts +1 -0
- package/templates/dist/ztd-cli/templates/tests/user-profiles.test.js +82 -0
- package/templates/dist/ztd-cli/templates/tests/user-profiles.test.js.map +1 -0
- package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.d.ts +1 -0
- package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.js +29 -0
- package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.js.map +1 -0
- package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.d.ts +7 -0
- package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.js +10 -0
- package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.js.map +1 -0
- package/templates/src/db/sql-client.ts +1 -1
- package/templates/src/repositories/user-accounts.ts +179 -0
- package/templates/tests/AGENTS.md +59 -6
- package/templates/tests/support/global-setup.ts +1 -1
- package/templates/tests/support/testkit-client.ts +4 -4
- package/templates/tests/user-profiles.test.ts +161 -0
- package/templates/tests/writer-constraints.test.ts +32 -0
- package/templates/tests/ztd-layout.generated.ts +0 -2
- package/templates/tsconfig.json +1 -2
- package/templates/ztd/AGENTS.md +10 -85
- package/templates/ztd/README.md +10 -79
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { TableFixture } from '../types';
|
|
2
|
+
/** Supported connection reuse strategies exposed by the provider. */
|
|
3
|
+
export type ConnectionStrategy = 'shared' | 'perTest';
|
|
4
|
+
/** Minimum subset of a connection required by the provider. */
|
|
5
|
+
export type TestkitConnection = {
|
|
6
|
+
query(sql: string, values?: unknown[]): Promise<unknown>;
|
|
7
|
+
};
|
|
8
|
+
/** Custom hook invoked after a shared scenario to reset session state. */
|
|
9
|
+
export type ConnectionResetHook<TConnection extends TestkitConnection> = (connection: TConnection) => Promise<void> | void;
|
|
10
|
+
/**
|
|
11
|
+
* Options that determine how the shared connection is cleaned up between scenarios.
|
|
12
|
+
*/
|
|
13
|
+
export type ConnectionResetOption<TConnection extends TestkitConnection> = 'transaction' | 'none' | ConnectionResetHook<TConnection>;
|
|
14
|
+
/**
|
|
15
|
+
* Configuration required to construct a `TestkitProvider`.
|
|
16
|
+
*/
|
|
17
|
+
export interface CreateTestkitProviderOptions<TConnection extends TestkitConnection, TResource> {
|
|
18
|
+
connectionFactory: () => Promise<TConnection>;
|
|
19
|
+
resourceFactory: (connection: TConnection, fixtures: TableFixture[]) => Promise<TResource> | TResource;
|
|
20
|
+
strategy?: ConnectionStrategy;
|
|
21
|
+
reset?: ConnectionResetOption<TConnection>;
|
|
22
|
+
releaseResource?: (resource: TResource) => Promise<void> | void;
|
|
23
|
+
disposeConnection?: (connection: TConnection) => Promise<void> | void;
|
|
24
|
+
}
|
|
25
|
+
type PerTestAccessor<TResource> = {
|
|
26
|
+
withRepositoryFixture<Result>(fixtures: TableFixture[], callback: (resource: TResource) => Promise<Result> | Result): Promise<Result>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Manages connection recycling for ZTD repositories by wiring fixtures into
|
|
30
|
+
* shared or per-test sessions.
|
|
31
|
+
*/
|
|
32
|
+
export declare class TestkitProvider<TConnection extends TestkitConnection, TResource> {
|
|
33
|
+
private readonly options;
|
|
34
|
+
private sharedConnectionPromise?;
|
|
35
|
+
private sharedConnection?;
|
|
36
|
+
private closed;
|
|
37
|
+
private sharedQueue;
|
|
38
|
+
private readonly releaseResource;
|
|
39
|
+
private readonly disposeConnection;
|
|
40
|
+
constructor(options: CreateTestkitProviderOptions<TConnection, TResource>);
|
|
41
|
+
withRepositoryFixture<Result>(fixtures: TableFixture[], callback: (resource: TResource) => Promise<Result> | Result, overrides?: {
|
|
42
|
+
strategy?: ConnectionStrategy;
|
|
43
|
+
}): Promise<Result>;
|
|
44
|
+
perTest(): PerTestAccessor<TResource>;
|
|
45
|
+
close(): Promise<void>;
|
|
46
|
+
private runWithSharedConnection;
|
|
47
|
+
private runWithPerTestConnection;
|
|
48
|
+
private beginTransactionIfNeeded;
|
|
49
|
+
private executeReset;
|
|
50
|
+
private ensureSharedConnection;
|
|
51
|
+
private ensureNotClosed;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Instantiates a `TestkitProvider` with the given configuration.
|
|
55
|
+
*/
|
|
56
|
+
export declare function createTestkitProvider<TConnection extends TestkitConnection, TResource>(options: CreateTestkitProviderOptions<TConnection, TResource>): Promise<TestkitProvider<TConnection, TResource>>;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestkitProvider = void 0;
|
|
4
|
+
exports.createTestkitProvider = createTestkitProvider;
|
|
5
|
+
const DEFAULT_STRATEGY = 'shared';
|
|
6
|
+
const DEFAULT_RESET = 'transaction';
|
|
7
|
+
const defaultDisposeConnection = async (connection) => {
|
|
8
|
+
const closable = connection;
|
|
9
|
+
if (typeof closable.release === 'function') {
|
|
10
|
+
closable.release();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (typeof closable.end === 'function') {
|
|
14
|
+
await closable.end();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Manages connection recycling for ZTD repositories by wiring fixtures into
|
|
19
|
+
* shared or per-test sessions.
|
|
20
|
+
*/
|
|
21
|
+
class TestkitProvider {
|
|
22
|
+
constructor(options) {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
this.options = options;
|
|
25
|
+
this.closed = false;
|
|
26
|
+
this.sharedQueue = Promise.resolve();
|
|
27
|
+
this.releaseResource = (_a = options.releaseResource) !== null && _a !== void 0 ? _a : (() => undefined);
|
|
28
|
+
this.disposeConnection =
|
|
29
|
+
(_b = options.disposeConnection) !== null && _b !== void 0 ? _b : (async (connection) => defaultDisposeConnection(connection));
|
|
30
|
+
}
|
|
31
|
+
withRepositoryFixture(fixtures, callback, overrides) {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
this.ensureNotClosed();
|
|
34
|
+
const strategy = (_b = (_a = overrides === null || overrides === void 0 ? void 0 : overrides.strategy) !== null && _a !== void 0 ? _a : this.options.strategy) !== null && _b !== void 0 ? _b : DEFAULT_STRATEGY;
|
|
35
|
+
if (strategy === 'perTest') {
|
|
36
|
+
// Use a fresh connection for every invocation to keep session state isolated.
|
|
37
|
+
return this.runWithPerTestConnection(fixtures, callback);
|
|
38
|
+
}
|
|
39
|
+
// The shared path reuses a single connection and applies the configured reset.
|
|
40
|
+
return this.runWithSharedConnection(fixtures, callback);
|
|
41
|
+
}
|
|
42
|
+
perTest() {
|
|
43
|
+
return {
|
|
44
|
+
withRepositoryFixture: (fixtures, callback) => this.withRepositoryFixture(fixtures, callback, { strategy: 'perTest' }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async close() {
|
|
48
|
+
if (this.closed) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.closed = true;
|
|
52
|
+
// Ensure no shared scenario is still running before cleanup.
|
|
53
|
+
await this.sharedQueue.catch(() => undefined);
|
|
54
|
+
if (!this.sharedConnectionPromise) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Wait for the shared connection to settle before disposing it.
|
|
58
|
+
const connection = await this.sharedConnectionPromise;
|
|
59
|
+
await this.disposeConnection(connection);
|
|
60
|
+
}
|
|
61
|
+
async runWithSharedConnection(fixtures, callback) {
|
|
62
|
+
const runScenario = async () => {
|
|
63
|
+
var _a;
|
|
64
|
+
const connection = await this.ensureSharedConnection();
|
|
65
|
+
const resetOption = (_a = this.options.reset) !== null && _a !== void 0 ? _a : DEFAULT_RESET;
|
|
66
|
+
const transactionStarted = await this.beginTransactionIfNeeded(connection, resetOption);
|
|
67
|
+
let resource;
|
|
68
|
+
try {
|
|
69
|
+
// Create the resource tied to this shared connection before invoking the callback.
|
|
70
|
+
resource = await this.options.resourceFactory(connection, fixtures);
|
|
71
|
+
return await callback(resource);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
if (resource !== undefined) {
|
|
75
|
+
await this.releaseResource(resource);
|
|
76
|
+
}
|
|
77
|
+
// Run the configured reset after the scenario so the connection stays clean.
|
|
78
|
+
await this.executeReset(connection, resetOption, transactionStarted);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
// Serialize shared usage so scenarios never run in parallel.
|
|
82
|
+
const next = this.sharedQueue.catch(() => undefined);
|
|
83
|
+
const task = next.then(() => runScenario());
|
|
84
|
+
this.sharedQueue = task.then(() => undefined, () => undefined);
|
|
85
|
+
return task;
|
|
86
|
+
}
|
|
87
|
+
async runWithPerTestConnection(fixtures, callback) {
|
|
88
|
+
const connection = await this.options.connectionFactory();
|
|
89
|
+
try {
|
|
90
|
+
// Every invocation gets a new connection that is disposed afterward.
|
|
91
|
+
const resource = await this.options.resourceFactory(connection, fixtures);
|
|
92
|
+
try {
|
|
93
|
+
return await callback(resource);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
await this.releaseResource(resource);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
// Tear down the transient connection once the callback completes.
|
|
101
|
+
await this.disposeConnection(connection);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async beginTransactionIfNeeded(connection, resetOption) {
|
|
105
|
+
if (resetOption !== 'transaction') {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Wrap the scenario in a transaction so it can be rolled back later.
|
|
109
|
+
await connection.query('BEGIN');
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
async executeReset(connection, resetOption, transactionStarted) {
|
|
113
|
+
if (resetOption === 'transaction' && transactionStarted) {
|
|
114
|
+
// Roll the prior transaction back to keep the shared connection clean.
|
|
115
|
+
await connection.query('ROLLBACK');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (typeof resetOption === 'function') {
|
|
119
|
+
// Invoke the custom reset hook after each shared scenario.
|
|
120
|
+
await resetOption(connection);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async ensureSharedConnection() {
|
|
124
|
+
if (this.sharedConnectionPromise) {
|
|
125
|
+
return this.sharedConnectionPromise;
|
|
126
|
+
}
|
|
127
|
+
// Cache the single shared connection so concurrent callers reuse it.
|
|
128
|
+
this.sharedConnectionPromise = (async () => {
|
|
129
|
+
const connection = await this.options.connectionFactory();
|
|
130
|
+
this.sharedConnection = connection;
|
|
131
|
+
return connection;
|
|
132
|
+
})();
|
|
133
|
+
return this.sharedConnectionPromise;
|
|
134
|
+
}
|
|
135
|
+
ensureNotClosed() {
|
|
136
|
+
if (this.closed) {
|
|
137
|
+
// Prevent operations after the provider has been shut down.
|
|
138
|
+
throw new Error('TestkitProvider is already closed.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.TestkitProvider = TestkitProvider;
|
|
143
|
+
/**
|
|
144
|
+
* Instantiates a `TestkitProvider` with the given configuration.
|
|
145
|
+
*/
|
|
146
|
+
async function createTestkitProvider(options) {
|
|
147
|
+
return new TestkitProvider(options);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=TestkitProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestkitProvider.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/provider/TestkitProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { MissingFixtureStrategy, SqlFormatterOptions } from 'rawsql-ts';
|
|
2
|
+
import type { FixtureResolver, TableRowsFixture } from '../types';
|
|
3
|
+
import { TableNameResolver } from '../fixtures/TableNameResolver';
|
|
4
|
+
interface RewriteResult {
|
|
5
|
+
sql: string;
|
|
6
|
+
fixturesApplied: string[];
|
|
7
|
+
sourceCommand: string | null;
|
|
8
|
+
isCountWrapper: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Rewrites CRUD/SELECT statements into fixture-backed SELECTs while ignoring unsupported DDL. */
|
|
11
|
+
export declare class ResultSelectRewriter {
|
|
12
|
+
private readonly fixtures;
|
|
13
|
+
private readonly missingFixtureStrategy;
|
|
14
|
+
private readonly tableNameResolver?;
|
|
15
|
+
private readonly formatter;
|
|
16
|
+
private visitedComponents;
|
|
17
|
+
constructor(fixtures: FixtureResolver, missingFixtureStrategy?: MissingFixtureStrategy, formatterOptions?: SqlFormatterOptions, tableNameResolver?: TableNameResolver | undefined);
|
|
18
|
+
rewrite(sql: string, scopedFixtures?: TableRowsFixture[]): RewriteResult;
|
|
19
|
+
private prepareInputs;
|
|
20
|
+
private parseStatements;
|
|
21
|
+
private convertStatement;
|
|
22
|
+
private convertToResultSelect;
|
|
23
|
+
private injectFixtures;
|
|
24
|
+
private applyFixtureAliases;
|
|
25
|
+
private buildFixtureAliasMap;
|
|
26
|
+
private buildFixtureAlias;
|
|
27
|
+
private filterFixturesForQuery;
|
|
28
|
+
private collectReferencedTableKeys;
|
|
29
|
+
private getLookupCandidates;
|
|
30
|
+
private getPrimaryKey;
|
|
31
|
+
private normalizeParameters;
|
|
32
|
+
private restoreParameters;
|
|
33
|
+
private rewriteSchemaQualifiers;
|
|
34
|
+
private rewriteColumnReferencesInQuery;
|
|
35
|
+
private rewriteSourceExpression;
|
|
36
|
+
private rewriteSourceComponent;
|
|
37
|
+
private rewriteSqlComponent;
|
|
38
|
+
private rewriteValueComponent;
|
|
39
|
+
private rewriteSwitchCaseArgument;
|
|
40
|
+
private rewriteWindowFrameExpression;
|
|
41
|
+
private rewriteColumnReference;
|
|
42
|
+
}
|
|
43
|
+
export {};
|