Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions storage/search/lucene/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,10 @@ func (p *Parser) ParseToMap(query string) (map[string]any, error) {
return p.exprToMap(e), nil
}

// ParseToSQL parses a Lucene query and converts it to PostgreSQL SQL with parameters.
// Creates a PostgreSQL driver on-demand for rendering.
func (p *Parser) ParseToSQL(query string) (string, []any, error) {
// ParseToSQL parses a Lucene query and converts it to SQL with parameters for the specified provider.
// Creates a SQL driver on-demand for rendering with provider-specific syntax.
// Provider should be one of: "postgresql", "mysql", "sqlite"
func (p *Parser) ParseToSQL(query string, provider string) (string, []any, error) {
slog.Debug(fmt.Sprintf(`Parsing query to SQL: %s`, query))

if err := p.validateQuery(query); err != nil {
Expand All @@ -234,8 +235,8 @@ func (p *Parser) ParseToSQL(query string) (string, []any, error) {
return "", nil, err
}

// Create PostgreSQL driver on-demand and render
driver := NewPostgresDriver(p.Fields)
// Create SQL driver on-demand for the specified provider and render
driver := NewSQLDriver(p.Fields, provider)
sql, params, err := driver.RenderParam(e)
if err != nil {
return "", nil, err
Expand Down
32 changes: 16 additions & 16 deletions storage/search/lucene/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func TestBasicFieldSearch(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, vals, err := parser.ParseToSQL(tt.query)
sql, vals, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -148,7 +148,7 @@ func TestBooleanOperators(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -192,7 +192,7 @@ func TestRequiredProhibited(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -246,7 +246,7 @@ func TestRangeQueries(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -285,7 +285,7 @@ func TestQuotedPhrases(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -324,7 +324,7 @@ func TestEscapedCharacters(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -374,7 +374,7 @@ func TestComplexQueries(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if (err != nil) != tt.shouldErr {
t.Fatalf("ParseToSQL() error = %v, shouldErr = %v", err, tt.shouldErr)
}
Expand Down Expand Up @@ -418,7 +418,7 @@ func TestImplicitSearch(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, params, err := parser.ParseToSQL(tt.query)
sql, params, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -458,7 +458,7 @@ func TestJSONBFields(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -560,7 +560,7 @@ func TestFieldValidation(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, _, err := parser.ParseToSQL(tt.query)
_, _, err := parser.ParseToSQL(tt.query, "postgresql")
if (err != nil) != tt.wantErr {
t.Errorf("ParseToSQL() error = %v, wantErr = %v", err, tt.wantErr)
}
Expand Down Expand Up @@ -623,7 +623,7 @@ func TestNullValueQueries(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if (err != nil) != tt.wantErr {
t.Errorf("ParseToSQL() error = %v, wantErr = %v", err, tt.wantErr)
}
Expand All @@ -641,7 +641,7 @@ func TestEmptyAsLiteralValue(t *testing.T) {
t.Fatalf("NewParser() error = %v", err)
}

sql, params, err := parser.ParseToSQL("status:empty")
sql, params, err := parser.ParseToSQL("status:empty", "postgresql")
if err != nil {
t.Fatalf("ParseToSQL() error = %v", err)
}
Expand Down Expand Up @@ -691,7 +691,7 @@ func TestFuzzySearch(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if (err != nil) != tt.wantErr {
t.Errorf("ParseToSQL() error = %v, wantErr = %v", err, tt.wantErr)
}
Expand Down Expand Up @@ -740,7 +740,7 @@ func TestEscaping(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sql, _, err := parser.ParseToSQL(tt.query)
sql, _, err := parser.ParseToSQL(tt.query, "postgresql")
if (err != nil) != tt.wantErr {
t.Errorf("ParseToSQL() error = %v, wantErr = %v", err, tt.wantErr)
}
Expand Down Expand Up @@ -777,7 +777,7 @@ func TestBoostOperatorError(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, _, err := parser.ParseToSQL(tt.query)
_, _, err := parser.ParseToSQL(tt.query, "postgresql")
if err == nil {
t.Errorf("ParseToSQL(%q) expected error but got none", tt.query)
return
Expand All @@ -796,6 +796,6 @@ func BenchmarkParser(b *testing.B) {

b.ResetTimer()
for i := 0; i < b.N; i++ {
_, _, _ = parser.ParseToSQL(query)
_, _, _ = parser.ParseToSQL(query, "postgresql")
}
}
Loading