func getCassandraLongType()

in helpers.go [169:244]


func getCassandraLongType(name string, protoVer byte, logger StdLogger) TypeInfo {
	if strings.HasPrefix(name, SET_TYPE) {
		return CollectionType{
			NativeType: NewNativeType(protoVer, TypeSet),
			Elem:       getCassandraLongType(unwrapCompositeTypeDefinition(name, SET_TYPE, '('), protoVer, logger),
		}
	} else if strings.HasPrefix(name, LIST_TYPE) {
		return CollectionType{
			NativeType: NewNativeType(protoVer, TypeList),
			Elem:       getCassandraLongType(unwrapCompositeTypeDefinition(name, LIST_TYPE, '('), protoVer, logger),
		}
	} else if strings.HasPrefix(name, MAP_TYPE) {
		names := splitJavaCompositeTypes(name, MAP_TYPE)
		if len(names) != 2 {
			logger.Printf("gocql: error parsing map type, it has %d subelements, expecting 2\n", len(names))
			return NewNativeType(protoVer, TypeCustom)
		}
		return CollectionType{
			NativeType: NewNativeType(protoVer, TypeMap),
			Key:        getCassandraLongType(names[0], protoVer, logger),
			Elem:       getCassandraLongType(names[1], protoVer, logger),
		}
	} else if strings.HasPrefix(name, TUPLE_TYPE) {
		names := splitJavaCompositeTypes(name, TUPLE_TYPE)
		types := make([]TypeInfo, len(names))

		for i, name := range names {
			types[i] = getCassandraLongType(name, protoVer, logger)
		}

		return TupleTypeInfo{
			NativeType: NewNativeType(protoVer, TypeTuple),
			Elems:      types,
		}
	} else if strings.HasPrefix(name, UDT_TYPE) {
		names := splitJavaCompositeTypes(name, UDT_TYPE)
		fields := make([]UDTField, len(names)-2)

		for i := 2; i < len(names); i++ {
			spec := strings.Split(names[i], ":")
			fieldName, _ := hex.DecodeString(spec[0])
			fields[i-2] = UDTField{
				Name: string(fieldName),
				Type: getCassandraLongType(spec[1], protoVer, logger),
			}
		}

		udtName, _ := hex.DecodeString(names[1])
		return UDTTypeInfo{
			NativeType: NewNativeType(protoVer, TypeUDT),
			KeySpace:   names[0],
			Name:       string(udtName),
			Elements:   fields,
		}
	} else if strings.HasPrefix(name, VECTOR_TYPE) {
		names := splitJavaCompositeTypes(name, VECTOR_TYPE)
		subType := getCassandraLongType(strings.TrimSpace(names[0]), protoVer, logger)
		dim, err := strconv.Atoi(strings.TrimSpace(names[1]))
		if err != nil {
			logger.Printf("gocql: error parsing vector dimensions: %v\n", err)
			return NewNativeType(protoVer, TypeCustom)
		}

		return VectorType{
			NativeType: NewCustomType(protoVer, TypeCustom, VECTOR_TYPE),
			SubType:    subType,
			Dimensions: dim,
		}
	} else {
		// basic type
		return NativeType{
			proto: protoVer,
			typ:   getApacheCassandraType(name),
		}
	}
}