import {
  type SimpleColumnMeta,
  type Type,
  type TransformContext,
  type MikroORM,
  type IsolationLevel,
} from '@mikro-orm/core';
import { MySqlSchemaHelper } from './MySqlSchemaHelper.js';
import { MySqlExceptionConverter } from './MySqlExceptionConverter.js';
import { AbstractSqlPlatform } from '../../AbstractSqlPlatform.js';
import type { IndexDef } from '../../typings.js';
import { MySqlNativeQueryBuilder } from './MySqlNativeQueryBuilder.js';
export declare class BaseMySqlPlatform extends AbstractSqlPlatform {
  #private;
  protected readonly schemaHelper: MySqlSchemaHelper;
  protected readonly exceptionConverter: MySqlExceptionConverter;
  protected readonly ORDER_BY_NULLS_TRANSLATE: {
    readonly 'asc nulls first': 'is not null';
    readonly 'asc nulls last': 'is null';
    readonly 'desc nulls first': 'is not null';
    readonly 'desc nulls last': 'is null';
  };
  /** @internal */
  createNativeQueryBuilder(): MySqlNativeQueryBuilder;
  getDefaultCharset(): string;
  init(orm: MikroORM): void;
  getBeginTransactionSQL(options?: { isolationLevel?: IsolationLevel; readOnly?: boolean }): string[];
  convertJsonToDatabaseValue(value: unknown, context?: TransformContext): unknown;
  getJsonIndexDefinition(index: IndexDef): string[];
  getBooleanTypeDeclarationSQL(): string;
  normalizeColumnType(
    type: string,
    options: {
      length?: number;
      precision?: number;
      scale?: number;
    },
  ): string;
  getDefaultMappedType(type: string): Type<unknown>;
  isNumericColumn(mappedType: Type<unknown>): boolean;
  supportsUnsigned(): boolean;
  /**
   * Returns the default name of index for the given columns
   * cannot go past 64 character length for identifiers in MySQL
   */
  getIndexName(
    tableName: string,
    columns: string[],
    type: 'index' | 'unique' | 'foreign' | 'primary' | 'sequence',
  ): string;
  getDefaultPrimaryName(tableName: string, columns: string[]): string;
  supportsCreatingFullTextIndex(): boolean;
  getFullTextWhereClause(): string;
  getFullTextIndexExpression(
    indexName: string,
    schemaName: string | undefined,
    tableName: string,
    columns: SimpleColumnMeta[],
  ): string;
  getOrderByExpression(column: string, direction: string, collation?: string): string[];
  getJsonArrayFromSQL(
    column: string,
    alias: string,
    properties: {
      name: string;
      type: string;
    }[],
  ): string;
  getJsonArrayExistsSQL(from: string, where: string): string;
  getDefaultClientUrl(): string;
}
