@@ -5,29 +5,87 @@ type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
55#[ tokio:: test]
66async fn test_sqlite_simple_query ( ) -> Result < ( ) , Error > {
77 let mut database = dbc:: Database :: new ( "sqlite://:memory:" ) ?;
8- let query = "SELECT 1" ;
9- let result = database. execute_query ( query) ?;
10- assert_eq ! ( result. rows. len( ) , 1 ) ;
118
12- Ok ( ( ) )
13- }
9+ // Create a test table with two rows
10+ let create_table_query = "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT NOT NULL)" ;
11+ database. execute_query ( create_table_query) ?;
12+ let insert_query = "INSERT INTO test_table (name) VALUES ('test1'), ('test2')" ;
13+ database. execute_query ( insert_query) ?;
1414
15- #[ tokio:: test]
16- async fn test_sqlite_query_with_params ( ) -> Result < ( ) , Error > {
17- let mut database = dbc:: Database :: new ( "sqlite://:memory:" ) ?;
18- let query = "SELECT ? + ?" ;
19- let result = database. execute_query_with_params ( query, & [ "1" , "2" ] ) ?;
15+ // Select all rows from test_table
16+ let select_query = "SELECT * FROM test_table" ;
17+ let result = database. execute_query ( select_query) ?;
18+ assert_eq ! ( result. rows. len( ) , 2 ) ;
19+
20+ // Verify the data returned by the query
21+ let first_row = & result. rows [ 0 ] ;
22+ let second_row = & result. rows [ 1 ] ;
23+ assert_eq ! (
24+ first_row. get_value_by_name( "name" ) ,
25+ Some ( & dbc:: Value :: Bytes ( "test1" . to_owned( ) . into_bytes( ) ) )
26+ ) ;
27+ assert_eq ! (
28+ second_row. get_value_by_name( "name" ) ,
29+ Some ( & dbc:: Value :: Bytes ( "test2" . to_owned( ) . into_bytes( ) ) )
30+ ) ;
31+
32+ // Update the name of the first row to "updated"
33+ let update_query = "UPDATE test_table SET name = ? WHERE id = ?" ;
34+ let result = database. execute_query_with_params ( update_query, & [ "updated" , "1" ] ) ?;
35+ assert_eq ! ( result. affected_rows, 1 ) ;
36+
37+ // Select the first row from test_table where the name is "updated"
38+ let select_query = "SELECT * FROM test_table WHERE name = ?" ;
39+ let result = database. execute_query_with_params ( select_query, & [ "updated" ] ) ?;
2040 assert_eq ! ( result. rows. len( ) , 1 ) ;
2141
42+ // Verify the data returned by the query
43+ let first_row = & result. rows [ 0 ] ;
44+ assert_eq ! (
45+ first_row. get_value_by_name( "name" ) ,
46+ Some ( & dbc:: Value :: Bytes ( "updated" . to_owned( ) . into_bytes( ) ) )
47+ ) ;
48+
2249 Ok ( ( ) )
2350}
2451
2552#[ tokio:: test]
2653async fn test_sqlite_query_with_params_and_serialize ( ) -> Result < ( ) , Error > {
2754 let mut database = dbc:: Database :: new ( "sqlite://:memory:" ) ?;
28- let query = "SELECT ? + ?" ;
29- let result = database. execute_query_with_params_and_serialize ( query, & [ "1" , "2" ] ) ?;
30- assert_eq ! ( result, r#"{"rows":[{"values":[{"Int":2}],"columns":[{"name":"1 + 1","column_type":"STRING"}]}]}"# ) ; // currently all columns are STRING
55+
56+ // Create a test table with two rows
57+ let create_table_query = "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT NOT NULL)" ;
58+ database. execute_query ( create_table_query) ?;
59+ let insert_query = "INSERT INTO test_table (name) VALUES ('test1'), ('test2')" ;
60+ database. execute_query ( insert_query) ?;
61+
62+ // Select all rows from test_table where the name is "test1"
63+ let select_query = "SELECT * FROM test_table WHERE name = ?" ;
64+ let result = database. execute_query_with_params_and_serialize ( select_query, & [ "test1" ] ) ?;
65+ assert_eq ! (
66+ result,
67+ r#"{"rows":[{"values":[{"Int":1},{"Bytes":[116,101,115,116,49]}],"columns":[{"name":"id","column_type":"STRING"},{"name":"name","column_type":"STRING"}]}],"affected_rows":1}"#
68+ ) ; // Note: The column type is STRING because the column type is not known in the current implementation
69+
70+ // Update the name of the first row to "updated"
71+ let update_query = "UPDATE test_table SET name = ? WHERE id = ?" ;
72+ database. execute_query_with_params_and_serialize ( update_query, & [ "updated" , "1" ] ) ?;
73+
74+ // Select the first row from test_table where the id is 1
75+ let select_query = "SELECT * FROM test_table WHERE id = ?" ;
76+ let result = database. execute_query_with_params_and_serialize ( select_query, & [ "1" ] ) ?;
77+ assert_eq ! (
78+ result,
79+ r#"{"rows":[{"values":[{"Int":1},{"Bytes":[117,112,100,97,116,101,100]}],"columns":[{"name":"id","column_type":"STRING"},{"name":"name","column_type":"STRING"}]}],"affected_rows":1}"#
80+ ) ;
81+
82+ // Deserialize the result and verify the data
83+ let result: dbc:: QueryResult = serde_json:: from_str ( & result) ?;
84+ let first_row = & result. rows [ 0 ] ;
85+ assert_eq ! (
86+ first_row. get_value_by_name( "name" ) ,
87+ Some ( & dbc:: Value :: Bytes ( "updated" . to_owned( ) . into_bytes( ) ) )
88+ ) ;
3189
3290 Ok ( ( ) )
33- }
91+ }
0 commit comments