Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql: Scan error on column index 1: unsupported Scan, storing driver.Value type <nil> into type *string #36

Closed
ymaeyama opened this issue Jul 17, 2018 · 16 comments
Labels
bug Something isn't working good first issue Good for newcomers

Comments

@ymaeyama
Copy link

mysqlのドキュメントを生成しようとするとエラーが出てしまいます。
対処方法などありましたら、教えていただけないでしょうか。

# cat /etc/redhat-release 
CentOS release 6.6 (Final)
# mysql --version
mysql  Ver 14.14 Distrib 5.6.23, for Linux (x86_64) using  EditLine wrapper
# go version
go version go1.9.6 linux/amd64
# tbls version
0.9.3
# tbls doc mysql://db_user:password@localhost:3306/cs_production ./dbdoc
sql: Scan error on column index 1: unsupported Scan, storing driver.Value type <nil> into type *string
@k1LoW k1LoW added the bug Something isn't working label Jul 21, 2018
@k1LoW
Copy link
Owner

k1LoW commented Jul 22, 2018

@ymaeyama レポートありがとうございます

tbls v0.10.0 でデバックモードを作成しましたので以下のコマンドを試していただきスタックトレースを共有してもらえますか?

$ DEBUG=1 tbls doc mysql://db_user:password@localhost:3306/cs_production ./dbdoc

@ymaeyama
Copy link
Author

@k1LoW 実行してみました。
sql: Scan error on column index 1: unsupported Scan, storing driver.Value type <nil> into type *string github.com/k1LoW/tbls/cmd.printError /root/go/src/github.com/k1LoW/tbls/cmd/root.go:67 github.com/k1LoW/tbls/cmd.glob..func4 /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:56 github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766 github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852 github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800 github.com/k1LoW/tbls/cmd.Execute /root/go/src/github.com/k1LoW/tbls/cmd/root.go:54 main.main /root/go/src/github.com/k1LoW/tbls/main.go:34 runtime.main /usr/lib/golang/src/runtime/proc.go:195 runtime.goexit /usr/lib/golang/src/runtime/asm_amd64.s:2337

@k1LoW
Copy link
Owner

k1LoW commented Jul 22, 2018

@ymaeyama

使えそうな情報が出ていないですね。。。すみません。

デバッグモードの修正をしました。よろしければ tbls v0.10.1 で再度実行してもらえますと助かります 🙏

@ymaeyama
Copy link
Author

@k1LoW
正直よく分からず実行している所がありますので、他に何か必要な作業がありましたら教えてください。

# go get -u github.com/k1LoW/tbls
# tbls version
0.10.1
 # DEBUG=1 tbls doc mysql://db_user:password@localhost:3306/cs_production ./dbdoc
sql: Scan error on column index 1: unsupported Scan, storing driver.Value type <nil> into type *string
github.com/k1LoW/tbls/drivers/mysql.(*Mysql).Analyze
        /root/go/src/github.com/k1LoW/tbls/drivers/mysql/mysql.go:186
github.com/k1LoW/tbls/db.Analyze
        /root/go/src/github.com/k1LoW/tbls/db/db.go:49
github.com/k1LoW/tbls/cmd.glob..func4
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:55
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800
github.com/k1LoW/tbls/cmd.Execute
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:54
main.main
        /root/go/src/github.com/k1LoW/tbls/main.go:34
runtime.main
        /usr/lib/golang/src/runtime/proc.go:195
runtime.goexit
        /usr/lib/golang/src/runtime/asm_amd64.s:2337
github.com/k1LoW/tbls/db.Analyze
        /root/go/src/github.com/k1LoW/tbls/db/db.go:51
github.com/k1LoW/tbls/cmd.glob..func4
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:55
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800
github.com/k1LoW/tbls/cmd.Execute
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:54
main.main
        /root/go/src/github.com/k1LoW/tbls/main.go:34
runtime.main
        /usr/lib/golang/src/runtime/proc.go:195
runtime.goexit
        /usr/lib/golang/src/runtime/asm_amd64.s:2337

@k1LoW
Copy link
Owner

