You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							93 lines
						
					
					
						
							2.6 KiB
						
					
					
				
								package engine
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"testing"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// TestBasicParsing tests basic SQL parsing
							 | 
						|
								func TestBasicParsing(t *testing.T) {
							 | 
						|
									testCases := []string{
							 | 
						|
										"SELECT * FROM user_events",
							 | 
						|
										"SELECT id FROM user_events",
							 | 
						|
										"SELECT id FROM user_events WHERE id = 123",
							 | 
						|
										"SELECT id FROM user_events WHERE id > 123",
							 | 
						|
										"SELECT id FROM user_events WHERE status = 'active'",
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									for i, sql := range testCases {
							 | 
						|
										t.Run(fmt.Sprintf("Query_%d", i+1), func(t *testing.T) {
							 | 
						|
											t.Logf("Testing SQL: %s", sql)
							 | 
						|
								
							 | 
						|
											stmt, err := ParseSQL(sql)
							 | 
						|
											if err != nil {
							 | 
						|
												t.Errorf("Parse error: %v", err)
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											t.Logf("Parsed statement type: %T", stmt)
							 | 
						|
								
							 | 
						|
											if selectStmt, ok := stmt.(*SelectStatement); ok {
							 | 
						|
												t.Logf("SelectStatement details:")
							 | 
						|
												t.Logf("  SelectExprs count: %d", len(selectStmt.SelectExprs))
							 | 
						|
												t.Logf("  From count: %d", len(selectStmt.From))
							 | 
						|
												t.Logf("  WHERE clause exists: %v", selectStmt.Where != nil)
							 | 
						|
								
							 | 
						|
												if selectStmt.Where != nil {
							 | 
						|
													t.Logf("  WHERE expression type: %T", selectStmt.Where.Expr)
							 | 
						|
												} else {
							 | 
						|
													t.Logf("  WHERE clause is NIL - this is the bug!")
							 | 
						|
												}
							 | 
						|
											} else {
							 | 
						|
												t.Errorf("Expected SelectStatement, got %T", stmt)
							 | 
						|
											}
							 | 
						|
										})
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// TestCockroachParserDirectly tests the CockroachDB parser directly
							 | 
						|
								func TestCockroachParserDirectly(t *testing.T) {
							 | 
						|
									// Test if the issue is in our ParseSQL function or CockroachDB parser
							 | 
						|
									sql := "SELECT id FROM user_events WHERE id > 123"
							 | 
						|
								
							 | 
						|
									t.Logf("Testing CockroachDB parser directly with: %s", sql)
							 | 
						|
								
							 | 
						|
									// First test our ParseSQL function
							 | 
						|
									stmt, err := ParseSQL(sql)
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("Our ParseSQL failed: %v", err)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									t.Logf("Our ParseSQL returned: %T", stmt)
							 | 
						|
								
							 | 
						|
									if selectStmt, ok := stmt.(*SelectStatement); ok {
							 | 
						|
										if selectStmt.Where == nil {
							 | 
						|
											t.Errorf("Our ParseSQL is not extracting WHERE clauses!")
							 | 
						|
											t.Errorf("This means the issue is in our CockroachDB AST conversion")
							 | 
						|
										} else {
							 | 
						|
											t.Logf("Our ParseSQL extracted WHERE clause: %T", selectStmt.Where.Expr)
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// TestParseMethodComparison tests different parsing paths
							 | 
						|
								func TestParseMethodComparison(t *testing.T) {
							 | 
						|
									sql := "SELECT id FROM user_events WHERE id > 123"
							 | 
						|
								
							 | 
						|
									t.Logf("Comparing parsing methods for: %s", sql)
							 | 
						|
								
							 | 
						|
									// Test 1: Our global ParseSQL function
							 | 
						|
									stmt1, err1 := ParseSQL(sql)
							 | 
						|
									t.Logf("Global ParseSQL: %T, error: %v", stmt1, err1)
							 | 
						|
								
							 | 
						|
									if selectStmt, ok := stmt1.(*SelectStatement); ok {
							 | 
						|
										t.Logf("  WHERE clause: %v", selectStmt.Where != nil)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test 2: Check if we have different parsing paths
							 | 
						|
									// This will help identify if the issue is in our custom parser vs CockroachDB parser
							 | 
						|
								
							 | 
						|
									engine := NewTestSQLEngine()
							 | 
						|
									_, err2 := engine.ExecuteSQL(nil, sql)
							 | 
						|
									t.Logf("ExecuteSQL error (helps identify parsing path): %v", err2)
							 | 
						|
								}
							 |