import { BooleanType } from '..' import { AnyExpression, Expression } from '../../expressions' import { ConstraintConfig } from '../../functions' import { sql } from '../../template' import { Type, type } from '../index' import { TSQueryType } from '../search/tsquery' export const CHAR = (n?: number) => type`CHAR${n !== undefined ? sql`(${n})` : sql``}` as CharType export type CharArg = CharType['argument'] export interface CharType extends Type<'CHAR', R> { expression: StringExpression> argument: Expression | this['input'] | Expression | Expression required(conf?: ConstraintConfig): CharType } export const VARCHAR = (n?: number) => type`VARCHAR${n !== undefined ? sql`(${n})` : sql``}` as VarcharType export type VarcharArg = VarcharType['argument'] export interface VarcharType extends Type<'VARCHAR', R> { expression: StringExpression> argument: Expression | this['input'] | Expression | Expression required(conf?: ConstraintConfig): VarcharType } export const TEXT = () => type`TEXT` as TextType export type TextArg = TextType['argument'] export interface TextType extends Type<'TEXT', R> { expression: StringExpression> argument: Expression | this['input'] | Expression | Expression required(conf?: ConstraintConfig): TextType } export type CharacterTypes = CharType | VarcharType | TextType export type CharacterArg = CharacterTypes['argument'] export interface StringExpression extends AnyExpression { concat(arg: CharacterArg): Expression> match (arg: Expression): Expression> similarTo (pattern: CharacterArg, escape?: CharacterArg): Expression> notSimilarTo (pattern: CharacterArg, escape?: CharacterArg): Expression> matchRegex (pattern: CharacterArg, caseSensitively?: boolean): Expression> notMatchRegex (pattern: CharacterArg, caseSensitively?: boolean): Expression> isNormalized (form?: 'NFC' | 'NFD' | 'NFKC' | 'NFKD'): Expression> isNotNormalized (form?: 'NFC' | 'NFD' | 'NFKC' | 'NFKD'): Expression> like (pattern: CharacterArg, escape?: CharacterArg): Expression> notLike (pattern: CharacterArg, escape?: CharacterArg): Expression> }