k1LoW commented Jul 22, 2018

@ymaeyama

早速ありがとうございます!原因はわかりました。
制約条件(PRIMAL KEYやUNIQUE制約や外部キー制約)でtblsが想定できていないモノがあるようです。

@k1LoW
Copy link
Owner

k1LoW commented Jul 22, 2018

@ymaeyama

暫定対応をしてみました。もし go get で tbls をインストールしているようでしたら,
go get -u github.com/k1LoW/tbls でmasterのtblsで再度実行してもらえますと助かります 🙏

@k1LoW k1LoW added the good first issue Good for newcomers label Jul 22, 2018
@ymaeyama
Copy link
Author

@k1LoW

# DEBUG=1 tbls doc mysql://db_user@passwor@localhost:3306/cs_production ./dbdoc
Error: not found column 'in'
github.com/k1LoW/tbls/drivers/mysql.(*Mysql).Analyze
        /root/go/src/github.com/k1LoW/tbls/drivers/mysql/mysql.go:262
github.com/k1LoW/tbls/db.Analyze
        /root/go/src/github.com/k1LoW/tbls/db/db.go:49
github.com/k1LoW/tbls/cmd.glob..func4
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:55
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800
github.com/k1LoW/tbls/cmd.Execute
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:53
main.main
        /root/go/src/github.com/k1LoW/tbls/main.go:34
runtime.main
        /usr/lib/golang/src/runtime/proc.go:195
runtime.goexit
        /usr/lib/golang/src/runtime/asm_amd64.s:2337
github.com/k1LoW/tbls/db.Analyze
        /root/go/src/github.com/k1LoW/tbls/db/db.go:51
github.com/k1LoW/tbls/cmd.glob..func4
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:55
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800
github.com/k1LoW/tbls/cmd.Execute
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:53
main.main
        /root/go/src/github.com/k1LoW/tbls/main.go:34
runtime.main
        /usr/lib/golang/src/runtime/proc.go:195
runtime.goexit
        /usr/lib/golang/src/runtime/asm_amd64.s:2337

ちなみに、データベースを作成直後にテーブルを作らずにtblsを実行を試してみました。

CREATE DATABASE `cs_v2`;
# DEBUG=1 tbls doc mysql://db_user@passwor@localhost:3306/cs_v2 ./dbdoc
dbdoc/schema.png
exit status 1
github.com/k1LoW/tbls/cmd.withDot
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:125
github.com/k1LoW/tbls/cmd.glob..func4
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:80
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800
github.com/k1LoW/tbls/cmd.Execute
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:53
main.main
        /root/go/src/github.com/k1LoW/tbls/main.go:34
runtime.main
        /usr/lib/golang/src/runtime/proc.go:195
runtime.goexit
        /usr/lib/golang/src/runtime/asm_amd64.s:2337

cs_v2にテーブルを追加してtbls実行

create table user(
  id int,
  email varchar(255),
  password char(30)
);
# DEBUG=1 tbls doc mysql://db_user@passwor@localhost:3306/cs_v2 ./dbdoc
dbdoc/schema.png
exit status 1
github.com/k1LoW/tbls/cmd.withDot
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:125
github.com/k1LoW/tbls/cmd.glob..func4
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:80
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800
github.com/k1LoW/tbls/cmd.Execute
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:53
main.main
        /root/go/src/github.com/k1LoW/tbls/main.go:34
runtime.main
        /usr/lib/golang/src/runtime/proc.go:195
runtime.goexit
        /usr/lib/golang/src/runtime/asm_amd64.s:2337

@k1LoW
Copy link
Owner

k1LoW commented Jul 22, 2018

@ymaeyama

エラーの原因の位置が移動したようです。ありがとうございます!
Error: not found column 'in' ということなので、もし @ymaeyamain というカラムに見覚えがなければ、 tbls が in という何かをカラムと誤解してしまっているようです。

exit status 1 のエラーにつきましては ER図を生成する dot コマンド(Graphviz)がエラーを吐いているようです。
先程エラーメッセージを出力できるようにしましたので、確認してもらって対応してもらうか、 --no-viz オプションでER図の生成を止めれば進めることがそのままコマンド実行可能です。

