Skip to content

Commit

Permalink
get json to work with ?
Browse files Browse the repository at this point in the history
  • Loading branch information
Joematpal authored and proullon committed May 31, 2023
1 parent 8ff679d commit 71531c1
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 11 deletions.
32 changes: 32 additions & 0 deletions driver/driver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"database/sql"
"encoding/json"
"fmt"
"reflect"
"testing"
"time"

Expand Down Expand Up @@ -1103,3 +1104,34 @@ func TestInsertByteArray(t *testing.T) {
t.Fatalf("Expected JSON to be '%s', got '%s'", string(j), s)
}
}

func TestInsertByteArrayOBDC(t *testing.T) {
log.UseTestLogger(t)

db, err := sql.Open("ramsql", "TestBracketWhereClause")
if err != nil {
t.Fatalf("sql.Open : Error : %s\n", err)
}

_, err = db.Exec(`CREATE TABLE test_json (sequence_number BIGSERIAL PRIMARY KEY, json JSON, created_at TIMESTAMP)`)
if err != nil {
t.Fatalf("sql.Exec: Error: %s\n", err)
}

j, _ := json.Marshal(map[string]string{"a": "a"})

_, err = db.Exec("INSERT INTO test (json) values (?)", j)
if err != nil {
t.Fatalf("sql.Exec: Error: %s\n", err)
}

var s []byte
err = db.QueryRow("SELECT json FROM test limit 1").Scan(&s)
if err != nil {
t.Fatalf("sql.Select: Error: %s\n", err)
}

if !reflect.DeepEqual(s, j) {
t.Fatalf("Expected JSON to be '%s', got '%s'", j, s)
}
}
32 changes: 21 additions & 11 deletions driver/stmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,8 @@ func replaceArguments(query string, args []driver.Value) string {
var v string
if args[index-1] == nil {
v = "null"
} else if _, ok := args[index-1].([]byte); ok {
v = fmt.Sprintf("$$%v$$", string(args[index-1].([]byte)))
} else if b, ok := args[index-1].([]byte); ok {
v = fmt.Sprintf("$$%s$$", b)
} else {
v = fmt.Sprintf("$$%v$$", args[index-1])
}
Expand All @@ -181,19 +181,29 @@ func replaceArguments(query string, args []driver.Value) string {
}

func replaceArgumentsODBC(query string, args []driver.Value) string {
var finalQuery string
finalQuery := &strings.Builder{}

queryParts := strings.Split(query, "?")
finalQuery = queryParts[0]

finalQuery.WriteString(queryParts[0])

for i := range args {
arg := fmt.Sprintf("%v", args[i])
_, ok := args[i].(string)
if ok && !strings.HasSuffix(query, "'") {
arg = "$$" + arg + "$$"
var arg string
switch v := args[i].(type) {
case string:
if !strings.HasSuffix(query, "'") {
arg = fmt.Sprintf("$$%s$$", v)
}
case []byte:
if !strings.HasSuffix(query, "'") {
arg = fmt.Sprintf("$$%s$$", v)
}
default:
arg = fmt.Sprintf("%v", v)
}
finalQuery += arg
finalQuery += queryParts[i+1]
finalQuery.WriteString(arg)
finalQuery.WriteString(queryParts[i+1])
}

return finalQuery
return finalQuery.String()
}

0 comments on commit 71531c1

Please sign in to comment.