CourseInsights / src / queryProcessor / QueryTree.ts
QueryTree.ts
Raw
export interface QUERY {
	WHERE: FILTER | {}; //{} is empty
	OPTIONS: OPTIONS;
	TRANSFORMATIONS?: TRANSFORMATIONS;
}

export type FILTER = LOGICCOMPARISON | MCOMPARISON | SCOMPARISON | NEGATION;
export type LOGICCOMPARISON = {
	[l in LOGIC]: FILTER[];
};
export type MCOMPARISON = {
	[c in MCOMPARATOR]: {
		[m in Mkey]: number;
	};
};
export interface SCOMPARISON {
	IS: {
		[s in Skey]: Inputstring; //[*]? inputstring [*]?
	};
}
export type NEGATION = {
	NOT: FILTER;
};

export interface OPTIONS {
	COLUMNS: AnyKey[];
	ORDER?: ORDER;
}
export type ORDER = AnyKey | SORT;
export interface SORT {
	dir: DIRECTION;
	keys: AnyKey[];
}
export type DIRECTION = "UP" | "DOWN";

export interface TRANSFORMATIONS {
	GROUP: Key[];
	APPLY: APPLYRULE[];
}
export type APPLYRULE = {
	[a in Applykey]: {
		[ap in APPLYTOKEN]: Key;
	};
};
export type APPLYTOKEN = "MAX" | "MIN" | "AVG" | "COUNT" | "SUM";

export type LOGIC = "AND" | "OR";
export type MCOMPARATOR = "LT" | "GT" | "EQ";

export type AnyKey = Key | Applykey;
export type Key = Mkey | Skey;
export type Mkey = `${Idstring}_${Mfield}`;
export type Skey = `${Idstring}_${Sfield}`;
export type Mfield = "avg" | "pass" | "fail" | "audit" | "year" | "lat" | "lon" | "seats";
export type Sfield =
	| "dept"
	| "id"
	| "instructor"
	| "title"
	| "uuid"
	| "fullname"
	| "shortname"
	| "number"
	| "name"
	| "address"
	| "type"
	| "furniture"
	| "href";
export type Idstring = string; //[^_]+  One or more of any character, except underscore.
export type Inputstring = string; //[^*]*  Zero or more of any character, except asterisk.
export type Applykey = string; //[^_]+  One or more of any character, except underscore.