@ymaeyama
Copy link
Author

@k1LoW
inカラムはcs_productionデータベース内にありませんでした。

また、cs_v2 の方でexit status 1が出る理由は、dbdocディレクトリがなかったことが原因でした。

@k1LoW
Copy link
Owner

k1LoW commented Jul 23, 2018

@ymaeyama
少しだけエラーメッセージを拡張しました。

エラー箇所より、わかっているのはtbls の「外部キー制約の処理がうまくいっていないようだ」ということだけです。
しかし、対象のスキーマの特徴がわからないので、手元で再現ができない状況です。。。

もし、エラーが再現可能でかつ共有可能なスキーマ情報がありましたら共有いただけますと幸いです。

ただ、上記対応が非常に難しいこともわかっていますので、こちらでも何かが改善次第このIssueで共有します。

@ymaeyama
Copy link
Author

ymaeyama commented Jul 24, 2018

@k1LoW
inとは別件ですが、MySQL5.6.23に対して、tblsを実行した結果を添付しました。
テーブルは添付ファイル内のcs_v2.sqlで作成しました。
MySQL5.6だと駄目とかありますか?

dbdoc.zip

@k1LoW
Copy link
Owner

k1LoW commented Jul 24, 2018

@ymaeyama

ありがとうございます。

MySQL5.6だと駄目とかありますか?

確かにMySQL5.6は試していないですね。MySQL5.6であることが問題になるのかもしれません。手元でも確認してみます。

@k1LoW
Copy link
Owner

k1LoW commented Jul 24, 2018

@ymaeyama

テーブルは添付ファイル内のcs_v2.sqlで作成しました。

こちらのバグはMySQL5.7でも再現しました。別で解決をしていきます。ありがとうございます。

@k1LoW
Copy link
Owner

k1LoW commented Jul 24, 2018

#36 (comment) の修正を #42 で実施しました。 masterブランチでは修正されているはずですー

@ymaeyama
Copy link
Author

@k1LoW
tblsを最新バージョンにしたところ、Error: not found column 'in'がでないで正常に出力できました。
対応ありがとうございます!

ただ、別環境のMySQL5.7で試したところ、違うエラーが出てしまいました。

# cat /etc/redhat-release 
CentOS release 6.9 (Final)
# mysql --version
mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper
# go version
go version go1.9.6 linux/amd64
# go get -u github.com/k1LoW/tbls
# DEBUG=1 tbls doc mysql://user:password@localhost:3306/tbls_mysql57 ./dbdoc
panic: runtime error: index out of range

goroutine 1 [running]:
github.com/k1LoW/tbls/db.Analyze(0x7ffdb65f48b3, 0x46, 0x0, 0x0, 0x0)
        /root/go/src/github.com/k1LoW/tbls/db/db.go:28 +0x453
github.com/k1LoW/tbls/cmd.glob..func4(0xaa7620, 0xc420118e40, 0x2, 0x2)
        /root/go/src/github.com/k1LoW/tbls/cmd/doc.go:56 +0x65
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).execute(0xaa7620, 0xc420118e00, 0x2, 0x2, 0xaa7620, 0xc420118e00)
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:766 +0x2c1
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xaa7ae0, 0xc42001c0b8, 0x0, 0xc42004ff48)
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:852 +0x334
github.com/k1LoW/tbls/vendor/github.com/spf13/cobra.(*Command).Execute(0xaa7ae0, 0x0, 0x0)
        /root/go/src/github.com/k1LoW/tbls/vendor/github.com/spf13/cobra/command.go:800 +0x2b
github.com/k1LoW/tbls/cmd.Execute()
        /root/go/src/github.com/k1LoW/tbls/cmd/root.go:53 +0x2d
main.main()
        /root/go/src/github.com/k1LoW/tbls/main.go:34 +0x20

@k1LoW
Copy link
Owner

k1LoW commented Jul 25, 2018

@ymaeyama
よかったです!このIssueは解決したということで閉じますね!
そして別Issueで #36 (comment) を解決していきましょう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants