|
@@ -0,0 +1,87 @@
|
|
|
+package arango
|
|
|
+
|
|
|
+import (
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+type Query struct {
|
|
|
+ Lines []string
|
|
|
+ Params map[string]any
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (query *Query) Append(line string, values ...any) *Query {
|
|
|
+ var params map[string]any = nil
|
|
|
+
|
|
|
+ names := ReadParams(line)
|
|
|
+ if len(names) > 0 {
|
|
|
+ params = map[string]any{}
|
|
|
+ for i, name := range names {
|
|
|
+ if i > len(values) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ params[name] = values[i]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ query.Lines = append(query.Lines, line)
|
|
|
+ return query.AssignMap(params)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (query *Query) Assign(name string, value any) *Query {
|
|
|
+ query.Params[name] = value
|
|
|
+ return query
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (query *Query) AssignMap(params map[string]any) *Query {
|
|
|
+ if params != nil {
|
|
|
+ for name, value := range params {
|
|
|
+ query.Params[name] = value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return query
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (query *Query) Copy() *Query {
|
|
|
+ newQuery := NewQuery()
|
|
|
+ for _, line := range query.Lines {
|
|
|
+ newQuery.Lines = append(newQuery.Lines, line)
|
|
|
+ }
|
|
|
+ for name, value := range query.Params {
|
|
|
+ newQuery.Params[name] = value
|
|
|
+ }
|
|
|
+ return newQuery
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (query *Query) L(line string, values ...any) *Query {
|
|
|
+ return query.Append(line, values...)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (query *Query) P(name string, value any) *Query {
|
|
|
+ return query.Assign(name, value)
|
|
|
+}
|
|
|
+
|
|
|
+func (query *Query) String() string {
|
|
|
+ return strings.Join(query.Lines, "\n")
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func NewQuery() *Query {
|
|
|
+ return &Query{
|
|
|
+ Lines: []string{},
|
|
|
+ Params: map[string]any{},
|
|
|
+ }
|
|
|
+}
|