chai icon indicating copy to clipboard operation
chai copied to clipboard

SQL driver doesn't support msgpack.EncodedDocument

Open KudinovKV opened this issue 4 years ago • 2 comments

Run simple program:

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/genjidb/genji/sql/driver"
)

type Doc struct {
	Field1 string `genji:"field1"`
	Field2 int    `genji:"field2"`
}

func main() {
	db, err := sql.Open("genji", ":memory:")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	_, err = db.Exec(`CREATE TABLE foo (doc DOCUMENT NOT NULL)`)
	if err != nil {
		panic(err)
	}

	_, err = db.Exec(`INSERT INTO foo (doc) VALUES (?)`, Doc{
		Field1: "123",
		Field2: 123,
	})
	if err != nil {
		panic(err)
	}

	rows, err := db.Query(`SELECT doc FROM foo`)
	if err != nil {
		panic(err)
	}
	defer rows.Close()
	for rows.Next() {
		var doc Doc
		if err := rows.Scan(&doc); err != nil {
			panic(err)
		}
		fmt.Printf("foo found: (%v)", doc)
	}
	if err := rows.Err(); err != nil {
		panic(err)
	}
}

Get this:

panic: sql: Scan error on column index 0, name "doc": unsupported Scan, storing driver.Value type msgpack.EncodedDocument into type *main.Doc

Is this a bug or I misusing sql driver?

KudinovKV avatar Oct 28 '20 07:10 KudinovKV

Thanks, we should definitely improve this case (either in the docs or at API level). Currently you should be using driver.Scanner to scan documents.

diff
@@ -4,7 +4,7 @@
 	"database/sql"
 	"fmt"
 
-	_ "github.com/genjidb/genji/sql/driver"
+	"github.com/genjidb/genji/sql/driver"
 )
 
 type Doc struct {
@@ -39,7 +39,7 @@
 	defer rows.Close()
 	for rows.Next() {
 		var doc Doc
-		if err := rows.Scan(&doc); err != nil {
+		if err := rows.Scan(driver.Scanner(&doc)); err != nil {
 			panic(err)
 		}
 		fmt.Printf("foo found: (%v)", doc)

tie avatar Oct 28 '20 08:10 tie

Thanks you!

KudinovKV avatar Oct 29 '20 06:10 KudinovKV