@@ -783,9 +783,7 @@ TEST(CatalogTests, Stats) {
783783TEST (ParserAdvanced, JoinAndComplexSelect) {
784784 /* 1. Left Join and multiple joins */
785785 {
786- auto lexer = std::make_unique<Lexer>(
787- " SELECT a.id, b.val FROM t1 LEFT JOIN t2 ON a.id = b.id JOIN t3 ON b.x = t3.x WHERE "
788- " a.id > 10" );
786+ auto lexer = std::make_unique<Lexer>(" SELECT a.id, b.val FROM t1 LEFT JOIN t2 ON a.id = b.id JOIN t3 ON b.x = t3.x WHERE a.id > 10" );
789787 Parser parser (std::move (lexer));
790788 auto stmt = parser.parse_statement ();
791789 ASSERT_NE (stmt, nullptr );
@@ -798,9 +796,7 @@ TEST(ParserAdvanced, JoinAndComplexSelect) {
798796
799797 /* 2. Group By and Having */
800798 {
801- auto lexer = std::make_unique<Lexer>(
802- " SELECT cat, SUM(val) FROM items GROUP BY cat HAVING SUM(val) > 1000 ORDER BY cat "
803- " DESC" );
799+ auto lexer = std::make_unique<Lexer>(" SELECT cat, SUM(val) FROM items GROUP BY cat HAVING SUM(val) > 1000 ORDER BY cat DESC" );
804800 Parser parser (std::move (lexer));
805801 auto stmt = parser.parse_statement ();
806802 ASSERT_NE (stmt, nullptr );
@@ -818,13 +814,13 @@ TEST(ParserAdvanced, JoinAndComplexSelect) {
818814 auto s1 = parser.parse_statement ();
819815 ASSERT_NE (s1, nullptr );
820816 EXPECT_EQ (s1->type (), StmtType::TransactionBegin);
821-
817+
822818 auto lexer2 = std::make_unique<Lexer>(" COMMIT" );
823819 Parser parser2 (std::move (lexer2));
824820 auto s2 = parser2.parse_statement ();
825821 ASSERT_NE (s2, nullptr );
826822 EXPECT_EQ (s2->type (), StmtType::TransactionCommit);
827-
823+
828824 auto lexer3 = std::make_unique<Lexer>(" ROLLBACK" );
829825 Parser parser3 (std::move (lexer3));
830826 auto s3 = parser3.parse_statement ();
@@ -836,19 +832,19 @@ TEST(ParserAdvanced, JoinAndComplexSelect) {
836832TEST (ParserAdvanced, ParserErrorPaths) {
837833 /* Invalid CREATE syntax */
838834 {
839- auto lexer = std::make_unique<Lexer>(" CREATE TABLE (id INT)" ); // Missing table name
835+ auto lexer = std::make_unique<Lexer>(" CREATE TABLE (id INT)" ); // Missing table name
840836 Parser parser (std::move (lexer));
841837 EXPECT_EQ (parser.parse_statement (), nullptr );
842838 }
843839 /* Invalid JOIN syntax */
844840 {
845- auto lexer = std::make_unique<Lexer>(" SELECT * FROM t1 LEFT t2" ); // Missing JOIN keyword
841+ auto lexer = std::make_unique<Lexer>(" SELECT * FROM t1 LEFT t2" ); // Missing JOIN keyword
846842 Parser parser (std::move (lexer));
847843 EXPECT_EQ (parser.parse_statement (), nullptr );
848844 }
849845 /* Invalid GROUP BY syntax */
850846 {
851- auto lexer = std::make_unique<Lexer>(" SELECT * FROM t1 GROUP cat" ); // Missing BY keyword
847+ auto lexer = std::make_unique<Lexer>(" SELECT * FROM t1 GROUP cat" ); // Missing BY keyword
852848 Parser parser (std::move (lexer));
853849 EXPECT_EQ (parser.parse_statement (), nullptr );
854850 }
@@ -859,50 +855,37 @@ TEST(ParserAdvanced, ParserErrorPaths) {
859855TEST (ExecutionTests, AggregationHaving) {
860856 static_cast <void >(std::remove (" ./test_data/having_test.heap" ));
861857 StorageManager disk_manager (" ./test_data" );
862- BufferPoolManager sm (128 , disk_manager);
858+ BufferPoolManager sm (config::Config::DEFAULT_BUFFER_POOL_SIZE , disk_manager);
863859 auto catalog = Catalog::create ();
864860 LockManager lm;
865- TransactionManager tm (lm, *catalog, sm, nullptr );
861+ TransactionManager tm (lm, *catalog, sm, sm. get_log_manager () );
866862 QueryExecutor exec (*catalog, sm, lm, tm);
867863
868- static_cast <void >(
869- exec.execute (*Parser (std::make_unique<Lexer>(" CREATE TABLE having_test (grp INT, val INT)" ))
870- .parse_statement ()));
871- static_cast <void >(exec.execute (
872- *Parser (std::make_unique<Lexer>(" INSERT INTO having_test VALUES (1, 10), (1, 20), (2, 5)" ))
873- .parse_statement ()));
864+ static_cast <void >(exec.execute (*Parser (std::make_unique<Lexer>(" CREATE TABLE having_test (grp INT, val INT)" )).parse_statement ()));
865+ static_cast <void >(exec.execute (*Parser (std::make_unique<Lexer>(" INSERT INTO having_test VALUES (1, 10), (1, 20), (2, 5)" )).parse_statement ()));
874866
875867 // SELECT grp, SUM(val) FROM having_test GROUP BY grp HAVING SUM(val) > 10
876- auto res = exec.execute (
877- *Parser (std::make_unique<Lexer>(
878- " SELECT grp, SUM(val) FROM having_test GROUP BY grp HAVING SUM(val) > 10" ))
879- .parse_statement ());
880-
868+ auto res = exec.execute (*Parser (std::make_unique<Lexer>(" SELECT grp, SUM(val) FROM having_test GROUP BY grp HAVING SUM(val) > 10" )).parse_statement ());
869+
881870 EXPECT_TRUE (res.success ());
882- ASSERT_EQ (res.row_count (), 1U ); // Only group 1 should pass (sum=30)
871+ ASSERT_EQ (res.row_count (), 1U ); // Only group 1 should pass (sum=30)
883872 EXPECT_STREQ (res.rows ()[0 ].get (0 ).to_string ().c_str (), " 1" );
884873 static_cast <void >(std::remove (" ./test_data/having_test.heap" ));
885874}
886875
887876TEST (OperatorTests, AggregateTypes) {
888877 static_cast <void >(std::remove (" ./test_data/agg_types.heap" ));
889878 StorageManager disk_manager (" ./test_data" );
890- BufferPoolManager sm (128 , disk_manager);
879+ BufferPoolManager sm (config::Config::DEFAULT_BUFFER_POOL_SIZE , disk_manager);
891880 auto catalog = Catalog::create ();
892881 LockManager lm;
893- TransactionManager tm (lm, *catalog, sm, nullptr );
882+ TransactionManager tm (lm, *catalog, sm, sm. get_log_manager () );
894883 QueryExecutor exec (*catalog, sm, lm, tm);
895884
896- static_cast <void >(exec.execute (
897- *Parser (std::make_unique<Lexer>(" CREATE TABLE agg_types (val DOUBLE)" )).parse_statement ()));
898- static_cast <void >(exec.execute (
899- *Parser (std::make_unique<Lexer>(" INSERT INTO agg_types VALUES (10.0), (20.0), (30.0)" ))
900- .parse_statement ()));
885+ static_cast <void >(exec.execute (*Parser (std::make_unique<Lexer>(" CREATE TABLE agg_types (val DOUBLE)" )).parse_statement ()));
886+ static_cast <void >(exec.execute (*Parser (std::make_unique<Lexer>(" INSERT INTO agg_types VALUES (10.0), (20.0), (30.0)" )).parse_statement ()));
901887
902- auto res = exec.execute (
903- *Parser (std::make_unique<Lexer>(
904- " SELECT MIN(val), MAX(val), AVG(val), SUM(val), COUNT(val) FROM agg_types" ))
905- .parse_statement ());
888+ auto res = exec.execute (*Parser (std::make_unique<Lexer>(" SELECT MIN(val), MAX(val), AVG(val), SUM(val), COUNT(val) FROM agg_types" )).parse_statement ());
906889 EXPECT_TRUE (res.success ());
907890 ASSERT_EQ (res.row_count (), 1U );
908891 EXPECT_DOUBLE_EQ (res.rows ()[0 ].get (0 ).to_float64 (), 10.0 );
@@ -916,21 +899,16 @@ TEST(OperatorTests, AggregateTypes) {
916899TEST (OperatorTests, LimitOffset) {
917900 static_cast <void >(std::remove (" ./test_data/lim_off.heap" ));
918901 StorageManager disk_manager (" ./test_data" );
919- BufferPoolManager sm (128 , disk_manager);
902+ BufferPoolManager sm (config::Config::DEFAULT_BUFFER_POOL_SIZE , disk_manager);
920903 auto catalog = Catalog::create ();
921904 LockManager lm;
922- TransactionManager tm (lm, *catalog, sm, nullptr );
905+ TransactionManager tm (lm, *catalog, sm, sm. get_log_manager () );
923906 QueryExecutor exec (*catalog, sm, lm, tm);
924907
925- static_cast <void >(exec.execute (
926- *Parser (std::make_unique<Lexer>(" CREATE TABLE lim_off (val INT)" )).parse_statement ()));
927- static_cast <void >(exec.execute (
928- *Parser (std::make_unique<Lexer>(" INSERT INTO lim_off VALUES (1), (2), (3), (4), (5)" ))
929- .parse_statement ()));
908+ static_cast <void >(exec.execute (*Parser (std::make_unique<Lexer>(" CREATE TABLE lim_off (val INT)" )).parse_statement ()));
909+ static_cast <void >(exec.execute (*Parser (std::make_unique<Lexer>(" INSERT INTO lim_off VALUES (1), (2), (3), (4), (5)" )).parse_statement ()));
930910
931- auto res = exec.execute (
932- *Parser (std::make_unique<Lexer>(" SELECT val FROM lim_off ORDER BY val LIMIT 2 OFFSET 2" ))
933- .parse_statement ());
911+ auto res = exec.execute (*Parser (std::make_unique<Lexer>(" SELECT val FROM lim_off ORDER BY val LIMIT 2 OFFSET 2" )).parse_statement ());
934912 EXPECT_TRUE (res.success ());
935913 ASSERT_EQ (res.row_count (), 2U );
936914 EXPECT_EQ (res.rows ()[0 ].get (0 ).to_int64 (), 3 );
@@ -939,17 +917,18 @@ TEST(OperatorTests, LimitOffset) {
939917}
940918
941919TEST (OperatorTests, SeqScanVisibility) {
920+ static_cast <void >(std::remove (" ./test_data/vis_test.heap" ));
942921 StorageManager storage (" ./test_data" );
943- BufferPoolManager sm (128 , storage);
922+ BufferPoolManager sm (config::Config::DEFAULT_BUFFER_POOL_SIZE , storage);
944923 auto catalog = Catalog::create ();
945924 LockManager lm;
946- TransactionManager tm (lm, *catalog, sm, nullptr );
925+ TransactionManager tm (lm, *catalog, sm, sm. get_log_manager () );
947926 Schema schema;
948927 schema.add_column (" v" , ValueType::TYPE_INT64);
949-
928+
950929 HeapTable table (" vis_test" , sm, schema);
951930 table.create ();
952-
931+
953932 // Use a transaction to insert, ensuring xmin > 0
954933 auto * txn_setup = tm.begin ();
955934 table.insert (Tuple ({Value::make_int64 (1 )}), txn_setup->get_id ());
@@ -959,25 +938,31 @@ TEST(OperatorTests, SeqScanVisibility) {
959938 SeqScanOperator scan (std::make_unique<HeapTable>(" vis_test" , sm, schema), txn, nullptr );
960939 scan.init ();
961940 scan.open ();
962-
941+
963942 Tuple t;
964943 int count = 0 ;
965944 while (scan.next (t)) {
966945 count++;
967946 }
968- EXPECT_GE (count, 1 );
969-
947+ ASSERT_EQ (count, 1 );
948+
970949 static_cast <void >(std::remove (" ./test_data/vis_test.heap" ));
971950}
972951
973952TEST (ParserTests, CreateIndexAndAlter) {
974953 {
975954 auto lexer = std::make_unique<Lexer>(" CREATE INDEX idx_name ON users (col1)" );
976955 Parser parser (std::move (lexer));
956+ auto stmt = parser.parse_statement ();
957+ ASSERT_NE (stmt, nullptr );
958+ EXPECT_EQ (stmt->type (), StmtType::CreateIndex);
959+ const auto * const create_idx = dynamic_cast <const CreateIndexStatement*>(stmt.get ());
960+ ASSERT_NE (create_idx, nullptr );
961+ EXPECT_STREQ (create_idx->index_name ().c_str (), " idx_name" );
962+ EXPECT_STREQ (create_idx->table_name ().c_str (), " users" );
977963 }
978964 {
979- auto lexer =
980- std::make_unique<Lexer>(" SELECT * FROM t WHERE col IS NOT NULL AND id IN (1, 2, 3)" );
965+ auto lexer = std::make_unique<Lexer>(" SELECT * FROM t WHERE col IS NOT NULL AND id IN (1, 2, 3)" );
981966 Parser parser (std::move (lexer));
982967 auto stmt = parser.parse_statement ();
983968 ASSERT_NE (stmt, nullptr );
0 commit comments