import pytest from sqlmem.exceptions import ReadOnlyError, UnsupportedQueryError from sqlmem.parser import parse def test_simple_select(): result = parse("SELECT name, email FROM users WHERE status = 'active'") assert result.table == "users" # WHERE columns are also extracted — needed for in-memory SQLite filtering assert {"name", "email"}.issubset(set(result.columns)) assert "status" in result.columns def test_multiple_columns(): result = parse("SELECT a, b, c FROM orders") assert result.table == "orders" assert set(result.columns) == {"a", "b", "c"} def test_insert_raises_readonly(): with pytest.raises(ReadOnlyError): parse("INSERT INTO users (name) VALUES ('alice')") def test_update_raises_readonly(): with pytest.raises(ReadOnlyError): parse("UPDATE users SET name = 'bob' WHERE id = 1") def test_delete_raises_readonly(): with pytest.raises(ReadOnlyError): parse("DELETE FROM users WHERE id = 1") def test_wildcard_raises_unsupported(): with pytest.raises(UnsupportedQueryError): parse("SELECT * FROM users") def test_join_raises_unsupported(): with pytest.raises(UnsupportedQueryError): parse("SELECT a.name, b.title FROM users a JOIN orders b ON a.id = b.user_id")