react-querybuilder
Version:
React Query Builder component for constructing queries and filters, with utilities for executing them in various database and evaluation contexts
187 lines (186 loc) • 7.21 kB
TypeScript
import type { DefaultCombinatorNameExtended } from "../../types";
type AnyCase<T extends string> = string extends T ? string : T extends `${infer F1}${infer F2}${infer R}` ? `${Uppercase<F1> | Lowercase<F1>}${Uppercase<F2> | Lowercase<F2>}${AnyCase<R>}` : T extends `${infer F}${infer R}` ? `${Uppercase<F> | Lowercase<F>}${AnyCase<R>}` : "";
type TokenType = "AndExpression" | "BetweenPredicate" | "BitExpression" | "Boolean" | "BooleanExtra" | "CaseWhen" | "ComparisonBooleanPrimary" | "ComparisonSubQueryBooleanPrimary" | "ContainsExpr" | "EndsWithExpr" | "ExpressionList" | "ForceIndexHint" | "ForOptIndexHint" | "FunctionCall" | "FunctionCallParam" | "GroupBy" | "GroupByOrderByItem" | "Identifier" | "IdentifierExpr" | "IdentifierList" | "IgnoreIndexHint" | "IndexHintList" | "InExpressionListPredicate" | "InnerCrossJoinTable" | "InSubQueryPredicate" | "IsExpression" | "IsNullBooleanPrimary" | "LeftRightJoinTable" | "LikePredicate" | "Limit" | "Main" | "NaturalJoinTable" | "NotExpression" | "Null" | "Number" | "OnJoinCondition" | "OrderBy" | "OrExpression" | "Partitions" | "PlaceHolder" | "Prefix" | "RegexpPredicate" | "Select" | "SelectExpr" | "SelectParenthesized" | "SimpleExprParentheses" | "SoundsLikePredicate" | "StartsWithExpr" | "StraightJoinTable" | "String" | "SubQuery" | "TableFactor" | "TableReference" | "TableReferences" | "Union" | "UseIndexHint" | "UsingJoinCondition" | "WhenThenList" | "XorExpression";
export type ComparisonOperator = "=" | ">=" | ">" | "<=" | "<" | "<>" | "!=";
export type NotOpt = AnyCase<"NOT"> | null;
export type AndOperator = AnyCase<"AND">;
export type OrOperator = AnyCase<"OR">;
export type XorOperator = AnyCase<"XOR">;
export interface SQLWhereObject {
type: TokenType;
}
export interface SQLIdentifier extends SQLWhereObject {
type: "Identifier";
value: string;
}
export interface SQLWhereObjectAny extends SQLWhereObject {
[k: string]: any;
}
export interface SQLStringValue extends SQLWhereObject {
type: "String";
value: string;
}
export interface SQLNumberValue extends SQLWhereObject {
type: "Number";
value: string;
}
export interface SQLSignedNumberValue extends SQLWhereObject {
type: "Prefix";
prefix: "+" | "-";
value: SQLNumberValue;
}
export interface SQLBooleanValue extends SQLWhereObject {
type: "Boolean";
value: AnyCase<"TRUE"> | AnyCase<"FALSE">;
}
export interface SQLBooleanExtra extends SQLWhereObject {
type: "BooleanExtra";
value: AnyCase<"UNKNOWN">;
}
export interface SQLSimpleExprParentheses extends SQLWhereObject {
type: "SimpleExprParentheses";
value: SQLExpressionList;
}
export interface SQLExpressionList extends SQLWhereObject {
type: "ExpressionList";
value: SQLExpression[];
}
export interface SQLInExpressionListPredicate extends SQLWhereObject {
type: "InExpressionListPredicate";
hasNot: NotOpt;
left: SQLSimpleExpression;
right: SQLExpressionList;
}
export interface SQLBetweenPredicate extends SQLWhereObject {
type: "BetweenPredicate";
hasNot: NotOpt;
left: SQLSimpleExpression;
right: {
left: SQLSimpleExpression
right: SQLPredicate
};
}
export interface SQLLikePredicate extends SQLWhereObject {
type: "LikePredicate";
hasNot: NotOpt;
left: SQLSimpleExpression;
right: SQLSimpleExpression | SQLStartsWithExpr | SQLEndsWithExpr | SQLContainsExpr;
escape: SQLStringValue | null;
}
export interface SQLStartsWithExpr extends SQLWhereObject {
type: "StartsWithExpr";
value: SQLStringValue | SQLIdentifier;
}
export interface SQLEndsWithExpr extends SQLWhereObject {
type: "EndsWithExpr";
value: SQLStringValue | SQLIdentifier;
}
export interface SQLContainsExpr extends SQLWhereObject {
type: "ContainsExpr";
value: SQLStringValue | SQLIdentifier;
}
export interface SQLIsNullBooleanPrimary extends SQLWhereObject {
type: "IsNullBooleanPrimary";
hasNot: NotOpt;
value: SQLBooleanPrimary;
}
export interface SQLComparisonBooleanPrimary extends SQLWhereObject {
type: "ComparisonBooleanPrimary";
left: SQLBooleanPrimary;
operator: ComparisonOperator;
right: SQLPredicate;
}
export interface SQLIsExpression extends SQLWhereObject {
type: "IsExpression";
hasNot: NotOpt;
left: SQLBooleanPrimary;
right: SQLBooleanExtra;
}
export interface SQLNotExpression extends SQLWhereObject {
type: "NotExpression";
value: SQLExpression;
}
export interface SQLAndExpression extends SQLWhereObject {
type: "AndExpression";
operator: AndOperator;
left: SQLExpression;
right: SQLExpression;
}
export interface SQLOrExpression extends SQLWhereObject {
type: "OrExpression";
operator: OrOperator;
left: SQLExpression;
right: SQLExpression;
}
export interface SQLXorExpression extends SQLWhereObject {
type: "XorExpression";
operator: XorOperator;
left: SQLExpression;
right: SQLExpression;
}
export interface SQLFunctionCall extends SQLWhereObjectAny {
type: "FunctionCall";
}
export interface SQLCaseWhen extends SQLWhereObjectAny {
type: "CaseWhen";
}
export interface SQLPrefix extends SQLWhereObjectAny {
type: "Prefix";
}
export interface SQLSubQuery extends SQLWhereObjectAny {
type: "SubQuery";
}
export interface SQLIdentifierExpr extends SQLWhereObjectAny {
type: "IdentifierExpr";
}
export interface SQLBitExpression extends SQLWhereObjectAny {
type: "BitExpression";
}
export interface SQLInSubQueryPredicate extends SQLWhereObjectAny {
type: "InSubQueryPredicate";
}
export interface SQLSoundsLikePredicate extends SQLWhereObjectAny {
type: "SoundsLikePredicate";
}
export interface SQLRegexpPredicate extends SQLWhereObjectAny {
type: "RegexpPredicate";
}
export interface SQLComparisonSubQueryBooleanPrimary extends SQLWhereObjectAny {
type: "ComparisonSubQueryBooleanPrimary";
}
export type SQLLiteralValue = SQLStringValue | SQLNumberValue | SQLBooleanValue;
export type SQLSimpleExpression = SQLLiteralValue | SQLIdentifier | SQLFunctionCall | SQLCaseWhen | SQLPrefix | SQLSubQuery | SQLIdentifierExpr | SQLBitExpression | SQLSimpleExprParentheses;
export type SQLPredicate = SQLSimpleExpression | SQLInExpressionListPredicate | SQLBetweenPredicate | SQLLikePredicate | SQLInSubQueryPredicate | SQLSoundsLikePredicate | SQLRegexpPredicate;
export type SQLBooleanPrimary = SQLPredicate | SQLIsNullBooleanPrimary | SQLComparisonBooleanPrimary | SQLComparisonSubQueryBooleanPrimary;
export type SQLExpression = SQLBooleanPrimary | SQLIsExpression | SQLNotExpression | SQLAndExpression | SQLOrExpression | SQLXorExpression;
export interface ParsedSQL {
nodeType: "Main";
value: {
type: "Select"
distinctOpt: string | null
highPriorityOpt: unknown
maxStateMentTimeOpt: unknown
straightJoinOpt: unknown
sqlSmallResultOpt: unknown
sqlBigResultOpt: unknown
sqlBufferResultOpt: unknown
sqlCacheOpt: unknown
sqlCalcFoundRowsOpt: unknown
selectItems: SQLWhereObjectAny
from: SQLWhereObjectAny
partition: unknown
where: SQLExpression
groupBy: SQLWhereObjectAny | null
having: SQLWhereObjectAny | null
orderBy: SQLWhereObjectAny | null
limit: SQLWhereObjectAny | null
procedure: SQLWhereObjectAny | null
updateLockMode: unknown
};
hasSemicolon: boolean;
}
export type MixedAndXorOrList = {
combinator: DefaultCombinatorNameExtended
expressions: (MixedAndXorOrList | SQLExpression)[]
};
export {};