flowcode-core 0.4.3-alpha

Core execution engine for FlowCode data scripting language
Documentation
#[cfg(test)]
#[cfg(feature = "duckdb")]
mod tests {
    use flowcode_core::duckdb_session::DuckSession;
    use flowcode_core::types::TypedValue;
    use flowcode_core::ast::ArgValue;
    use flowcode_core::duckdb_verbs::map_verb_to_sql;
    use std::path::PathBuf;

    #[test]
    fn test_sql_direct_query() {
        let session = DuckSession::new().expect("Failed to create DuckSession");
        let query = TypedValue {
            kind: flowcode_core::types::ValueKind::String,
            value: ArgValue::String("SELECT 42 AS answer".to_string()),
        };
        let args = vec![query];

        let result = map_verb_to_sql("sql", &args, &session);
        assert!(result.is_ok());
        let sql_query = result.unwrap();
        assert_eq!(sql_query, "SELECT 42 AS answer");

        // Execute the query to ensure it works end-to-end
        let query_result = session.execute_sql(&sql_query);
        assert!(query_result.is_ok());
        let typed_value = query_result.unwrap();
        if let ArgValue::Table(data) = typed_value.value {
            assert_eq!(data.len(), 1);
            assert_eq!(data[0].len(), 1);
            if let ArgValue::Number(n) = &data[0][0].value {
                assert_eq!(n, &42.0);
            } else {
                panic!("Expected a number in the result");
            }
        } else {
            panic!("Expected a table result from SQL query");
        }
    }

    #[test]
    fn test_sql_empty_query() {
        let session = DuckSession::new().expect("Failed to create DuckSession");
        let args = vec![];

        let result = map_verb_to_sql("sql", &args, &session);
        assert!(result.is_err());
        if let Err(e) = result {
            assert!(e.to_string().contains("sql command requires a query string"));
        }
    }

    #[test]
    fn test_sql_invalid_argument_type() {
        let session = DuckSession::new().expect("Failed to create DuckSession");
        let invalid_arg = TypedValue {
            kind: flowcode_core::types::ValueKind::Number,
            value: ArgValue::Number(42.0),
        };
        let args = vec![invalid_arg];

        let result = map_verb_to_sql("sql", &args, &session);
        assert!(result.is_err());
        if let Err(e) = result {
            assert!(e.to_string().contains("sql command requires a string argument"));
        }
    }
}