diff --git a/src/Client/ClientBase.cpp b/src/Client/ClientBase.cpp index 3dfe996adce..0f1d0c3ae22 100644 --- a/src/Client/ClientBase.cpp +++ b/src/Client/ClientBase.cpp @@ -1775,7 +1775,7 @@ void ClientBase::processInsertQuery(String query, ASTPtr parsed_query) /// Process the query that requires transferring data blocks to the server. const auto & parsed_insert_query = parsed_query->as(); - if ((!parsed_insert_query.data && !parsed_insert_query.infile) && (is_interactive || (!stdin_is_a_tty && !isStdinNotEmptyAndValid(*std_in)))) + if ((!parsed_insert_query.data && !parsed_insert_query.infile) && (true /* is_interactive || (!stdin_is_a_tty && !isStdinNotEmptyAndValid(*std_in)) */)) { const auto & settings = client_context->getSettingsRef(); if (settings[Setting::throw_if_no_data_to_insert]) diff --git a/tests/test_insert_error_handling.py b/tests/test_insert_error_handling.py new file mode 100644 index 00000000000..8bdb7deec12 --- /dev/null +++ b/tests/test_insert_error_handling.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +import unittest +import shutil +import os +from chdb import session + +test_dir = ".test_insert_error" + +class TestInsertErrorHandling(unittest.TestCase): + """Test cases for INSERT query error handling to ensure proper exceptions are thrown.""" + + def setUp(self) -> None: + shutil.rmtree(test_dir, ignore_errors=True) + self.sess = session.Session(test_dir) + return super().setUp() + + def tearDown(self) -> None: + """Clean up test environment.""" + shutil.rmtree(test_dir, ignore_errors=True) + return super().tearDown() + + def test_incomplete_insert_values_throws_error(self): + """Test that incomplete INSERT VALUES query throws RuntimeError instead of hanging.""" + + self.sess.query( + "CREATE TABLE test_table(id UInt32, name String, value Float64) ENGINE = Memory" + ) + + # This should throw an error because VALUES clause is incomplete (no actual values provided) + with self.assertRaises(RuntimeError) as context: + self.sess.query("INSERT INTO test_table (id, name, value) VALUES") + + +if __name__ == "__main__": + unittest.main()