Skip to content

Commit a30dba9

Browse files
committed
Add null and not null operators
1 parent f3c4ef3 commit a30dba9

4 files changed

Lines changed: 35 additions & 14 deletions

File tree

examples/chi/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func main() {
2626

2727
// Setup the handler for SQLiteAdmin
2828
config := sqliteadmin.Config{
29-
Db: db,
29+
DB: db,
3030
Username: "user",
3131
Password: "password",
3232
Logger: logger,

examples/stdlib/stdlib.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func main() {
3131

3232
mux.HandleFunc("/admin", func(w http.ResponseWriter, r *http.Request) {
3333
if r.Method == "POST" {
34-
sHandler.Handle(w, r)
34+
sHandler.HandlePost(w, r)
3535
}
3636
})
3737

queryhandlers.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func (h *Handler) getTable(w http.ResponseWriter, params map[string]interface{})
7272
h.logger.Info(fmt.Sprintf("Command: GetTable, table=%s, limit=%d, offset=%d", table, limit, offset))
7373

7474
var condition *Condition
75-
conditionParam, ok := params["condition"].(interface{})
75+
conditionParam, ok := params["condition"]
7676
if ok {
7777
condition, ok = toCondition(conditionParam, h.logger)
7878
if !ok {
@@ -81,7 +81,7 @@ func (h *Handler) getTable(w http.ResponseWriter, params map[string]interface{})
8181
}
8282
h.logger.Debug(fmt.Sprintf("Condition provided: %v", condition))
8383
} else {
84-
h.logger.Debug(fmt.Sprintf("No condition provided"))
84+
h.logger.Debug("No condition provided")
8585
}
8686

8787
data, err := queryTable(h.db, table, condition, limit, offset, h.logger)
@@ -241,7 +241,7 @@ func queryTable(db *sql.DB, tableName string, condition *Condition, limit int, o
241241

242242
// Iterate through rows
243243
for rows.Next() {
244-
err := rows.Scan(scanArgs...)
244+
err = rows.Scan(scanArgs...)
245245
if err != nil {
246246
return nil, fmt.Errorf("error scanning row: %v", err)
247247
}
@@ -306,6 +306,10 @@ func getClause(filter Filter) string {
306306
return fmt.Sprintf("%s > ?", filter.Column)
307307
case OperatorGreaterThanOrEquals:
308308
return fmt.Sprintf("%s >= ?", filter.Column)
309+
case OperatorIsNull:
310+
return fmt.Sprintf("%s IS NULL", filter.Column)
311+
case OperatorIsNotNull:
312+
return fmt.Sprintf("%s IS NOT NULL", filter.Column)
309313
default:
310314
return ""
311315
}
@@ -390,7 +394,7 @@ func getTableInfo(db *sql.DB, tableName string) (map[string]interface{}, error)
390394
var notNull int
391395
var defaultValue interface{}
392396
var pk int
393-
if err := rows.Scan(&cid, &name, &dataType, &notNull, &defaultValue, &pk); err != nil {
397+
if err = rows.Scan(&cid, &name, &dataType, &notNull, &defaultValue, &pk); err != nil {
394398
return nil, fmt.Errorf("error scanning row: %v", err)
395399
}
396400

sqliteadmin.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package sqliteadmin
66

77
import (
88
"database/sql"
9-
"embed"
109
"encoding/json"
1110
"net/http"
1211
)
@@ -60,6 +59,8 @@ const (
6059
OperatorLessThanOrEquals Operator = "lte"
6160
OperatorGreaterThan Operator = "gt"
6261
OperatorGreaterThanOrEquals Operator = "gte"
62+
OperatorIsNull Operator = "null"
63+
OperatorIsNotNull Operator = "notnull"
6364
)
6465

6566
const (
@@ -72,10 +73,10 @@ const (
7273

7374
const pathPrefixPlaceholder = "%%__path_prefix__%%"
7475

75-
const DefaultLimit = 100
76-
const DefaultOffset = 0
77-
78-
var indexHtml embed.FS
76+
const (
77+
DefaultLimit = 100
78+
DefaultOffset = 0
79+
)
7980

8081
type Logger interface {
8182
Info(format string, args ...interface{})
@@ -91,7 +92,7 @@ const (
9192
)
9293

9394
type Config struct {
94-
Db *sql.DB
95+
DB *sql.DB
9596
Username string
9697
Password string
9798
Logger Logger
@@ -100,12 +101,18 @@ type Config struct {
100101
// Creates a new HTTP handler which has a HandlePost method
101102
// that can be used to handle requests from https://sqliteadmin.dev.
102103
func NewHandler(c Config) *Handler {
103-
return &Handler{
104-
db: c.Db,
104+
h := &Handler{
105+
db: c.DB,
105106
username: c.Username,
106107
password: c.Password,
107108
logger: c.Logger,
108109
}
110+
111+
if h.logger == nil {
112+
h.logger = &defaultLogger{}
113+
}
114+
115+
return h
109116
}
110117

111118
type CommandRequest struct {
@@ -154,3 +161,13 @@ func (h *Handler) HandlePost(w http.ResponseWriter, r *http.Request) {
154161
http.Error(w, "Invalid command", http.StatusBadRequest)
155162
}
156163
}
164+
165+
var _ Logger = &defaultLogger{}
166+
167+
type defaultLogger struct{}
168+
169+
func (l *defaultLogger) Info(format string, args ...interface{}) {}
170+
171+
func (l *defaultLogger) Error(format string, args ...interface{}) {}
172+
173+
func (l *defaultLogger) Debug(format string, args ...interface{}) {}

0 commit comments

Comments
 (0)