diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2026-04-12 17:59:16 +0200 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2026-04-12 17:59:16 +0200 |
| commit | 9b5b72a549643a9e611f55ae8154fa801c808e5b (patch) | |
| tree | 79c8108ce46e033182c5714a9c1c0a93a80043d0 /internal/plan.go | |
| parent | 5e30087db4a06c24c103737d4cb7dcdf06da5b24 (diff) | |
| download | go-oblast-9b5b72a549643a9e611f55ae8154fa801c808e5b.tar.gz | |
add Store.SelectWhere, Store.SelectOneWhere
Diffstat (limited to 'internal/plan.go')
| -rw-r--r-- | internal/plan.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/internal/plan.go b/internal/plan.go index ac199bf..7dc3361 100644 --- a/internal/plan.go +++ b/internal/plan.go @@ -23,6 +23,7 @@ type Plan struct { IndexByColumnName map[string][]int // Planned queries. + Select PlannedQuery // only `SELECT ... FROM ...` without WHERE or any of the other clauses Insert PlannedQuery Update PlannedQuery Delete PlannedQuery @@ -126,6 +127,7 @@ func buildPlan(t reflect.Type, dialect Dialect, opts PlanOpts) (Plan, error) { } // prepare query strings + p.Select = p.buildSelectQueryIfPossible(dialect) p.Insert = p.buildInsertQueryIfPossible(dialect) p.Update = p.buildUpdateQueryIfPossible(dialect) p.Delete = p.buildDeleteQueryIfPossible(dialect) @@ -153,6 +155,28 @@ func (p Plan) getNonPrimaryKeyColumnNames() []string { return result } +func (p Plan) buildSelectQueryIfPossible(dialect Dialect) PlannedQuery { + if p.TableName == "" { + return PlannedQuery{Query: ""} + } + + var ( + argumentIndexes = make([][]int, len(p.AllColumnNames)) + quotedColumnNames = make([]string, len(p.AllColumnNames)) + ) + for idx, columnName := range p.AllColumnNames { + argumentIndexes[idx] = p.IndexByColumnName[columnName] + quotedColumnNames[idx] = dialect.QuoteIdentifier(columnName) + } + + query := fmt.Sprintf( + `SELECT %s FROM %s WHERE `, + strings.Join(quotedColumnNames, ", "), + dialect.QuoteIdentifier(p.TableName), + ) + return PlannedQuery{query, argumentIndexes} +} + func (p Plan) buildInsertQueryIfPossible(dialect Dialect) PlannedQuery { if p.TableName == "" || len(p.AllColumnNames) == 0 { return PlannedQuery{Query: ""} |
