Skip to main content

query

glitter-sdk-go also provides a query method, which is divided into two steps

  • Query the engine service corresponding to dataset_name
  • Request the engine service The code is as follows
func (lcd *LCDClient) QuerySql(ctx context.Context, datasetName string, sql string, argument []Argument) (resp string, err error) {
var engineHost = ""
var engineParam = make(map[string]interface{})
url := lcd.URL + "/glitterchain/index/dataset/" + datasetName
data, err := utils.CurlGet(url)
if err != nil {
return "", err
}
c := core.MakeEncodingConfig(core.ModuleBasics)
r := &chaindepindextype.QueryDatesetResponse{}
err = c.Marshaler.UnmarshalJSON([]byte(data), r)
if err != nil {
return "", err
}
if r.Dateset.Hosts == "" {
return "", errors.New("obsent host")
}
host := r.Dateset.Hosts
engineHost = host + "/api/v1/simple_sql_query"
engineParam["sql"] = sql
engineParam["arguments"] = argument
resp, err = utils.CurlPost(engineHost, engineParam)
return resp, err
}

Use demo:

cli := LCDClient{
URL: "https://orlando-api.glitterprotocol.tech",
}
ctx := context.Background()
datasetName := "vec"
sql := "SELECT md5,title,VECTOR_L2_DISTANCE(vector,TEXT_TO_VEC(?)) AS distance FROM vec.ebook ORDER BY distance LIMIT 100"
arg := []Argument{
{
Type: "STRING",
Value: "mathematischer vorkus",
},
}
r, e := cli.QuerySql(ctx, datasetName, sql, arg)
t.Log(e)
t.Log(r)

github: https://github.com/glitternetwork/glitter-sdk-go/blob/dev_v4/client/querier_test.go