class Cassandra::Cluster::Schema::CQLTypeParser
Constants
- IncompleteTypeError
- Node
@private
Public Instance Methods
parse(string, types)
click to toggle source
# File lib/cassandra/cluster/schema/cql_type_parser.rb 28 def parse(string, types) 29 frozen = false 30 node = parse_node(string) 31 32 if node.name == 'frozen' 33 frozen = true 34 node = node.children.first 35 end 36 37 [lookup_type(node, types), frozen] 38 end
Private Instance Methods
lookup_type(node, types)
click to toggle source
# File lib/cassandra/cluster/schema/cql_type_parser.rb 42 def lookup_type(node, types) 43 case node.name 44 when 'text' then Cassandra::Types.text 45 when 'blob' then Cassandra::Types.blob 46 when 'ascii' then Cassandra::Types.ascii 47 when 'bigint' then Cassandra::Types.bigint 48 when 'counter' then Cassandra::Types.counter 49 when 'int' then Cassandra::Types.int 50 when 'varint' then Cassandra::Types.varint 51 when 'boolean' then Cassandra::Types.boolean 52 when 'decimal' then Cassandra::Types.decimal 53 when 'double' then Cassandra::Types.double 54 when 'float' then Cassandra::Types.float 55 when 'inet' then Cassandra::Types.inet 56 when 'timestamp' then Cassandra::Types.timestamp 57 when 'uuid' then Cassandra::Types.uuid 58 when 'timeuuid' then Cassandra::Types.timeuuid 59 when 'date' then Cassandra::Types.date 60 when 'smallint' then Cassandra::Types.smallint 61 when 'time' then Cassandra::Types.time 62 when 'tinyint' then Cassandra::Types.tinyint 63 when 'jsonb' then Cassandra::Types.jsonb 64 when 'map' then 65 Cassandra::Types.map(*node.children.map { |t| lookup_type(t, types)}) 66 when 'set' then 67 Cassandra::Types.set(lookup_type(node.children.first, types)) 68 when 'list' then 69 Cassandra::Types.list(lookup_type(node.children.first, types)) 70 when 'tuple' then 71 Cassandra::Types.tuple(*node.children.map { |t| lookup_type(t, types)}) 72 when 'frozen' then 73 Cassandra::Types.frozen(lookup_type(node.children.first, types)) 74 when 'empty' then 75 Cassandra::Types.custom('org.apache.cassandra.db.marshal.EmptyType') 76 when /\A'/ then 77 # Custom type. 78 Cassandra::Types.custom(node.name[1..-2]) 79 else 80 types.fetch(node.name) do 81 raise IncompleteTypeError, "unable to lookup type #{node.name.inspect}" 82 end 83 end 84 end
parse_node(string)
click to toggle source
# File lib/cassandra/cluster/schema/cql_type_parser.rb 86 def parse_node(string) 87 root = node = Node.new(nil, '', []) 88 89 string.each_char do |char| 90 case char 91 when '<' # starting type params 92 child = Node.new(node, '', []) 93 node.children << child 94 node = child 95 when ',' 96 child = Node.new(node.parent, '', []) 97 node.parent.children << child 98 node = child 99 when '>' 100 node = node.parent 101 when ' ' 102 next 103 else 104 node.name << char unless char == '"' 105 end 106 end 107 108 root 109 end