code: func MyTableColumns(db XODB, schema string, table string) ([]*Column, error) {
  	var err error
  
  	// sql query
  	const sqlstr = `SELECT ` +
  		`ordinal_position AS field_ordinal, ` +
  		`column_name, ` +
  		`IF(data_type = 'enum', column_name, column_type) AS data_type, ` +
  		`IF(is_nullable = 'YES', false, true) AS not_null, ` +
  		`column_default AS default_value, ` +
  		`IF(column_key = 'PRI', true, false) AS is_primary_key ` +
  		`FROM information_schema.columns ` +
  		`WHERE table_schema = ? AND table_name = ? ` +
  		`ORDER BY ordinal_position`
  
  	// run query
  	XOLog(sqlstr, schema, table)
  	q, err := db.Query(sqlstr, schema, table)
  	if err != nil {
  		return nil, err
  	}
  	defer q.Close()
  
  	// load results
  	res := []*Column{}
  	for q.Next() {
  		c := Column{}
  
  		// scan
  		err = q.Scan(&c.FieldOrdinal, &c.ColumnName, &c.DataType, &c.NotNull, &c.DefaultValue, &c.IsPrimaryKey)
  		if err != nil {
  			return nil, err
  		}
  
  		res = append(res, &c)
  	}
  
  	return res, nil
  }
docs: // MyTableColumns runs a custom query, returning results as Column.