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.
		
		
		
		
		
			
		
			
				
					
					
						
							102 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							102 lines
						
					
					
						
							2.7 KiB
						
					
					
				
								package engine
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"context"
							 | 
						|
									"testing"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// TestCockroachDBParserSuccess demonstrates the successful integration of CockroachDB's parser
							 | 
						|
								// This test validates that all previously problematic SQL expressions now work correctly
							 | 
						|
								func TestCockroachDBParserSuccess(t *testing.T) {
							 | 
						|
									engine := NewTestSQLEngine()
							 | 
						|
								
							 | 
						|
									testCases := []struct {
							 | 
						|
										name     string
							 | 
						|
										sql      string
							 | 
						|
										expected string
							 | 
						|
										desc     string
							 | 
						|
									}{
							 | 
						|
										{
							 | 
						|
											name:     "Basic_Function",
							 | 
						|
											sql:      "SELECT LENGTH('hello') FROM user_events LIMIT 1",
							 | 
						|
											expected: "5",
							 | 
						|
											desc:     "Simple function call",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "Function_Arithmetic",
							 | 
						|
											sql:      "SELECT LENGTH('hello') + 10 FROM user_events LIMIT 1",
							 | 
						|
											expected: "15",
							 | 
						|
											desc:     "Function with arithmetic operation (original user issue)",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "User_Original_Query",
							 | 
						|
											sql:      "SELECT length(trim('  hello world  ')) + 12 FROM user_events LIMIT 1",
							 | 
						|
											expected: "23",
							 | 
						|
											desc:     "User's exact original failing query - now fixed!",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "String_Concatenation",
							 | 
						|
											sql:      "SELECT 'hello' || 'world' FROM user_events LIMIT 1",
							 | 
						|
											expected: "helloworld",
							 | 
						|
											desc:     "Basic string concatenation",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "Function_With_Concat",
							 | 
						|
											sql:      "SELECT LENGTH('hello' || 'world') FROM user_events LIMIT 1",
							 | 
						|
											expected: "10",
							 | 
						|
											desc:     "Function with string concatenation argument",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "Multiple_Arithmetic",
							 | 
						|
											sql:      "SELECT LENGTH('test') * 3 FROM user_events LIMIT 1",
							 | 
						|
											expected: "12",
							 | 
						|
											desc:     "Function with multiplication",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "Nested_Functions",
							 | 
						|
											sql:      "SELECT LENGTH(UPPER('hello')) FROM user_events LIMIT 1",
							 | 
						|
											expected: "5",
							 | 
						|
											desc:     "Nested function calls",
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name:     "Column_Alias",
							 | 
						|
											sql:      "SELECT LENGTH('test') AS test_length FROM user_events LIMIT 1",
							 | 
						|
											expected: "4",
							 | 
						|
											desc:     "Column alias functionality (AS keyword)",
							 | 
						|
										},
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									successCount := 0
							 | 
						|
								
							 | 
						|
									for _, tc := range testCases {
							 | 
						|
										t.Run(tc.name, func(t *testing.T) {
							 | 
						|
											result, err := engine.ExecuteSQL(context.Background(), tc.sql)
							 | 
						|
								
							 | 
						|
											if err != nil {
							 | 
						|
												t.Errorf("❌ %s - Query failed: %v", tc.desc, err)
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											if result.Error != nil {
							 | 
						|
												t.Errorf("❌ %s - Query result error: %v", tc.desc, result.Error)
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											if len(result.Rows) == 0 {
							 | 
						|
												t.Errorf("❌ %s - Expected at least one row", tc.desc)
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											actual := result.Rows[0][0].ToString()
							 | 
						|
								
							 | 
						|
											if actual == tc.expected {
							 | 
						|
												t.Logf("SUCCESS: %s → %s", tc.desc, actual)
							 | 
						|
												successCount++
							 | 
						|
											} else {
							 | 
						|
												t.Errorf("FAIL %s - Expected '%s', got '%s'", tc.desc, tc.expected, actual)
							 | 
						|
											}
							 | 
						|
										})
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									t.Logf("CockroachDB Parser Integration: %d/%d tests passed!", successCount, len(testCases))
							 | 
						|
								}
							 |