reifydb-engine 0.9.0

Query execution and processing engine for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2026 ReifyDB

use reifydb_test_harness::engine::TestEngine;
use reifydb_value::params;

#[test]
fn test_error_namespace_not_found() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	let mut builder = t.bulk_insert(identity);
	builder.table("nonexistent::mytable").row(params! { id: 1 }).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(msg.contains("namespace") || msg.contains("not found"), "Expected namespace error, got: {}", msg);
}

#[test]
fn test_error_table_not_found() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	t.admin("CREATE NAMESPACE test");

	let mut builder = t.bulk_insert(identity);
	builder.table("test::nonexistent").row(params! { id: 1 }).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(msg.contains("table") || msg.contains("not found"), "Expected table error, got: {}", msg);
}

#[test]
fn test_error_ringbuffer_not_found() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	t.admin("CREATE NAMESPACE test");

	let mut builder = t.bulk_insert(identity);
	builder.ringbuffer("test::nonexistent").row(params! { id: 1 }).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(
		msg.contains("ring") || msg.contains("buffer") || msg.contains("not found"),
		"Expected ringbuffer error, got: {}",
		msg
	);
}

#[test]
fn test_error_column_not_found() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	t.admin("CREATE NAMESPACE test");
	t.admin("CREATE TABLE test::users { id: int4, name: utf8 }");

	// An unknown column must fault; silently dropping it would lose the caller's data.
	let mut builder = t.bulk_insert(identity);
	builder.table("test::users").row(params! { id: 1, name: "Alice", unknown_column: "value" }).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(msg.contains("column") || msg.contains("not found"), "Expected column error, got: {}", msg);
}

#[test]
fn test_error_too_many_values() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	t.admin("CREATE NAMESPACE test");
	t.admin("CREATE TABLE test::small { a: int4, b: int4 }");

	// Five positional values against two columns must fault rather than be truncated.
	let mut builder = t.bulk_insert(identity);
	builder.table("test::small").row(params![1, 2, 3, 4, 5]).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(
		msg.contains("too many") || msg.contains("values") || msg.contains("column"),
		"Expected too many values error, got: {}",
		msg
	);
}

#[test]
fn test_error_coercion_failure() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	t.admin("CREATE NAMESPACE test");
	t.admin("CREATE TABLE test::typed { num: int4 }");

	let mut builder = t.bulk_insert(identity);
	builder.table("test::typed").row(params! { num: "not_a_number" }).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(
		msg.contains("type") || msg.contains("coerce") || msg.contains("convert") || msg.contains("cast"),
		"Expected coercion error, got: {}",
		msg
	);
}

#[test]
fn test_error_ringbuffer_namespace_not_found() {
	let t = TestEngine::new();
	let identity = TestEngine::identity();

	let mut builder = t.bulk_insert(identity);
	builder.ringbuffer("nonexistent::events").row(params! { id: 1 }).done();
	let result = builder.execute();

	assert!(result.is_err());
	let err = result.unwrap_err();
	let msg = format!("{}", err);
	assert!(msg.contains("namespace") || msg.contains("not found"), "Expected namespace error, got: {}", msg);
}