classSqliteRewriter
final class SqliteRewriter
implements SqlRewriter, RewriteStateCommitter
Public API: explicitly declared with
@visibility public.SQLite rewrite implementation for ZTD.
Orchestrates parsing, classification, transformation, and mutation resolution. Uses Result Select Query approach (not RETURNING) for consistency.
$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$rewriter->rewrite('SELECT 1')->sql() // => 'SELECT 1'Methods§
public function transactionStatement(string $sql): ?TransactionStatementPublic API: explicitly declared with
@visibility public.Returns transaction statement.
Parameters
$sql | string |
Returns
$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$rewriter->transactionStatement('BEGIN') instanceof \ZtdQuery\Sql\TransactionStatement // => true
$rewriter->transactionStatement('SELECT 1') // => nullTest cases 1
Calls 2
public function __construct(
SqliteQueryGuard $guard,
ShadowStore $shadowStore,
TableDefinitionRegistry $registry,
SqliteTransformer $transformer,
SqliteMutationResolver $mutationResolver,
SqliteParser $parser,
?ViewDefinitionSet $views = null,
)Public API: explicitly declared with
@visibility public.Binds the dependencies used by this operation.
Parameters
$guard | SqliteQueryGuard | |
$shadowStore | ShadowStore | |
$registry | TableDefinitionRegistry | |
$transformer | SqliteTransformer | |
$mutationResolver | SqliteMutationResolver | |
$parser | SqliteParser | |
$views | ?ViewDefinitionSet |
$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$rewriter->rewrite('SELECT 1')->kind() // => \ZtdQuery\Rewrite\QueryKind::READpublic function rewrite(string $sql): RewritePlanPublic API: explicitly declared with
@visibility public.{@inheritDoc}
Parameters
$sql | string |
Returns
Throws
UnsupportedSqlException When SQL is empty, unparseable, or multi-statement.UnknownSchemaException When SQL references unknown tables/columns.$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$rewriter->rewrite('SELECT 1; SELECT 2') // throws \ZtdQuery\Exception\UnsupportedSqlException: Multi-statementTest cases 79
RewriterBench::benchRewriteInsertcallsRewriterBench::benchRewriteSelectcallsRewriteCheck::verifycallsSemanticsTarget::__invokecallsSqliteRewriterTest::testAlterTableUsesShadowedMigrationSelectcallsSqliteRewriterTest::testBuildTableContextIncludesMultipleTablesFromRegistrycallsSqliteRewriterTest::testBuildTableContextMergesColumnsFromMultipleRowscallsSqliteRewriterTest::testBuildTableContextRegistryOnlyTableIncludedcallsSqliteRewriterTest::testBuildTableContextShadowStoreEmptyRowsNoDefinitionPassesThroughcallsSqliteRewriterTest::testBuildTableContextSkipsAlreadyAddedFromShadowStorecallsSqliteRewriterTest::testBuildTableContextUsesDefinitionColumnscallsSqliteRewriterTest::testBuildTableContextWithShadowStoreColumnsInferredcallsSqliteRewriterTest::testCommitRewriteStateKeepsGeneratedIdentitiesAcrossRewritescallsSqliteRewriterTest::testCreateTableReturnsDdlSimulatedcallsSqliteRewriterTest::testCteReferencesAreMatchedCaseInsensitivelyDuringSchemaValidationcallsSqliteRewriterTest::testDdlSimulatedReturnsSqlSelectWhere0callsSqliteRewriterTest::testDeleteEnsuresShadowStorecallsSqliteRewriterTest::testDeleteEnsuresShadowStoreCalledOnTargetcallsSqliteRewriterTest::testDeleteEnsuresShadowStoreEntrycallsSqliteRewriterTest::testDeleteEnsuresShadowStoreForTargetTablecallsSqliteRewriterTest::testDeleteFromBacktickQuotedTableReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromBracketQuotedTableReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromLowercaseReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromQuotedTableWithoutWhereReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromWithCommentsReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromWithoutWhereReturnsSqlWithSelectWhere0callsSqliteRewriterTest::testDeleteFromWithoutWhereReturnsWriteSimulatedcallsSqliteRewriterTest::testDeleteFromWithSemicolonAndWhitespacecallsSqliteRewriterTest::testDeleteResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testDeleteReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testDeleteWithWhereProducesTransformedSqlcallsSqliteRewriterTest::testDropTableReturnsDdlSimulatedcallsSqliteRewriterTest::testEmptyInputThrowsExceptioncallsSqliteRewriterTest::testGeneratedExpressionIsPresentBeforeTheFirstShadowWritecallsSqliteRewriterTest::testHasSchemaContextWithRegistryOnlycallsSqliteRewriterTest::testHasSchemaContextWithShadowStoreOnlycallsSqliteRewriterTest::testInMemoryAttachPassesThroughUnchangedcallsSqliteRewriterTest::testInsertDoesNotEnsureShadowStoreForTargetTablecallsSqliteRewriterTest::testInsertOnConflictReturnsUpsertMutationcallsSqliteRewriterTest::testInsertOrReplaceReturnsWriteSimulatedWithReplaceMutationcallsSqliteRewriterTest::testInsertResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testInsertReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testInsertRewriteOutputContainsSelectcallsSqliteRewriterTest::testInsertUsesDefaultsFromRegistryWithoutShadowRowscallsSqliteRewriterTest::testInsertUsesIdentityStrategyFromRegistryWithoutShadowRowscallsSqliteRewriterTest::testInsertWithShadowDataProducesTransformedSqlcallsSqliteRewriterTest::testMultiStatementThrowsExceptioncallsSqliteRewriterTest::testPersistentAttachRemainsUnsupportedcallsSqliteRewriterTest::testReadOnlyDiagnosticsPassThroughUnchangedcallsSqliteRewriterTest::testReadPlanHasNoMutationcallsSqliteRewriterTest::testRegisteredViewIsKnownAndMaterializedcallsSqliteRewriterTest::testRemovedTableIsShadowedInsteadOfFallingThroughcallsSqliteRewriterTest::testReplaceReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testRewriteIsDeterministiccallsSqliteRewriterTest::testRewriteOutputIsNonEmptycallsSqliteRewriterTest::testSchemaQualifiedSelectUsesShadowCtecallsSqliteRewriterTest::testSelectExistingInShadowStoreIsNotUnknowncallsSqliteRewriterTest::testSelectIgnoresSqlKeywordsInsideLeadingLineCommentcallsSqliteRewriterTest::testSelectKnownTableNoSchemaContextDoesNotThrowcallsSqliteRewriterTest::testSelectReturnsReadKindcallsSqliteRewriterTest::testSelectRewritesTableAfterBlockCommentcallsSqliteRewriterTest::testSelectTableInShadowStoreNotUnknowncallsSqliteRewriterTest::testSelectUnknownTableWithSchemaContextThrowscallsSqliteRewriterTest::testSelectWithMultipleRegisteredTablesIncludesAllcallsSqliteRewriterTest::testSelectWithRegistryOnlyBuildTableContextcallsSqliteRewriterTest::testSelectWithShadowDataColumnsInferredcallsSqliteRewriterTest::testSelectWithShadowDataIncludesCtecallsSqliteRewriterTest::testSelectWithShadowStoreAndRegistryTablesMergedcallsSqliteRewriterTest::testSelectWithShadowStoreOnlyHasSchemaContextcallsSqliteRewriterTest::testUnknownTableAfterDeclaredCteIsRejectedcallsSqliteRewriterTest::testUnsupportedSqlThrowsExceptioncallsSqliteRewriterTest::testUpdateDoesNotPromoteMaterializedUnknownTablecallsSqliteRewriterTest::testUpdateEnsuresShadowStorecallsSqliteRewriterTest::testUpdateEnsuresShadowStoreCalledOnTargetcallsSqliteRewriterTest::testUpdateEnsuresShadowStoreEntrycallsSqliteRewriterTest::testUpdateEnsuresShadowStoreForTargetTablecallsSqliteRewriterTest::testUpdateResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testUpdateReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testWritePlanHasNonNullMutationcalls
Calls 5
- method-call SqliteParser::splitStatements() line 117
- new UnsupportedSqlException line 119
- function-call
countline 122 - method-call StatementRewriter::rewriteStatement() line 123
- new StatementRewriter line 123
public function rewriteMultiple(string $sql): MultiRewritePlanPublic API: explicitly declared with
@visibility public.{@inheritDoc}
Parameters
$sql | string |
Returns
Throws
UnsupportedSqlException When SQL is empty or unparseable.UnknownSchemaException When SQL references unknown tables/columns.$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$plans = $rewriter->rewriteMultiple('SELECT 1; SELECT 2');
$plans->count() // => 2
$plans->get(1)?->sql() // => 'SELECT 2'Test cases 2
Calls 5
public function splitStatements(string $sql): arrayPublic API: explicitly declared with
@visibility public.{@inheritDoc}
Parameters
$sql | string |
Returns
array$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$rewriter->splitStatements("SELECT ';'; SELECT 2") // => ["SELECT ';'", 'SELECT 2']Test cases 1
Called from 1
Calls 1
- method-call SqliteParser::splitStatements() line 178
public function commitRewriteState(): voidPublic API: explicitly declared with
@visibility public.Commits the transformer state after a rewrite completes.
$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$rewriter->rewrite('SELECT 1');
$rewriter->commitRewriteState();
$rewriter->rewrite('SELECT 2')->sql() // => 'SELECT 2'Test cases 2
Calls 1
- method-call SqliteTransformer::commitRewriteState() line 198
public function emptyResultSelect(): stringPublic API: explicitly declared with
@visibility public.Returns a SELECT that produces no result rows.
Returns
string$parser = new \ZtdQuery\Platform\Sqlite\Sql\SqliteParser();
$store = new \ZtdQuery\Shadow\ShadowStore();
$registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
$select = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SelectTransformer();
$transformer = new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\SqliteTransformer($parser, $select, new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\InsertTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer($parser, $select), new \ZtdQuery\Platform\Sqlite\Rewrite\Transformer\DeleteTransformer($parser, $select));
$resolver = new \ZtdQuery\Platform\Sqlite\Shadow\SqliteMutationResolver($store, $registry, new \ZtdQuery\Platform\Sqlite\Schema\SqliteSchemaParser(), $parser);
$rewriter = new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteRewriter(new \ZtdQuery\Platform\Sqlite\Rewrite\SqliteQueryGuard($parser), $store, $registry, $transformer, $resolver, $parser);
$sql = $rewriter->emptyResultSelect();
$pdo = new \PDO('sqlite::memory:');
$pdo->query($sql)->fetchAll() // => []Test cases 1
Private surface 9§
Implementation details, listed for orientation only.
private SqliteQueryGuard $guardprivate ShadowStore $shadowStoreprivate TableDefinitionRegistry $registryprivate SqliteTransformer $transformerprivate SqliteMutationResolver $mutationResolverprivate SqliteParser $parserprivate SqliteReturningProjectionParser $returningProjectionParserprivate SqliteCteShadowComposer $cteComposerprivate ViewDefinitionSet $viewsTest cases 87§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 80
SqliteRewriterTest::testAlterTableUsesShadowedMigrationSelectcallsSqliteRewriterTest::testBuildTableContextIncludesMultipleTablesFromRegistrycallsSqliteRewriterTest::testBuildTableContextMergesColumnsFromMultipleRowscallsSqliteRewriterTest::testBuildTableContextRegistryOnlyTableIncludedcallsSqliteRewriterTest::testBuildTableContextShadowStoreEmptyRowsNoDefinitionPassesThroughcallsSqliteRewriterTest::testBuildTableContextSkipsAlreadyAddedFromShadowStorecallsSqliteRewriterTest::testBuildTableContextUsesDefinitionColumnscallsSqliteRewriterTest::testBuildTableContextWithShadowStoreColumnsInferredcallsSqliteRewriterTest::testCommitRewriteStateKeepsGeneratedIdentitiesAcrossRewritescallsSqliteRewriterTest::testCreateTableReturnsDdlSimulatedcallsSqliteRewriterTest::testCteReferencesAreMatchedCaseInsensitivelyDuringSchemaValidationcallsSqliteRewriterTest::testDdlSimulatedReturnsSqlSelectWhere0callsSqliteRewriterTest::testDeleteEnsuresShadowStorecallsSqliteRewriterTest::testDeleteEnsuresShadowStoreCalledOnTargetcallsSqliteRewriterTest::testDeleteEnsuresShadowStoreEntrycallsSqliteRewriterTest::testDeleteEnsuresShadowStoreForTargetTablecallsSqliteRewriterTest::testDeleteFromBacktickQuotedTableReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromBracketQuotedTableReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromLowercaseReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromQuotedTableWithoutWhereReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromWithCommentsReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromWithoutWhereReturnsSqlWithSelectWhere0callsSqliteRewriterTest::testDeleteFromWithoutWhereReturnsWriteSimulatedcallsSqliteRewriterTest::testDeleteFromWithSemicolonAndWhitespacecallsSqliteRewriterTest::testDeleteResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testDeleteReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testDeleteWithWhereProducesTransformedSqlcallsSqliteRewriterTest::testDropTableReturnsDdlSimulatedcallsSqliteRewriterTest::testEmptyInputThrowsExceptioncallsSqliteRewriterTest::testEmptyResultSelectProducesNoRowscallsSqliteRewriterTest::testGeneratedExpressionIsPresentBeforeTheFirstShadowWritecallsSqliteRewriterTest::testHasSchemaContextWithRegistryOnlycallsSqliteRewriterTest::testHasSchemaContextWithShadowStoreOnlycallsSqliteRewriterTest::testInMemoryAttachPassesThroughUnchangedcallsSqliteRewriterTest::testInsertDoesNotEnsureShadowStoreForTargetTablecallsSqliteRewriterTest::testInsertOnConflictReturnsUpsertMutationcallsSqliteRewriterTest::testInsertOrReplaceReturnsWriteSimulatedWithReplaceMutationcallsSqliteRewriterTest::testInsertResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testInsertReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testInsertRewriteOutputContainsSelectcallsSqliteRewriterTest::testInsertUsesDefaultsFromRegistryWithoutShadowRowscallsSqliteRewriterTest::testInsertUsesIdentityStrategyFromRegistryWithoutShadowRowscallsSqliteRewriterTest::testInsertWithShadowDataProducesTransformedSqlcallsSqliteRewriterTest::testMultiStatementThrowsExceptioncallsSqliteRewriterTest::testPersistentAttachRemainsUnsupportedcallsSqliteRewriterTest::testReadOnlyDiagnosticsPassThroughUnchangedcallsSqliteRewriterTest::testReadPlanHasNoMutationcallsSqliteRewriterTest::testRegisteredViewIsKnownAndMaterializedcallsSqliteRewriterTest::testRemovedTableIsShadowedInsteadOfFallingThroughcallsSqliteRewriterTest::testReplaceReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testRewriteIsDeterministiccallsSqliteRewriterTest::testRewriteMultiplecallsSqliteRewriterTest::testRewriteMultipleEmptyThrowscallsSqliteRewriterTest::testRewriteOutputIsNonEmptycallsSqliteRewriterTest::testSchemaQualifiedSelectUsesShadowCtecallsSqliteRewriterTest::testSelectExistingInShadowStoreIsNotUnknowncallsSqliteRewriterTest::testSelectIgnoresSqlKeywordsInsideLeadingLineCommentcallsSqliteRewriterTest::testSelectKnownTableNoSchemaContextDoesNotThrowcallsSqliteRewriterTest::testSelectReturnsReadKindcallsSqliteRewriterTest::testSelectRewritesTableAfterBlockCommentcallsSqliteRewriterTest::testSelectTableInShadowStoreNotUnknowncallsSqliteRewriterTest::testSelectUnknownTableWithSchemaContextThrowscallsSqliteRewriterTest::testSelectWithMultipleRegisteredTablesIncludesAllcallsSqliteRewriterTest::testSelectWithRegistryOnlyBuildTableContextcallsSqliteRewriterTest::testSelectWithShadowDataColumnsInferredcallsSqliteRewriterTest::testSelectWithShadowDataIncludesCtecallsSqliteRewriterTest::testSelectWithShadowStoreAndRegistryTablesMergedcallsSqliteRewriterTest::testSelectWithShadowStoreOnlyHasSchemaContextcallsSqliteRewriterTest::testSplitStatementsPreservesQuotedSemicolonscallsSqliteRewriterTest::testTransactionStatementRestoresSnapshotOnRollbackcallsSqliteRewriterTest::testUnknownTableAfterDeclaredCteIsRejectedcallsSqliteRewriterTest::testUnsupportedSqlThrowsExceptioncallsSqliteRewriterTest::testUpdateDoesNotPromoteMaterializedUnknownTablecallsSqliteRewriterTest::testUpdateEnsuresShadowStorecallsSqliteRewriterTest::testUpdateEnsuresShadowStoreCalledOnTargetcallsSqliteRewriterTest::testUpdateEnsuresShadowStoreEntrycallsSqliteRewriterTest::testUpdateEnsuresShadowStoreForTargetTablecallsSqliteRewriterTest::testUpdateResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testUpdateReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testWritePlanHasNonNullMutationcalls