import { CharacterArg, DoubleArg, TextType } from '..' import { AnyExpression, Expression } from '../../expressions' import { ConstraintConfig } from '../../functions' import { sql } from '../../template' import { Type, type } from '../index' import { DateType } from './date' import { TimeTypes } from './time' import { TimestampTypes } from './timestamp' export function INTERVAL (fields?: string, precission?: number) { return type`INTERVAL${sql.join([fields, precission].filter(Boolean), ', ', '()')}` as IntervalType } export interface PostgresInterval { years?: number days?: number hours?: number seconds?: number toPostgres(): string toISOString(): string } export type IntervalArg = IntervalType['argument'] export interface IntervalType extends Type<'INTERVAL', R> { expression: IntervalExpression argument: Expression | this['input'] required(conf?: ConstraintConfig): IntervalType } export interface IntervalExpression extends AnyExpression> { concat(arg: CharacterArg): Expression> add(arg: IntervalArg): Expression> add(arg: Expression): Expression> add(arg: Expression): Expression add(arg: Expression): Expression negate(): Expression> sub(arg: IntervalArg): Expression> mul(arg: DoubleArg): Expression> div(arg: DoubleArg): Expression> }