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 'duration'          then Cassandra::Types.duration
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