Implement colu

This commit is contained in:
Jeff 2023-10-22 16:32:55 -04:00
parent d527b3c9c0
commit c6ef9ad57f
5 changed files with 3200 additions and 3086 deletions

View File

@ -47,6 +47,10 @@ pub enum Tool {
RandomBoolean, RandomBoolean,
RandomInteger, RandomInteger,
RandomFloat, RandomFloat,
// Random
Columns(Expression),
Rows(Expression),
} }
impl AbstractTree for Tool { impl AbstractTree for Tool {
@ -203,6 +207,18 @@ impl AbstractTree for Tool {
"random_boolean" => Tool::RandomBoolean, "random_boolean" => Tool::RandomBoolean,
"random_float" => Tool::RandomFloat, "random_float" => Tool::RandomFloat,
"random_integer" => Tool::RandomInteger, "random_integer" => Tool::RandomInteger,
"columns" => {
let expression_node = node.child(2).unwrap();
let expression = Expression::from_syntax_node(source, expression_node)?;
Tool::Columns(expression)
}
"rows" => {
let expression_node = node.child(2).unwrap();
let expression = Expression::from_syntax_node(source, expression_node)?;
Tool::Rows(expression)
}
_ => { _ => {
return Err(Error::UnexpectedSyntaxNode { return Err(Error::UnexpectedSyntaxNode {
expected: "built-in tool", expected: "built-in tool",
@ -486,6 +502,30 @@ impl AbstractTree for Tool {
Tool::RandomBoolean => Ok(Value::Boolean(random())), Tool::RandomBoolean => Ok(Value::Boolean(random())),
Tool::RandomFloat => Ok(Value::Float(random())), Tool::RandomFloat => Ok(Value::Float(random())),
Tool::RandomInteger => Ok(Value::Integer(random())), Tool::RandomInteger => Ok(Value::Integer(random())),
Tool::Columns(expression) => {
let column_names = expression
.run(source, context)?
.as_table()?
.headers()
.iter()
.cloned()
.map(|column_name| Value::String(column_name))
.collect();
Ok(Value::List(column_names))
}
Tool::Rows(expression) => {
let rows = expression
.run(source, context)?
.as_table()?
.rows()
.iter()
.cloned()
.map(|row| Value::List(row))
.collect();
Ok(Value::List(rows))
}
} }
} }
} }

View File

@ -293,6 +293,10 @@ module.exports = grammar({
'random_boolean', 'random_boolean',
'random_float', 'random_float',
'random_integer', 'random_integer',
// Tables
'rows',
'columns',
), ),
} }
}); });

View File

@ -1165,6 +1165,14 @@
{ {
"type": "STRING", "type": "STRING",
"value": "random_integer" "value": "random_integer"
},
{
"type": "STRING",
"value": "rows"
},
{
"type": "STRING",
"value": "columns"
} }
] ]
} }

View File

@ -729,6 +729,10 @@
"type": "bash", "type": "bash",
"named": false "named": false
}, },
{
"type": "columns",
"named": false
},
{ {
"type": "else", "type": "else",
"named": false "named": false
@ -849,6 +853,10 @@
"type": "remove", "type": "remove",
"named": false "named": false
}, },
{
"type": "rows",
"named": false
},
{ {
"type": "select", "type": "select",
"named": false "named": false

File diff suppressed because it is too large Load Diff