2020-02-02 12:39:57 +01:00
|
|
|
module mysql
|
|
|
|
|
|
|
|
pub struct Result {
|
2020-05-04 14:58:24 +02:00
|
|
|
result &C.MYSQL_RES
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub struct Row {
|
|
|
|
pub mut:
|
|
|
|
vals []string
|
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// fetch_row fetches the next row from the result set.
|
2020-02-02 12:39:57 +01:00
|
|
|
pub fn (r Result) fetch_row() &byteptr {
|
2020-05-04 14:58:24 +02:00
|
|
|
return C.mysql_fetch_row(r.result)
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// n_rows returns the number of rows in the result set.
|
|
|
|
pub fn (r Result) n_rows() u64 {
|
2020-06-01 11:26:39 +02:00
|
|
|
return C.mysql_num_rows(r.result)
|
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// n_fields returns the number of columns in a result set.
|
|
|
|
pub fn (r Result) n_fields() int {
|
2020-05-04 14:58:24 +02:00
|
|
|
return C.mysql_num_fields(r.result)
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// rows returns rows with `array` of columns.
|
2020-02-02 12:39:57 +01:00
|
|
|
pub fn (r Result) rows() []Row {
|
2020-04-26 16:25:54 +02:00
|
|
|
mut rows := []Row{}
|
2020-06-11 10:07:17 +02:00
|
|
|
nr_cols := r.n_fields()
|
2020-02-02 12:39:57 +01:00
|
|
|
for rr := r.fetch_row(); rr; rr = r.fetch_row() {
|
|
|
|
mut row := Row{}
|
2020-10-19 20:11:04 +02:00
|
|
|
for i in 0 .. nr_cols {
|
2020-10-26 10:21:28 +01:00
|
|
|
if unsafe {rr[i] == 0} {
|
2020-02-02 12:39:57 +01:00
|
|
|
row.vals << ''
|
|
|
|
} else {
|
2020-10-26 10:21:28 +01:00
|
|
|
row.vals << mystring(unsafe {byteptr(rr[i])})
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
rows << row
|
|
|
|
}
|
|
|
|
return rows
|
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// Returns rows with `map` of columns instead `array` of columns.
|
2020-05-04 14:58:24 +02:00
|
|
|
pub fn (r Result) maps() []map[string]string {
|
|
|
|
mut array_map := []map[string]string{}
|
|
|
|
rows := r.rows()
|
2020-06-11 10:07:17 +02:00
|
|
|
fields := r.fields()
|
2020-10-19 20:11:04 +02:00
|
|
|
for i in 0 .. rows.len {
|
|
|
|
mut map_val := map[string]string{}
|
|
|
|
for j in 0 .. fields.len {
|
2020-05-06 00:10:10 +02:00
|
|
|
map_val[fields[j].name] = rows[i].vals[j]
|
|
|
|
}
|
|
|
|
array_map << map_val
|
2020-05-04 14:58:24 +02:00
|
|
|
}
|
|
|
|
return array_map
|
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// fields returns an array of all field structures.
|
|
|
|
pub fn (r Result) fields() []Field {
|
2020-04-26 16:25:54 +02:00
|
|
|
mut fields := []Field{}
|
2020-06-11 10:07:17 +02:00
|
|
|
nr_cols := r.n_fields()
|
2020-05-04 14:58:24 +02:00
|
|
|
orig_fields := C.mysql_fetch_fields(r.result)
|
2020-10-19 20:11:04 +02:00
|
|
|
for i in 0 .. nr_cols {
|
2020-10-26 10:21:28 +01:00
|
|
|
unsafe {fields << Field{
|
2020-08-10 18:05:26 +02:00
|
|
|
name: mystring(orig_fields[i].name)
|
|
|
|
org_name: mystring(orig_fields[i].org_name)
|
|
|
|
table: mystring(orig_fields[i].table)
|
|
|
|
org_table: mystring(orig_fields[i].org_table)
|
|
|
|
db: mystring(orig_fields[i].db)
|
|
|
|
catalog: mystring(orig_fields[i].catalog)
|
2020-02-02 12:39:57 +01:00
|
|
|
def: resolve_nil_str(orig_fields[i].def)
|
|
|
|
length: orig_fields.length
|
|
|
|
max_length: orig_fields.max_length
|
|
|
|
name_length: orig_fields.name_length
|
|
|
|
org_name_length: orig_fields.org_name_length
|
|
|
|
table_length: orig_fields.table_length
|
|
|
|
org_table_length: orig_fields.org_table_length
|
|
|
|
db_length: orig_fields.db_length
|
|
|
|
catalog_length: orig_fields.catalog_length
|
|
|
|
def_length: orig_fields.def_length
|
|
|
|
flags: orig_fields.flags
|
|
|
|
decimals: orig_fields.decimals
|
|
|
|
charsetnr: orig_fields.charsetnr
|
|
|
|
type_: FieldType(orig_fields.@type)
|
2020-10-26 10:21:28 +01:00
|
|
|
}}
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|
|
|
|
return fields
|
|
|
|
}
|
|
|
|
|
2020-06-01 11:26:39 +02:00
|
|
|
pub struct Field {
|
|
|
|
name string
|
|
|
|
org_name string
|
|
|
|
table string
|
|
|
|
org_table string
|
|
|
|
db string
|
|
|
|
catalog string
|
|
|
|
def string
|
|
|
|
length int
|
|
|
|
max_length int
|
|
|
|
name_length u32
|
|
|
|
org_name_length u32
|
|
|
|
table_length u32
|
|
|
|
org_table_length u32
|
|
|
|
db_length u32
|
|
|
|
catalog_length u32
|
|
|
|
def_length u32
|
|
|
|
flags u32
|
|
|
|
decimals u32
|
|
|
|
charsetnr u32
|
|
|
|
type_ FieldType
|
|
|
|
}
|
|
|
|
|
2020-02-02 12:39:57 +01:00
|
|
|
pub fn (f Field) str() string {
|
|
|
|
return '
|
2020-04-26 16:25:54 +02:00
|
|
|
{
|
2020-02-02 12:39:57 +01:00
|
|
|
name: "$f.name"
|
|
|
|
org_name: "$f.org_name"
|
|
|
|
table: "$f.table"
|
|
|
|
org_table: "$f.org_table"
|
|
|
|
db: "$f.db"
|
|
|
|
catalog: "$f.catalog"
|
|
|
|
def: "$f.def"
|
|
|
|
length: $f.length
|
|
|
|
max_length: $f.max_length
|
|
|
|
name_length: $f.name_length
|
|
|
|
org_name_length: $f.org_name_length
|
|
|
|
table_length: $f.table_length
|
|
|
|
org_table_length: $f.org_table_length
|
|
|
|
db_length: $f.db_length
|
|
|
|
catalog_length: $f.catalog_length
|
|
|
|
def_length: $f.def_length
|
|
|
|
flags: $f.flags
|
|
|
|
decimals: $f.decimals
|
|
|
|
charsetnr: $f.charsetnr
|
2020-10-19 20:11:04 +02:00
|
|
|
type: $f.type_.str()
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|
|
|
|
'
|
|
|
|
}
|
|
|
|
|
2020-06-11 10:07:17 +02:00
|
|
|
// free frees memory used by a result set
|
2020-02-02 12:39:57 +01:00
|
|
|
pub fn (r Result) free() {
|
2020-05-04 14:58:24 +02:00
|
|
|
C.mysql_free_result(r.result)
|
2020-02-02 12:39:57 +01:00
|
|
|
}
|