(inlineArgs []string, cfg *config.Map)
| 57 | } |
| 58 | |
| 59 | func (s *SQLTable) Configure(inlineArgs []string, cfg *config.Map) error { |
| 60 | var ( |
| 61 | driver string |
| 62 | dsnParts []string |
| 63 | tableName string |
| 64 | keyColumn string |
| 65 | valueColumn string |
| 66 | ) |
| 67 | cfg.String("driver", false, true, "", &driver) |
| 68 | cfg.StringList("dsn", false, true, nil, &dsnParts) |
| 69 | cfg.String("table_name", false, true, "", &tableName) |
| 70 | cfg.String("key_column", false, false, "key", &keyColumn) |
| 71 | cfg.String("value_column", false, false, "value", &valueColumn) |
| 72 | if _, err := cfg.Process(); err != nil { |
| 73 | return err |
| 74 | } |
| 75 | |
| 76 | // sql_table module literally wraps the sql_query module by generating a |
| 77 | // configuration block for it. |
| 78 | |
| 79 | var ( |
| 80 | useNamedArgs string |
| 81 | |
| 82 | lookupQuery string |
| 83 | addQuery string |
| 84 | listQuery string |
| 85 | setQuery string |
| 86 | delQuery string |
| 87 | ) |
| 88 | if driver == "sqlite3" { |
| 89 | useNamedArgs = "yes" |
| 90 | lookupQuery = fmt.Sprintf("SELECT %s FROM %s WHERE %s = :key", valueColumn, tableName, keyColumn) |
| 91 | addQuery = fmt.Sprintf("INSERT INTO %s(%s, %s) VALUES(:key, :value)", tableName, keyColumn, valueColumn) |
| 92 | listQuery = fmt.Sprintf("SELECT %s from %s", keyColumn, tableName) |
| 93 | setQuery = fmt.Sprintf("UPDATE %s SET %s = :value WHERE %s = :key", tableName, valueColumn, keyColumn) |
| 94 | delQuery = fmt.Sprintf("DELETE FROM %s WHERE %s = :key", tableName, keyColumn) |
| 95 | } else { |
| 96 | useNamedArgs = "no" |
| 97 | lookupQuery = fmt.Sprintf("SELECT %s FROM %s WHERE %s = $1", valueColumn, tableName, keyColumn) |
| 98 | addQuery = fmt.Sprintf("INSERT INTO %s(%s, %s) VALUES($1, $2)", tableName, keyColumn, valueColumn) |
| 99 | listQuery = fmt.Sprintf("SELECT %s from %s", keyColumn, tableName) |
| 100 | setQuery = fmt.Sprintf("UPDATE %s SET %s = $2 WHERE %s = $1", tableName, valueColumn, keyColumn) |
| 101 | delQuery = fmt.Sprintf("DELETE FROM %s WHERE %s = $1", tableName, keyColumn) |
| 102 | } |
| 103 | |
| 104 | return s.wrapped.Configure(nil, config.NewMap(cfg.Globals, config.Node{ |
| 105 | Children: []config.Node{ |
| 106 | { |
| 107 | Name: "driver", |
| 108 | Args: []string{driver}, |
| 109 | }, |
| 110 | { |
| 111 | Name: "dsn", |
| 112 | Args: dsnParts, |
| 113 | }, |
| 114 | { |
| 115 | Name: "named_args", |
| 116 | Args: []string{useNamedArgs}, |
nothing calls this directly
no test coverage detected