use super::castNode;
use crate::error::Error;
use crate::nodes::*;
pub(crate) fn makeInteger(i: i32) -> Node {
Node::Integer(i)
}
pub(crate) fn makeFloat(numericStr: Option<Str>) -> Node {
Node::Float(numericStr.unwrap_or_default())
}
pub(crate) fn makeBoolean(val: bool) -> Node {
Node::Boolean(val)
}
pub(crate) fn makeString(str: Option<Str>) -> Node {
Node::String(str.unwrap_or_default())
}
pub(crate) fn makeBitString(str: Option<Str>) -> Node {
Node::BitString(str.unwrap_or_default())
}
pub(crate) fn makeA_Expr(
kind: A_Expr_Kind,
name: List,
lexpr: Option<Node>,
rexpr: Option<Node>,
location: i32,
) -> A_Expr {
A_Expr { kind, name, lexpr, rexpr, location, ..A_Expr::default() }
}
pub(crate) fn makeSimpleA_Expr(
kind: A_Expr_Kind,
name: &str,
lexpr: Option<Node>,
rexpr: Option<Node>,
location: i32,
) -> A_Expr {
let name = vec![Some(makeString(Some(name.into())))];
A_Expr { kind, name, lexpr, rexpr, location, ..A_Expr::default() }
}
pub(crate) fn makeBoolExpr(boolop: BoolExprType, args: List, location: i32) -> BoolExpr {
BoolExpr { boolop, args, location }
}
pub(crate) fn makeAlias(aliasname: Option<Str>, colnames: List) -> Alias {
Alias { aliasname, colnames }
}
pub(crate) fn makeRangeVar(
schemaname: Option<Str>,
relname: Option<Str>,
location: i32,
) -> RangeVar {
RangeVar {
catalogname: None,
schemaname,
relname,
inh: true,
relpersistence: RELPERSISTENCE_PERMANENT,
alias: None,
location,
}
}
pub(crate) fn makeTypeName(typnam: &str) -> TypeName {
makeTypeNameFromNameList(vec![Some(makeString(Some(typnam.into())))])
}
pub(crate) fn makeTypeNameFromNameList(names: List) -> TypeName {
TypeName { names, typmods: List::new(), typemod: -1, location: -1, ..TypeName::default() }
}
pub(crate) fn makeStringConst(str: Option<Str>, location: i32) -> Node {
A_Const { val: Some(makeString(str)), isnull: false, location }.into()
}
pub(crate) fn makeFuncCall(
name: List,
args: List,
funcformat: CoercionForm,
location: i32,
) -> FuncCall {
FuncCall { funcname: name, args, funcformat, location, ..FuncCall::default() }
}
pub(crate) fn makeGroupingSet(kind: GroupingSetKind, content: List, location: i32) -> GroupingSet {
GroupingSet { kind, content, location }
}
pub(crate) fn makeJsonFormat(
format_type: JsonFormatType,
encoding: JsonEncoding,
location: i32,
) -> JsonFormat {
JsonFormat { format_type, encoding, location }
}
pub(crate) fn makeJsonValueExpr(
raw_expr: Option<Node>,
formatted_expr: Option<Node>,
format: Option<Box<JsonFormat>>,
) -> JsonValueExpr {
JsonValueExpr { raw_expr, formatted_expr, format }
}
pub(crate) fn makeJsonBehavior(
btype: JsonBehaviorType,
expr: Option<Node>,
location: i32,
) -> JsonBehavior {
JsonBehavior { btype, expr, location, ..JsonBehavior::default() }
}
pub(crate) fn makeJsonKeyValue(key: Option<Node>, value: Option<Node>) -> Result<Node, Error> {
Ok(JsonKeyValue { key, value: castNode(value)? }.into())
}
pub(crate) fn makeJsonIsPredicate(
expr: Option<Node>,
format: JsonFormat,
item_type: JsonValueType,
unique_keys: bool,
exprBaseType: u32,
location: i32,
) -> Node {
let format = Some(Box::new(format));
JsonIsPredicate { expr, format, item_type, unique_keys, exprBaseType, location }.into()
}
pub(crate) fn makeJsonTablePathSpec(
string: Option<Str>,
name: Option<Str>,
string_location: i32,
name_location: i32,
) -> JsonTablePathSpec {
JsonTablePathSpec {
string: Some(makeStringConst(string, string_location)),
name,
name_location,
location: string_location,
}
}
pub(crate) fn makeDefElem(name: Option<Str>, arg: Option<Node>, location: i32) -> DefElem {
DefElem {
defnamespace: None,
defname: name,
arg,
defaction: DefElemAction::DEFELEM_UNSPEC,
location,
}
}
pub(crate) fn makeDefElemExtended(
nameSpace: Option<Str>,
name: Option<Str>,
arg: Option<Node>,
defaction: DefElemAction,
location: i32,
) -> DefElem {
DefElem { defnamespace: nameSpace, defname: name, arg, defaction, location }
}
pub(crate) fn makeVacuumRelation(
relation: Option<Box<RangeVar>>,
oid: u32,
va_cols: List,
) -> VacuumRelation {
VacuumRelation { relation, oid, va_cols }
}