TestParser_IntervalExpression_Simple tests basic INTERVAL expression parsing
(t *testing.T)
| 26 | |
| 27 | // TestParser_IntervalExpression_Simple tests basic INTERVAL expression parsing |
| 28 | func TestParser_IntervalExpression_Simple(t *testing.T) { |
| 29 | sql := "SELECT INTERVAL '1 day'" |
| 30 | |
| 31 | // Tokenize the SQL |
| 32 | tkz := tokenizer.GetTokenizer() |
| 33 | defer tokenizer.PutTokenizer(tkz) |
| 34 | |
| 35 | tokens, err := tkz.Tokenize([]byte(sql)) |
| 36 | if err != nil { |
| 37 | t.Fatalf("tokenizer error: %v", err) |
| 38 | } |
| 39 | |
| 40 | // Convert to parser tokens |
| 41 | |
| 42 | parser := NewParser() |
| 43 | defer parser.Release() |
| 44 | |
| 45 | tree, err := parser.ParseFromModelTokens(tokens) |
| 46 | if err != nil { |
| 47 | t.Fatalf("unexpected error: %v", err) |
| 48 | } |
| 49 | defer ast.ReleaseAST(tree) |
| 50 | |
| 51 | if len(tree.Statements) != 1 { |
| 52 | t.Fatalf("expected 1 statement, got %d", len(tree.Statements)) |
| 53 | } |
| 54 | |
| 55 | stmt, ok := tree.Statements[0].(*ast.SelectStatement) |
| 56 | if !ok { |
| 57 | t.Fatalf("expected SelectStatement, got %T", tree.Statements[0]) |
| 58 | } |
| 59 | |
| 60 | if len(stmt.Columns) != 1 { |
| 61 | t.Fatalf("expected 1 column, got %d", len(stmt.Columns)) |
| 62 | } |
| 63 | |
| 64 | intervalExpr, ok := stmt.Columns[0].(*ast.IntervalExpression) |
| 65 | if !ok { |
| 66 | t.Fatalf("expected IntervalExpression, got %T", stmt.Columns[0]) |
| 67 | } |
| 68 | |
| 69 | if intervalExpr.Value != "1 day" { |
| 70 | t.Errorf("expected interval value '1 day', got '%s'", intervalExpr.Value) |
| 71 | } |
| 72 | |
| 73 | if intervalExpr.TokenLiteral() != "INTERVAL" { |
| 74 | t.Errorf("expected TokenLiteral 'INTERVAL', got '%s'", intervalExpr.TokenLiteral()) |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | // TestParser_IntervalExpression_WithArithmetic tests INTERVAL in arithmetic expressions |
| 79 | func TestParser_IntervalExpression_WithArithmetic(t *testing.T) { |
nothing calls this directly
no test coverage detected