import { type EntityProperty, type IsolationLevel } from '@mikro-orm/core';
import { AbstractSqlPlatform } from '../../AbstractSqlPlatform.js';
import { SqliteNativeQueryBuilder } from './SqliteNativeQueryBuilder.js';
import { SqliteSchemaHelper } from './SqliteSchemaHelper.js';
import { SqliteExceptionConverter } from './SqliteExceptionConverter.js';
export declare class SqlitePlatform extends AbstractSqlPlatform {
  protected readonly schemaHelper: SqliteSchemaHelper;
  protected readonly exceptionConverter: SqliteExceptionConverter;
  /** @internal */
  createNativeQueryBuilder(): SqliteNativeQueryBuilder;
  usesDefaultKeyword(): boolean;
  usesReturningStatement(): boolean;
  usesEnumCheckConstraints(): boolean;
  getCurrentTimestampSQL(length: number): string;
  getDateTimeTypeDeclarationSQL(column: { length: number }): string;
  getBeginTransactionSQL(options?: { isolationLevel?: IsolationLevel; readOnly?: boolean }): string[];
  getEnumTypeDeclarationSQL(column: {
    items?: unknown[];
    fieldNames: string[];
    length?: number;
    unsigned?: boolean;
    autoincrement?: boolean;
  }): string;
  getTinyIntTypeDeclarationSQL(column: { length?: number; unsigned?: boolean; autoincrement?: boolean }): string;
  getSmallIntTypeDeclarationSQL(column: { length?: number; unsigned?: boolean; autoincrement?: boolean }): string;
  getIntegerTypeDeclarationSQL(column: { length?: number; unsigned?: boolean; autoincrement?: boolean }): string;
  getFloatDeclarationSQL(): string;
  getBooleanTypeDeclarationSQL(): string;
  getCharTypeDeclarationSQL(column: { length?: number }): string;
  getVarcharTypeDeclarationSQL(column: { length?: number }): string;
  normalizeColumnType(
    type: string,
    options: {
      length?: number;
      precision?: number;
      scale?: number;
    },
  ): string;
  convertsJsonAutomatically(): boolean;
  /**
   * This is used to narrow the value of Date properties as they will be stored as timestamps in sqlite.
   * We use this method to convert Dates to timestamps when computing the changeset, so we have the right
   * data type in the payload as well as in original entity data. Without that, we would end up with diffs
   * including all Date properties, as we would be comparing Date object with timestamp.
   */
  processDateProperty(value: unknown): string | number | Date;
  getIndexName(
    tableName: string,
    columns: string[],
    type: 'index' | 'unique' | 'foreign' | 'primary' | 'sequence',
  ): string;
  supportsDeferredUniqueConstraints(): boolean;
  /**
   * SQLite supports schemas via ATTACH DATABASE. Returns true when there are
   * attached databases configured.
   */
  supportsSchemas(): boolean;
  getDefaultSchemaName(): string | undefined;
  getFullTextWhereClause(): string;
  escape(value: any): string;
  convertVersionValue(
    value: Date | number,
    prop: EntityProperty,
  ):
    | number
    | {
        $in: (string | number)[];
      };
  getJsonArrayElementPropertySQL(alias: string, property: string, _type: string): string;
  quoteValue(value: any): string;
}
