func (conn *Connection) ExecuteFetch(query string, maxrows int, wantfields bool) (qr *proto.QueryResult, err error) { if conn.IsClosed() { return nil, NewSqlError(2006, "Connection is closed") } if C.vt_execute(&conn.c, (*C.char)(hack.StringPointer(query)), C.ulong(len(query)), 0) != 0 { return nil, conn.lastError(query) } defer conn.CloseResult() qr = &proto.QueryResult{} qr.RowsAffected = uint64(conn.c.affected_rows) qr.InsertId = uint64(conn.c.insert_id) if conn.c.num_fields == 0 { return qr, nil } if qr.RowsAffected > uint64(maxrows) { return nil, &SqlError{0, fmt.Sprintf("Row count exceeded %d", maxrows), string(query)} } if wantfields { qr.Fields = conn.Fields() } qr.Rows, err = conn.fetchAll() return qr, err }
// when using ExecuteStreamFetch, use FetchNext on the Connection until it returns nil or error func (conn *Connection) ExecuteStreamFetch(query string) (err error) { if conn.IsClosed() { return NewSqlError(2006, "Connection is closed") } if C.vt_execute(&conn.c, (*C.char)(hack.StringPointer(query)), C.ulong(len(query)), 1) != 0 { return conn.lastError(query) } return nil }