import { IRange, editor } from 'monaco-editor';
import { ArcGISFieldType, SqlExpressionLiteral } from './types';
import { ApiVariable } from '@arcgis/languages-api-utils';
import { SQLSourceLocation, SQLNode } from '@arcgis/core/core/sql/types';
export interface ValidationSyntaxContext {
    token: string;
    range: IRange;
    startDelimiter?: boolean;
    content?: ValidationSyntaxContext[];
}
export declare enum TokenType {
    SINGLE = "SINGLE",
    EMPTY_FIELD = "EMPTY_FIELD",
    ERROR = "ERROR",
    FIELD = "FIELD",
    KEYWORD_IN = "IN",
    KEYWORD_NOT_IN = "NOT IN",
    KEYWORD_BETWEEN = "BETWEEN",
    KEYWORD_NOT_BETWEEN = "NOT BETWEEN",
    LIST = "LIST",
    NEGATION = "NOT",
    NUMBER = "NUMBER",
    OPERATOR = "OPERATOR",
    PARENTHESES = "PARENTHESES",
    STRING = "STRING",
    UNKNOWN = "UNKNOWN"
}
export declare enum Token {
    CASE = "CASE",
    CASE_ELSE = "ELSE",
    CASE_THEN = "THEN",
    CASE_WHEN = "WHEN",
    COMMA = ",",
    DOUBLE_QUOTE = "\"",
    EMPTY = "",
    END = "END",
    INTERVAL = "INTERVAL",
    LEFT_PARENTHESES = "(",
    NEW_LINE = "\n",
    RIGHT_PARENTHESES = ")",
    SINGLE_QUOTE = "'",
    WHITE_SPACE = " "
}
export declare enum NodeReturnType {
    BOOLEAN = "BOOLEAN",
    DOUBLE = "DOUBLE",
    EXPRESSION_LIST = "EXPRESSION-LIST",
    FLOAT = "FLOAT",
    INTEGER = "INTEGER",
    NULL = "NULL",
    NUMBER = "NUMBER",
    REAL = "REAL",
    STRING = "STRING",
    SMALL_INT = "SMALLINT",
    UNKNOWN_FUNCTION = "UNKNOWN_FUNCTION"
}
export declare enum CallableExpressionResponse {
    FUNCTION = "FUNCTION",
    EXPRESSION_LIST = "EXPRESSION_LIST",
    SUCCESS = "SUCCESS",
    NON_CALLABLE = "NON_CALLABLE"
}
export declare const isValidIntervalValue: RegExp;
export declare const relationalTypes: ReturnType<typeof identifyNodeReturnType>[];
export declare const qualifiers: TokenType[];
export declare function convertArcgisTypeToSqlReturnType(arcgisType: ArcGISFieldType): SqlExpressionLiteral;
export declare const identifyNodeReturnType: (node: SQLNode, fields: ApiVariable[]) => SqlExpressionLiteral | "time-only" | "unknown_function";
/**
 * Helper function to identify if the given type is able to be used in arithmetic operations
 */
export declare const isArithmeticType: (type: SqlExpressionLiteral | "time-only" | "unknown_function") => boolean;
export declare const isNumericType: (type: SqlExpressionLiteral) => boolean;
/**
 * SQL allows arithmetic operations on intervals combined with dates or numbers.
 */
export declare const isValidIntervalArithmetic: (leftNode: SQLNode, rightNode: SQLNode, fields: ApiVariable[]) => boolean;
export declare const isValidNumericArithmetic: (leftNode: SQLNode, rightNode: SQLNode, fields: ApiVariable[]) => boolean;
export declare const formatListToString: (types: ReturnType<typeof identifyNodeReturnType>[], delimiter: string) => string;
export declare const formatType: (type: string) => string;
export declare const getValueFromNode: (node: SQLNode) => number | string;
export declare const addNewMarker: (message: string, range: IRange | SQLSourceLocation, markers: editor.IMarkerData[], isNodeFormat?: boolean) => void;
export declare const validateTypeMatch: (node: SQLNode, expectedType: NodeReturnType, markers: editor.IMarkerData[], fields: ApiVariable[]) => void;
