sqlc icon indicating copy to clipboard operation
sqlc copied to clipboard

NULL JSON field fails to Scan into json.RawMessage

Open Jille opened this issue 1 year ago • 1 comments

Version

1.26.0

What happened?

I have a MariaDB table with a nullable JSON column but selecting it when the value is NULL fails to Scan() it into the field.

I'm using the github.com/go-sql-driver/mysql driver.

Relevant log output

sql: Scan error on column index 1, name "my_json_column": unsupported Scan, storing driver.Value type <nil> into type *json.RawMessage


### Database schema

```sql
CREATE TABLE authors (
  id   INT PRIMARY KEY,
  bio  JSON
);

SQL queries

-- name: GetAuthor :one
SELECT * FROM authors WHERE id = ?;

Configuration

No response

Playground URL

https://play.sqlc.dev/p/8e1085762b38b90fb51da2bdac5fe4d2b37d6b89cfae5562063e295d3a829a18

What operating system are you using?

Linux

What database engines are you using?

MySQL

What type of code are you generating?

Go

Jille avatar May 10 '24 14:05 Jille

any plans to fix this @kyleconroy? if you can suggest how to do it, maybe i can try

jarri-abidi avatar Sep 02 '24 06:09 jarri-abidi

The bug actually appears here where we fail to check for notNull in json fields.

In my testing, it seems if we output *.json.RawMessage for nullable fields, the Scan operation succeeds successfully for null values.

I don't see any other references of pointers inside of sqlc-generated code (vs. explicit NullRawMessage types as exist in the postgres implementation) so I'm uncertain pointers would be acceptable. In any case I'll spin up a PR shortly for discussion.

advait avatar Jan 07 '25 19:01 advait