| 3 | |
| 4 | #[tokio::test] |
| 5 | async fn test_catalog_basic_functionality() { |
| 6 | let _ = env_logger::builder().is_test(true).try_init(); |
| 7 | |
| 8 | let server = setup_test_server_with_init(|db| { |
| 9 | Box::pin(async move { |
| 10 | db.execute("CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT)").await?; |
| 11 | Ok(()) |
| 12 | }) |
| 13 | }).await; |
| 14 | |
| 15 | let client = &server.client; |
| 16 | |
| 17 | // Test 1: Simple 2-column query |
| 18 | println!("\n=== Test 1: Simple 2-column query ==="); |
| 19 | match client.query( |
| 20 | "SELECT relname, relkind FROM pg_catalog.pg_class WHERE relkind = 'r'", |
| 21 | &[] |
| 22 | ).await { |
| 23 | Ok(rows) => { |
| 24 | println!("✓ Query succeeded: {} rows", rows.len()); |
| 25 | assert!(!rows.is_empty(), "Should find at least 1 table"); |
| 26 | for row in &rows { |
| 27 | let relname: &str = row.get(0); |
| 28 | let relkind: &str = row.get(1); |
| 29 | println!(" Table: {relname}, Kind: {relkind}"); |
| 30 | assert_eq!(relkind, "r", "Should only return tables"); |
| 31 | } |
| 32 | } |
| 33 | Err(e) => { |
| 34 | eprintln!("✗ Query failed: {e:?}"); |
| 35 | panic!("Basic catalog query should work!"); |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | // Test 2: SELECT * query |
| 40 | println!("\n=== Test 2: SELECT * query ==="); |
| 41 | match client.query( |
| 42 | "SELECT * FROM pg_catalog.pg_class WHERE relkind = 'r' LIMIT 1", |
| 43 | &[] |
| 44 | ).await { |
| 45 | Ok(rows) => { |
| 46 | println!("✓ SELECT * succeeded: {} rows", rows.len()); |
| 47 | if !rows.is_empty() { |
| 48 | println!(" Row has {} columns", rows[0].len()); |
| 49 | assert_eq!(rows[0].len(), 33, "pg_class should have 33 columns"); |
| 50 | } |
| 51 | } |
| 52 | Err(e) => { |
| 53 | eprintln!("✗ SELECT * failed: {e:?}"); |
| 54 | panic!("SELECT * should work!"); |
| 55 | } |
| 56 | } |
| 57 | |
| 58 | server.abort(); |
| 59 | } |