mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package query
|
|
|
|
import (
|
|
"pilosa/db"
|
|
"strings"
|
|
"github.com/davecgh/go-spew/spew"
|
|
|
|
"tux21b.org/v1/gocql/uuid"
|
|
)
|
|
|
|
type QueryInput interface{}
|
|
|
|
type QueryResults struct {
|
|
Data interface{}
|
|
}
|
|
|
|
type PqlList []PqlListItem
|
|
|
|
type PqlListItem struct {
|
|
Id *uuid.UUID
|
|
Label string
|
|
PQL string
|
|
}
|
|
|
|
type Query struct {
|
|
Id *uuid.UUID
|
|
Operation string
|
|
Inputs []QueryInput //"strconv"
|
|
// Represents a parsed query. Inputs can be Query or Bitmap objects
|
|
// Maybe Bitmap and Query objects should have different fields to avoid using interface{}
|
|
ProfileId uint64
|
|
}
|
|
|
|
func QueryPlanForPQL(database *db.Database, pql string, destination *db.Location) *QueryPlan {
|
|
tokens := Lex(pql)
|
|
return QueryPlanForTokens(database, tokens, destination)
|
|
}
|
|
|
|
func QueryForPQL(pql string) *Query {
|
|
tokens := Lex(pql)
|
|
return QueryForTokens(tokens)
|
|
}
|
|
|
|
func QueryForTokens(tokens []Token) *Query {
|
|
query_parser := QueryParser{}
|
|
query, err := query_parser.Parse(tokens)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return query
|
|
}
|
|
|
|
func QueryPlanForTokens(database *db.Database, tokens []Token, destination *db.Location) *QueryPlan {
|
|
query := QueryForTokens(tokens)
|
|
return QueryPlanForQuery(database, query, destination)
|
|
}
|
|
|
|
func QueryPlanForQuery(database *db.Database, query *Query, destination *db.Location) *QueryPlan {
|
|
query_planner := QueryPlanner{Database: database}
|
|
id := uuid.RandomUUID()
|
|
query_plan := query_planner.Plan(query, &id, destination)
|
|
return query_plan
|
|
}
|
|
|
|
func TokensToString(tokens []Token) string {
|
|
var str []string
|
|
for i, _ := range tokens {
|
|
spew.Dump(tokens[i].Text)
|
|
str = append(str, tokens[i].Text)
|
|
}
|
|
// for now, we're just using this function to pull the filter out of the outer function "outerfunc(filter)"
|
|
str = str[2 : len(str)-1]
|
|
return strings.Join(str, "")
|
|
}
|