import { type Connection } from '@mikro-orm/core';
import type { AbstractSqlConnection } from '../../AbstractSqlConnection.js';
import { SchemaHelper } from '../../schema/SchemaHelper.js';
import type { Column, IndexDef, Table, TableDifference } from '../../typings.js';
import type { DatabaseTable } from '../../schema/DatabaseTable.js';
import type { DatabaseSchema } from '../../schema/DatabaseSchema.js';
export declare class SqliteSchemaHelper extends SchemaHelper {
  disableForeignKeysSQL(): string;
  enableForeignKeysSQL(): string;
  supportsSchemaConstraints(): boolean;
  getCreateNamespaceSQL(name: string): string;
  getDropNamespaceSQL(name: string): string;
  getListTablesSQL(): string;
  getAllTables(connection: AbstractSqlConnection, schemas?: string[]): Promise<Table[]>;
  getNamespaces(connection: AbstractSqlConnection): Promise<string[]>;
  private getIgnoredViewsCondition;
  getListViewsSQL(): string;
  loadViews(schema: DatabaseSchema, connection: AbstractSqlConnection, schemaName?: string): Promise<void>;
  getDropDatabaseSQL(name: string): string;
  loadInformationSchema(
    schema: DatabaseSchema,
    connection: AbstractSqlConnection,
    tables: Table[],
    schemas?: string[],
  ): Promise<void>;
  createTable(table: DatabaseTable, alter?: boolean): string[];
  createTableColumn(column: Column, table: DatabaseTable, _changedProperties?: Set<string>): string | undefined;
  getAddColumnsSQL(table: DatabaseTable, columns: Column[], diff?: TableDifference): string[];
  dropForeignKey(tableName: string, constraintName: string): string;
  getDropColumnsSQL(tableName: string, columns: Column[], schemaName?: string): string;
  getCreateIndexSQL(tableName: string, index: IndexDef): string;
  private parseTableDefinition;
  /**
   * Returns schema prefix for pragma and sqlite_master queries.
   * Returns empty string for main database (no prefix needed).
   */
  private getSchemaPrefix;
  /**
   * Returns all database names excluding 'temp'.
   */
  private getDatabaseList;
  /**
   * Extracts the SELECT part from a CREATE VIEW statement.
   */
  private extractViewDefinition;
  private getColumns;
  /**
   * SQLite strips outer parentheses from expression defaults (`DEFAULT (expr)` → `expr` in pragma).
   * We need to add them back so they match what we generate in DDL.
   */
  private wrapExpressionDefault;
  private getEnumDefinitions;
  getPrimaryKeys(
    connection: AbstractSqlConnection,
    indexes: IndexDef[],
    tableName: string,
    schemaName?: string,
  ): Promise<string[]>;
  private getIndexes;
  private getChecks;
  private getColumnDefinitions;
  private getForeignKeys;
  getManagementDbName(): string;
  getCreateDatabaseSQL(name: string): string;
  databaseExists(connection: Connection, name: string): Promise<boolean>;
  /**
   * Implicit indexes will be ignored when diffing
   */
  isImplicitIndex(name: string): boolean;
  dropIndex(table: string, index: IndexDef, oldIndexName?: string): string;
  /**
   * SQLite does not support schema-qualified table names in REFERENCES clauses.
   * Foreign key references can only point to tables in the same database.
   */
  getReferencedTableName(referencedTableName: string, schema?: string): string;
  alterTable(diff: TableDifference, safe?: boolean): string[];
  private getAlterTempTableSQL;
}
