gdbclient/result.go (140 lines of code) (raw):
/*
* (C) 2019-present Alibaba Group Holding Limited.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/**
* @author : Liu Jianping
* @date : 2019/12/2
*/
package gdbclient
import (
"errors"
"github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient/graph"
"github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient/internal/graphsonv3"
"time"
)
type ResultSetFuture interface {
IsCompleted() bool
GetResults() ([]Result, error)
GetResultsOrTimeout(timeout time.Duration) ([]Result, bool, error)
}
type _ResultSetFuture struct {
future *graphsonv3.ResponseFuture
}
func (r *_ResultSetFuture) IsCompleted() bool {
return r.future.IsCompleted()
}
func (r *_ResultSetFuture) GetResults() ([]Result, error) {
results, err := graphsonv3.GetResult(r.future.Get())
if err != nil {
return nil, err
}
return r.returnResults(results), nil
}
func (r *_ResultSetFuture) GetResultsOrTimeout(timeout time.Duration) ([]Result, bool, error) {
if response, ok := r.future.GetOrTimeout(timeout); ok {
return nil, true, errors.New("get result timeout")
} else {
results, err := graphsonv3.GetResult(response)
if err != nil {
return nil, false, err
}
return r.returnResults(results), false, nil
}
}
func (r *_ResultSetFuture) returnResults(results []interface{}) []Result {
size := len(results)
ret := make([]Result, size, size)
for i := 0; i < size; i++ {
ret[i].value = results[i]
}
return ret
}
func NewResultSetFuture(future *graphsonv3.ResponseFuture) ResultSetFuture {
return &_ResultSetFuture{future: future}
}
type Result struct {
value interface{}
}
func (r *Result) SetValue(value interface{}) {
r.value = value
}
func (r *Result) GetObject() interface{} {
return r.value
}
func (r *Result) GetBool() bool {
if val, ok := r.value.(bool); ok {
return val
}
return false
}
func (r *Result) GetInt8() int8 {
if val, ok := r.value.(int8); ok {
return val
}
return 0
}
func (r *Result) GetInt32() int32 {
if val, ok := r.value.(int32); ok {
return val
}
return 0
}
func (r *Result) GetInt64() int64 {
if val, ok := r.value.(int64); ok {
return val
}
return 0
}
func (r *Result) GetFloat() float32 {
if val, ok := r.value.(float32); ok {
return val
}
return 0
}
func (r *Result) GetDouble() float64 {
if val, ok := r.value.(float64); ok {
return val
}
return 0
}
func (r *Result) GetString() string {
if val, ok := r.value.(string); ok {
return val
}
return ""
}
func (r *Result) GetVertex() graph.Vertex {
if val, ok := r.value.(graph.Vertex); ok {
return val
}
return nil
}
func (r *Result) GetEdge() graph.Edge {
if val, ok := r.value.(graph.Edge); ok {
return val
}
return nil
}
func (r *Result) GetProperty() graph.Property {
if val, ok := r.value.(graph.Property); ok {
return val
}
return nil
}
func (r *Result) GetVertexProperty() graph.VertexProperty {
if val, ok := r.value.(graph.VertexProperty); ok {
return val
}
return nil
}
func (r *Result) GetPath() *graph.DetachedPath {
if val, ok := r.value.(*graph.DetachedPath); ok {
return val
}
return nil
}
func (r *Result) GetMap() map[interface{}]interface{} {
if val, ok := r.value.(map[interface{}]interface{}); ok {
return val
}
return nil
}
func (r *Result) GetList() []interface{} {
if val, ok := r.value.([]interface{}); ok {
return val
}
return nil
}