Implement colu
This commit is contained in:
parent
d527b3c9c0
commit
c6ef9ad57f
@ -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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -293,6 +293,10 @@ module.exports = grammar({
|
|||||||
'random_boolean',
|
'random_boolean',
|
||||||
'random_float',
|
'random_float',
|
||||||
'random_integer',
|
'random_integer',
|
||||||
|
|
||||||
|
// Tables
|
||||||
|
'rows',
|
||||||
|
'columns',
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -1165,6 +1165,14 @@
|
|||||||
{
|
{
|
||||||
"type": "STRING",
|
"type": "STRING",
|
||||||
"value": "random_integer"
|
"value": "random_integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "rows"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "columns"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -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
Loading…
Reference in New Issue
Block a user