Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

PEP 249対応進まず

PEP 249に対応しようとしてるんだけどなかな難しい。
description。今ぶつかってる問題がここ。
Field Packetでは

  1. lengthはバイト数で返ってくる
  2. fieldのcharsetは取れるが、何バイトの文字なのかは送られてこない
  3. display_sizeが謎

utf8のvar_charだと50ー>150で返ってくる。
50でセットしたいんだけどねえ。

descriptionで返す7項目のタプルは以下

(name,
type_code,
display_size,
internal_size,
precision,
scale,
null_ok)

必須なのは先頭の2つだけなので249的には満たすことはできるんだけど。。。。
実際に何バイトなのかはmysqlのstrig/ctype-xxx.c内のmbmaxlenの値を見ればわかるので
charsetのdictを定義(なんかごにょって作る)しておいてcharsetnrから引けるようにすべきかな。。。。

あと、display_sizeが謎っていうのはMySQLdbのdescriptionの値をみてそう思った。
なんか違うと思うんだけど。

あと、nullかどうかとかのfagsの値だけど先頭は無視していいっぽい。
flagsの値は

flags: The possible flag values at time of
writing (taken from include/mysql_com.h), in hexadecimal:
0001 NOT_NULL_FLAG
0002 PRI_KEY_FLAG
0004 UNIQUE_KEY_FLAG
0008 MULTIPLE_KEY_FLAG
0010 BLOB_FLAG
0020 UNSIGNED_FLAG
0040 ZEROFILL_FLAG
0080 BINARY_FLAG
0100 ENUM_FLAG
0200 AUTO_INCREMENT_FLAG
0400 TIMESTAMP_FLAG
0800 SET_FLAG

flags = struct.unpack('

で3桁(203とか)の値を取り出して見るっぽい。
(まちがってるかも)
とりあえずMySQLdbがcのラッパー使ってる理由がわかった。
(めんどいからだよ!)