// ExecuteFetch executes the query on the connection func (conn *Connection) ExecuteFetch(query string, maxrows int, wantfields bool) (qr *sqltypes.Result, err error) { if conn.IsClosed() { return nil, sqldb.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 = &sqltypes.Result{} 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, &sqldb.SQLError{ Num: 0, Message: fmt.Sprintf("Row count exceeded %d", maxrows), Query: string(query), } } if wantfields { qr.Fields = conn.Fields() } qr.Rows, err = conn.fetchAll() return qr, err }
// ExecuteStreamFetch starts a streaming query to mysql. Use FetchNext // on the Connection until it returns nil or error func (conn *Connection) ExecuteStreamFetch(query string) (err error) { if conn.IsClosed() { return sqldb.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 }