| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- package gocql
- func ptrOfType(t *TypeInfo) interface{} {
- switch t.Type {
- case TypeVarchar, TypeAscii:
- return new(string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(int64)
- case TypeBlob:
- return new([]byte)
- case TypeBoolean:
- return new(bool)
- case TypeFloat:
- return new(float32)
- case TypeDouble:
- return new(float64)
- case TypeInt:
- return new(int32)
- case TypeUUID, TypeTimeUUID:
- return new(UUID)
- case TypeList, TypeSet:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new([]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new([]int64)
- case TypeBlob:
- return new([][]byte)
- case TypeBoolean:
- return new([]bool)
- case TypeFloat:
- return new([]float32)
- case TypeDouble:
- return new([]float64)
- case TypeInt:
- return new([]int32)
- case TypeUUID, TypeTimeUUID:
- return new([]UUID)
- }
- return new([][]byte)
- case TypeMap:
- switch t.Key.Type {
- case TypeVarchar, TypeAscii:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[string]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[string]int64)
- case TypeBlob:
- return new(map[string][]byte)
- case TypeBoolean:
- return new(map[string]bool)
- case TypeFloat:
- return new(map[string]float32)
- case TypeDouble:
- return new(map[string]float64)
- case TypeInt:
- return new(map[string]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[string]UUID)
- }
- case TypeBigInt, TypeCounter, TypeTimestamp:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[int64]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[int64]int64)
- case TypeBlob:
- return new(map[int64][]byte)
- case TypeBoolean:
- return new(map[int64]bool)
- case TypeFloat:
- return new(map[int64]float32)
- case TypeDouble:
- return new(map[int64]float64)
- case TypeInt:
- return new(map[int64]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[int64]UUID)
- }
- case TypeBlob:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[string]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[string]int64)
- case TypeBlob:
- return new(map[string][]byte)
- case TypeBoolean:
- return new(map[string]bool)
- case TypeFloat:
- return new(map[string]float32)
- case TypeDouble:
- return new(map[string]float64)
- case TypeInt:
- return new(map[string]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[string]UUID)
- }
- case TypeBoolean:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[bool]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[bool]int64)
- case TypeBlob:
- return new(map[bool][]byte)
- case TypeBoolean:
- return new(map[bool]bool)
- case TypeFloat:
- return new(map[bool]float32)
- case TypeDouble:
- return new(map[bool]float64)
- case TypeInt:
- return new(map[bool]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[bool]UUID)
- }
- case TypeFloat:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[float32]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[float32]int64)
- case TypeBlob:
- return new(map[float32][]byte)
- case TypeBoolean:
- return new(map[float32]bool)
- case TypeFloat:
- return new(map[float32]float32)
- case TypeDouble:
- return new(map[float32]float64)
- case TypeInt:
- return new(map[float32]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[float32]UUID)
- }
- case TypeDouble:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[float64]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[float64]int64)
- case TypeBlob:
- return new(map[float64][]byte)
- case TypeBoolean:
- return new(map[float64]bool)
- case TypeFloat:
- return new(map[float64]float32)
- case TypeDouble:
- return new(map[float64]float64)
- case TypeInt:
- return new(map[float64]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[float64]UUID)
- }
- case TypeInt:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[int32]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[int32]int64)
- case TypeBlob:
- return new(map[int32][]byte)
- case TypeBoolean:
- return new(map[int32]bool)
- case TypeFloat:
- return new(map[int32]float32)
- case TypeDouble:
- return new(map[int32]float64)
- case TypeInt:
- return new(map[int32]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[int32]UUID)
- }
- case TypeUUID, TypeTimeUUID:
- switch t.Elem.Type {
- case TypeVarchar, TypeAscii:
- return new(map[UUID]string)
- case TypeBigInt, TypeCounter, TypeTimestamp:
- return new(map[UUID]int64)
- case TypeBlob:
- return new(map[UUID][]byte)
- case TypeBoolean:
- return new(map[UUID]bool)
- case TypeFloat:
- return new(map[UUID]float32)
- case TypeDouble:
- return new(map[UUID]float64)
- case TypeInt:
- return new(map[UUID]int32)
- case TypeUUID, TypeTimeUUID:
- return new(map[UUID]UUID)
- }
- }
- default:
- return new([]byte)
- }
- return new(map[string]string)
- }
- func dereference(i interface{}) interface{} {
- switch i.(type) {
- case *string:
- return *i.(*string)
- case *int64:
- return *i.(*int64)
- case *[]byte:
- return *i.(*[]byte)
- case *bool:
- return *i.(*bool)
- case *float32:
- return *i.(*float32)
- case *float64:
- return *i.(*float64)
- case *int32:
- return *i.(*int32)
- case *UUID:
- return *i.(*UUID)
- case *[]string:
- return *i.(*[]string)
- case *[]int64:
- return *i.(*[]int64)
- case *[][]byte:
- return *i.(*[][]byte)
- case *[]bool:
- return *i.(*[]bool)
- case *[]float32:
- return *i.(*[]float32)
- case *[]float64:
- return *i.(*[]float64)
- case *[]int32:
- return *i.(*[]int32)
- case *[]UUID:
- return *i.(*[]UUID)
- case *map[string]string:
- return *i.(*map[string]string)
- case *map[string]int64:
- return *i.(*map[string]int64)
- case *map[string][]byte:
- return *i.(*map[string][]byte)
- case *map[string]bool:
- return *i.(*map[string]bool)
- case *map[string]float32:
- return *i.(*map[string]float32)
- case *map[string]float64:
- return *i.(*map[string]float64)
- case *map[string]int32:
- return *i.(*map[string]int32)
- case *map[string]UUID:
- return *i.(*map[string]UUID)
- case *map[int64]string:
- return *i.(*map[int64]string)
- case *map[int64]int64:
- return *i.(*map[int64]int64)
- case *map[int64][]byte:
- return *i.(*map[int64][]byte)
- case *map[int64]bool:
- return *i.(*map[int64]bool)
- case *map[int64]float32:
- return *i.(*map[int64]float32)
- case *map[int64]float64:
- return *i.(*map[int64]float64)
- case *map[int64]int32:
- return *i.(*map[int64]int32)
- case *map[int64]UUID:
- return *i.(*map[int64]UUID)
- case *map[bool]string:
- return *i.(*map[bool]string)
- case *map[bool]int64:
- return *i.(*map[bool]int64)
- case *map[bool][]byte:
- return *i.(*map[bool][]byte)
- case *map[bool]bool:
- return *i.(*map[bool]bool)
- case *map[bool]float32:
- return *i.(*map[bool]float32)
- case *map[bool]float64:
- return *i.(*map[bool]float64)
- case *map[bool]int32:
- return *i.(*map[bool]int32)
- case *map[bool]UUID:
- return *i.(*map[bool]UUID)
- case *map[float32]string:
- return *i.(*map[float32]string)
- case *map[float32]int64:
- return *i.(*map[float32]int64)
- case *map[float32][]byte:
- return *i.(*map[float32][]byte)
- case *map[float32]bool:
- return *i.(*map[float32]bool)
- case *map[float32]float32:
- return *i.(*map[float32]float32)
- case *map[float32]float64:
- return *i.(*map[float32]float64)
- case *map[float32]int32:
- return *i.(*map[float32]int32)
- case *map[float32]UUID:
- return *i.(*map[float32]UUID)
- case *map[float64]string:
- return *i.(*map[float64]string)
- case *map[float64]int64:
- return *i.(*map[float64]int64)
- case *map[float64][]byte:
- return *i.(*map[float64][]byte)
- case *map[float64]bool:
- return *i.(*map[float64]bool)
- case *map[float64]float32:
- return *i.(*map[float64]float32)
- case *map[float64]float64:
- return *i.(*map[float64]float64)
- case *map[float64]int32:
- return *i.(*map[float64]int32)
- case *map[float64]UUID:
- return *i.(*map[float64]UUID)
- case *map[int32]string:
- return *i.(*map[int32]string)
- case *map[int32]int64:
- return *i.(*map[int32]int64)
- case *map[int32][]byte:
- return *i.(*map[int32][]byte)
- case *map[int32]bool:
- return *i.(*map[int32]bool)
- case *map[int32]float32:
- return *i.(*map[int32]float32)
- case *map[int32]float64:
- return *i.(*map[int32]float64)
- case *map[int32]int32:
- return *i.(*map[int32]int32)
- case *map[int32]UUID:
- return *i.(*map[int32]UUID)
- case *map[UUID]string:
- return *i.(*map[UUID]string)
- case *map[UUID]int64:
- return *i.(*map[UUID]int64)
- case *map[UUID][]byte:
- return *i.(*map[UUID][]byte)
- case *map[UUID]bool:
- return *i.(*map[UUID]bool)
- case *map[UUID]float32:
- return *i.(*map[UUID]float32)
- case *map[UUID]float64:
- return *i.(*map[UUID]float64)
- case *map[UUID]int32:
- return *i.(*map[UUID]int32)
- case *map[UUID]UUID:
- return *i.(*map[UUID]UUID)
- default:
- return i
- }
- }
- // SliceMap is a helper function to make the API easier to use
- // returns the data from the query in the form of []map[string]interface{}
- func (iter *Iter) SliceMap() ([]map[string]interface{}, error) {
- if iter.err != nil {
- return nil, iter.err
- }
- interfacesToScan := make([]interface{}, 0)
- for _, column := range iter.Columns() {
- i := ptrOfType(column.TypeInfo)
- interfacesToScan = append(interfacesToScan, i)
- }
- dataToReturn := make([]map[string]interface{}, 0)
- for iter.Scan(interfacesToScan...) {
- m := make(map[string]interface{})
- for i, column := range iter.Columns() {
- m[column.Name] = dereference(interfacesToScan[i])
- }
- dataToReturn = append(dataToReturn, m)
- }
- if iter.err != nil {
- return nil, iter.err
- }
- return dataToReturn, nil
- }
|