vertica 0.7.4 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +85 -0
 - data/Rakefile +56 -38
 - data/VERSION +1 -0
 - data/lib/vertica.rb +59 -11
 - data/lib/vertica/bit_helper.rb +7 -24
 - data/lib/vertica/column.rb +34 -53
 - data/lib/vertica/connection.rb +123 -139
 - data/lib/vertica/core_ext/numeric.rb +13 -0
 - data/lib/vertica/core_ext/string.rb +22 -0
 - data/lib/vertica/messages/{authentication.rb → backend_messages/authentication.rb} +6 -9
 - data/lib/vertica/messages/{backend_key_data.rb → backend_messages/backend_key_data.rb} +2 -2
 - data/lib/vertica/messages/{bind_complete.rb → backend_messages/bind_complete.rb} +0 -1
 - data/lib/vertica/messages/{close_complete.rb → backend_messages/close_complete.rb} +0 -1
 - data/lib/vertica/messages/{command_complete.rb → backend_messages/command_complete.rb} +3 -3
 - data/lib/vertica/messages/{data_row.rb → backend_messages/data_row.rb} +3 -6
 - data/lib/vertica/messages/{empty_query_response.rb → backend_messages/empty_query_response.rb} +0 -1
 - data/lib/vertica/messages/backend_messages/error_response.rb +35 -0
 - data/lib/vertica/messages/{no_data.rb → backend_messages/no_data.rb} +0 -1
 - data/lib/vertica/messages/backend_messages/notice_response.rb +16 -0
 - data/lib/vertica/messages/{notification_response.rb → backend_messages/notification_response.rb} +0 -0
 - data/lib/vertica/messages/{parameter_description.rb → backend_messages/parameter_description.rb} +0 -0
 - data/lib/vertica/messages/{parameter_status.rb → backend_messages/parameter_status.rb} +0 -0
 - data/lib/vertica/messages/{parse_complete.rb → backend_messages/parse_complete.rb} +0 -1
 - data/lib/vertica/messages/{portal_suspended.rb → backend_messages/portal_suspended.rb} +0 -1
 - data/lib/vertica/messages/{ready_for_query.rb → backend_messages/ready_for_query.rb} +2 -2
 - data/lib/vertica/messages/{row_description.rb → backend_messages/row_description.rb} +3 -3
 - data/lib/vertica/messages/{unknown.rb → backend_messages/unknown.rb} +2 -2
 - data/lib/vertica/messages/frontend_messages/bind.rb +28 -0
 - data/lib/vertica/messages/frontend_messages/cancel_request.rb +21 -0
 - data/lib/vertica/messages/frontend_messages/close.rb +24 -0
 - data/lib/vertica/messages/frontend_messages/describe.rb +24 -0
 - data/lib/vertica/messages/frontend_messages/execute.rb +20 -0
 - data/lib/vertica/messages/frontend_messages/flush.rb +7 -0
 - data/lib/vertica/messages/frontend_messages/parse.rb +23 -0
 - data/lib/vertica/messages/frontend_messages/password.rb +35 -0
 - data/lib/vertica/messages/frontend_messages/query.rb +17 -0
 - data/lib/vertica/messages/frontend_messages/ssl_request.rb +12 -0
 - data/lib/vertica/messages/frontend_messages/startup.rb +25 -0
 - data/lib/vertica/messages/frontend_messages/sync.rb +7 -0
 - data/lib/vertica/messages/frontend_messages/terminate.rb +7 -0
 - data/lib/vertica/messages/message.rb +26 -57
 - data/lib/vertica/result.rb +28 -20
 - data/lib/vertica/vertica_socket.rb +14 -3
 - data/test/test_helper.rb +7 -16
 - metadata +55 -50
 - data/README.textile +0 -69
 - data/lib/vertica/messages/bind.rb +0 -36
 - data/lib/vertica/messages/cancel_request.rb +0 -25
 - data/lib/vertica/messages/close.rb +0 -30
 - data/lib/vertica/messages/describe.rb +0 -30
 - data/lib/vertica/messages/error_response.rb +0 -59
 - data/lib/vertica/messages/execute.rb +0 -24
 - data/lib/vertica/messages/flush.rb +0 -15
 - data/lib/vertica/messages/notice_response.rb +0 -21
 - data/lib/vertica/messages/parse.rb +0 -31
 - data/lib/vertica/messages/password.rb +0 -33
 - data/lib/vertica/messages/query.rb +0 -20
 - data/lib/vertica/messages/ssl_request.rb +0 -14
 - data/lib/vertica/messages/startup.rb +0 -38
 - data/lib/vertica/messages/sync.rb +0 -15
 - data/lib/vertica/messages/terminate.rb +0 -14
 - data/test/create_schema.sql +0 -4
 - data/vertica.gemspec +0 -64
 
    
        data/README.textile
    DELETED
    
    | 
         @@ -1,69 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            h1. Vertica
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            by Matt Bauer
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            h2. Description
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            Vertica is a pure Ruby library for connecting to Vertica databases.  You can learn more
         
     | 
| 
       8 
     | 
    
         
            -
            about Vertica at http://www.vertica.com.  This library currently supports queries and
         
     | 
| 
       9 
     | 
    
         
            -
            prepared statements.
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            h2. Install
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
              $ gem install mattbauer-vertica --source http://gems.github.com
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            h2. Source
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            Vertica's git repo is available on GitHub, which can be browsed at:
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
              http://github.com/mattbauer/vertica
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            and cloned from:
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              git://github.com/mattbauer/vertica.git
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            h2. Usage
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            h4. Example Query
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            <pre>
         
     | 
| 
       30 
     | 
    
         
            -
            <code>
         
     | 
| 
       31 
     | 
    
         
            -
              c = Vertica::Connection.new(
         
     | 
| 
       32 
     | 
    
         
            -
                :user     => 'user',
         
     | 
| 
       33 
     | 
    
         
            -
                :password => 'password',
         
     | 
| 
       34 
     | 
    
         
            -
                :host     => 'db_server',
         
     | 
| 
       35 
     | 
    
         
            -
                :port     => '5433',
         
     | 
| 
       36 
     | 
    
         
            -
                :database => 'db
         
     | 
| 
       37 
     | 
    
         
            -
              )
         
     | 
| 
       38 
     | 
    
         
            -
              r = c.query("SELECT * FROM my_table")
         
     | 
| 
       39 
     | 
    
         
            -
              puts r.row_count
         
     | 
| 
       40 
     | 
    
         
            -
              puts r.columns[0].name
         
     | 
| 
       41 
     | 
    
         
            -
              puts r.rows
         
     | 
| 
       42 
     | 
    
         
            -
              c.close
         
     | 
| 
       43 
     | 
    
         
            -
            </code>
         
     | 
| 
       44 
     | 
    
         
            -
            </pre>
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
            h4. Example Prepared Statement
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
            <pre>
         
     | 
| 
       49 
     | 
    
         
            -
            <code>
         
     | 
| 
       50 
     | 
    
         
            -
              c = Vertica::Connection.new(
         
     | 
| 
       51 
     | 
    
         
            -
                :user     => 'user',
         
     | 
| 
       52 
     | 
    
         
            -
                :password => 'password',
         
     | 
| 
       53 
     | 
    
         
            -
                :host     => 'db_server',
         
     | 
| 
       54 
     | 
    
         
            -
                :port     => '5433',
         
     | 
| 
       55 
     | 
    
         
            -
                :database => 'db
         
     | 
| 
       56 
     | 
    
         
            -
              )
         
     | 
| 
       57 
     | 
    
         
            -
              c.prepare("my_prepared_statement", "SELECT * FROM my_table WHERE id = ?", 1)
         
     | 
| 
       58 
     | 
    
         
            -
              r = c.execute_prepared("my_prepared_statement", 13)
         
     | 
| 
       59 
     | 
    
         
            -
              puts r.row_count
         
     | 
| 
       60 
     | 
    
         
            -
              puts r.columns[0].name
         
     | 
| 
       61 
     | 
    
         
            -
              puts r.rows
         
     | 
| 
       62 
     | 
    
         
            -
              c.close
         
     | 
| 
       63 
     | 
    
         
            -
            </code>
         
     | 
| 
       64 
     | 
    
         
            -
            </pre>
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            h2. Running The Tests
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
            To run the tests, change the values in test_helper.rb to match your db configuration.  Then
         
     | 
| 
       69 
     | 
    
         
            -
            execute the create_schema.sql on the database.  Then you may run the tests.
         
     | 
| 
         @@ -1,36 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Bind < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?B
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(portal_name, prepared_statement_name, parameter_values)
         
     | 
| 
       7 
     | 
    
         
            -
                    @portal_name = portal_name
         
     | 
| 
       8 
     | 
    
         
            -
                    @prepared_statement_name = prepared_statement_name
         
     | 
| 
       9 
     | 
    
         
            -
                    @parameter_values = parameter_values.map { |pv| pv.to_s }
         
     | 
| 
       10 
     | 
    
         
            -
                  end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       13 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       14 
     | 
    
         
            -
                    size += @portal_name.length + 1
         
     | 
| 
       15 
     | 
    
         
            -
                    size += @prepared_statement_name.length + 1
         
     | 
| 
       16 
     | 
    
         
            -
                    size += 2 # parameter format code (0)
         
     | 
| 
       17 
     | 
    
         
            -
                    size += 2 # number of parameter values
         
     | 
| 
       18 
     | 
    
         
            -
                    size += @parameter_values.inject(0) { |sum, e| sum += (e.length + 4) }
         
     | 
| 
       19 
     | 
    
         
            -
                    size += 2
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                    stream.write_byte(message_id)
         
     | 
| 
       22 
     | 
    
         
            -
                    stream.write_network_int32(size)                      # size
         
     | 
| 
       23 
     | 
    
         
            -
                    stream.write_cstring(@portal_name)                    # portal name ("")
         
     | 
| 
       24 
     | 
    
         
            -
                    stream.write_cstring(@prepared_statement_name)        # prep
         
     | 
| 
       25 
     | 
    
         
            -
                    stream.write_network_int16(0)                         # format codes (0 - default text format)
         
     | 
| 
       26 
     | 
    
         
            -
                    stream.write_network_int16(@parameter_values.length)  # number of parameters
         
     | 
| 
       27 
     | 
    
         
            -
                    @parameter_values.each do |parameter_value|
         
     | 
| 
       28 
     | 
    
         
            -
                      stream.write_network_int32(parameter_value.length)  # parameter value (which is represented as a string) length
         
     | 
| 
       29 
     | 
    
         
            -
                      stream.write(parameter_value)               # parameter value written out in text representation
         
     | 
| 
       30 
     | 
    
         
            -
                    end
         
     | 
| 
       31 
     | 
    
         
            -
                    stream.write_network_int16(0)
         
     | 
| 
       32 
     | 
    
         
            -
                  end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,25 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class CancelRequest < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id nil
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(backend_pid, backend_key)
         
     | 
| 
       7 
     | 
    
         
            -
                    @backend_pid = backend_pid
         
     | 
| 
       8 
     | 
    
         
            -
                    @backend_key = backend_key
         
     | 
| 
       9 
     | 
    
         
            -
                  end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       12 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       13 
     | 
    
         
            -
                    size += 4
         
     | 
| 
       14 
     | 
    
         
            -
                    size += 4
         
     | 
| 
       15 
     | 
    
         
            -
                    size += 4
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       18 
     | 
    
         
            -
                    stream.write_network_int32(80877102)
         
     | 
| 
       19 
     | 
    
         
            -
                    stream.write_network_int32(@backend_pid)
         
     | 
| 
       20 
     | 
    
         
            -
                    stream.write_network_int32(@backend_key)
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
     | 
    
         
            -
              end
         
     | 
| 
       25 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,30 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Close < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?C
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(close_type, close_name)
         
     | 
| 
       7 
     | 
    
         
            -
                    if close_type == :portal
         
     | 
| 
       8 
     | 
    
         
            -
                      @close_type = ?P
         
     | 
| 
       9 
     | 
    
         
            -
                    elsif close_type == :prepared_statement
         
     | 
| 
       10 
     | 
    
         
            -
                      @close_type = ?S
         
     | 
| 
       11 
     | 
    
         
            -
                    else
         
     | 
| 
       12 
     | 
    
         
            -
                      raise ArgumentError.new("#{close_type} is not a valid close_type.  Must be either :portal or :prepared_statement.")
         
     | 
| 
       13 
     | 
    
         
            -
                    end
         
     | 
| 
       14 
     | 
    
         
            -
                    @close_name = close_name
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       18 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       19 
     | 
    
         
            -
                    size += 1
         
     | 
| 
       20 
     | 
    
         
            -
                    size += @close_name.length + 1
         
     | 
| 
       21 
     | 
    
         
            -
                    
         
     | 
| 
       22 
     | 
    
         
            -
                    stream.write_byte(message_id)
         
     | 
| 
       23 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       24 
     | 
    
         
            -
                    stream.write_byte(@close_type)
         
     | 
| 
       25 
     | 
    
         
            -
                    stream.write_cstring(@close_name)
         
     | 
| 
       26 
     | 
    
         
            -
                  end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                end
         
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,30 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Describe < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?D
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(describe_type, describe_name)
         
     | 
| 
       7 
     | 
    
         
            -
                    if describe_type == :portal
         
     | 
| 
       8 
     | 
    
         
            -
                      @describe_type = ?P
         
     | 
| 
       9 
     | 
    
         
            -
                    elsif describe_type == :prepared_statement
         
     | 
| 
       10 
     | 
    
         
            -
                      @describe_type = ?S
         
     | 
| 
       11 
     | 
    
         
            -
                    else
         
     | 
| 
       12 
     | 
    
         
            -
                      raise ArgumentError.new("#{describe_type} is not a valid describe_type.  Must be either :portal or :prepared_statement.")
         
     | 
| 
       13 
     | 
    
         
            -
                    end
         
     | 
| 
       14 
     | 
    
         
            -
                    @describe_name = describe_name
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       18 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       19 
     | 
    
         
            -
                    size += 1
         
     | 
| 
       20 
     | 
    
         
            -
                    size += @describe_name.length + 1
         
     | 
| 
       21 
     | 
    
         
            -
                    
         
     | 
| 
       22 
     | 
    
         
            -
                    stream.write_byte(message_id)
         
     | 
| 
       23 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       24 
     | 
    
         
            -
                    stream.write_byte(@describe_type)
         
     | 
| 
       25 
     | 
    
         
            -
                    stream.write_cstring(@describe_name)
         
     | 
| 
       26 
     | 
    
         
            -
                  end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                end
         
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,59 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class ErrorResponse < BackendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?E
         
     | 
| 
       5 
     | 
    
         
            -
                  
         
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(stream, size)
         
     | 
| 
       7 
     | 
    
         
            -
                    super
         
     | 
| 
       8 
     | 
    
         
            -
                    @errors = {}
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                    field_type = stream.read_byte
         
     | 
| 
       11 
     | 
    
         
            -
                    while field_type != 0
         
     | 
| 
       12 
     | 
    
         
            -
                      @errors[field_type] = stream.read_cstring
         
     | 
| 
       13 
     | 
    
         
            -
                      field_type = stream.read_byte
         
     | 
| 
       14 
     | 
    
         
            -
                    end
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  def error
         
     | 
| 
       18 
     | 
    
         
            -
                    s = []
         
     | 
| 
       19 
     | 
    
         
            -
                    @errors.each do |field_type, message|
         
     | 
| 
       20 
     | 
    
         
            -
                      s << [convert_field_type_to_string(field_type), message].flatten
         
     | 
| 
       21 
     | 
    
         
            -
                    end
         
     | 
| 
       22 
     | 
    
         
            -
                    s.sort_by { |e| e.first }.map { |e| "#{e[1]}: #{e[2]}" }.join(', ')
         
     | 
| 
       23 
     | 
    
         
            -
                  end
         
     | 
| 
       24 
     | 
    
         
            -
                  
         
     | 
| 
       25 
     | 
    
         
            -
                  protected
         
     | 
| 
       26 
     | 
    
         
            -
                  
         
     | 
| 
       27 
     | 
    
         
            -
                  def convert_field_type_to_string(field_type)
         
     | 
| 
       28 
     | 
    
         
            -
                    case field_type
         
     | 
| 
       29 
     | 
    
         
            -
                    when ?S
         
     | 
| 
       30 
     | 
    
         
            -
                      [1, "Severity"]
         
     | 
| 
       31 
     | 
    
         
            -
                    when ?C
         
     | 
| 
       32 
     | 
    
         
            -
                      [3, "Sqlstate"]
         
     | 
| 
       33 
     | 
    
         
            -
                    when ?M
         
     | 
| 
       34 
     | 
    
         
            -
                      [2, "Message"]
         
     | 
| 
       35 
     | 
    
         
            -
                    when ?D
         
     | 
| 
       36 
     | 
    
         
            -
                      [4, "Detail"]
         
     | 
| 
       37 
     | 
    
         
            -
                    when ?H
         
     | 
| 
       38 
     | 
    
         
            -
                      [5, "Hint"]
         
     | 
| 
       39 
     | 
    
         
            -
                    when ?P
         
     | 
| 
       40 
     | 
    
         
            -
                      [6, "Position"]
         
     | 
| 
       41 
     | 
    
         
            -
                    when ?p
         
     | 
| 
       42 
     | 
    
         
            -
                      [8, "Internal Position"]
         
     | 
| 
       43 
     | 
    
         
            -
                    when ?q
         
     | 
| 
       44 
     | 
    
         
            -
                      [0, "Internal Query"]
         
     | 
| 
       45 
     | 
    
         
            -
                    when ?W
         
     | 
| 
       46 
     | 
    
         
            -
                      [7, "Where"]
         
     | 
| 
       47 
     | 
    
         
            -
                    when ?F
         
     | 
| 
       48 
     | 
    
         
            -
                      [11, "File"]
         
     | 
| 
       49 
     | 
    
         
            -
                    when ?L
         
     | 
| 
       50 
     | 
    
         
            -
                      [12, "Line"]
         
     | 
| 
       51 
     | 
    
         
            -
                    when ?R
         
     | 
| 
       52 
     | 
    
         
            -
                      [10, "Routine"]
         
     | 
| 
       53 
     | 
    
         
            -
                    else
         
     | 
| 
       54 
     | 
    
         
            -
                      [13, field_type.to_s]
         
     | 
| 
       55 
     | 
    
         
            -
                    end
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
                end
         
     | 
| 
       58 
     | 
    
         
            -
              end
         
     | 
| 
       59 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,24 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Execute < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?E
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(portal_name, max_rows)
         
     | 
| 
       7 
     | 
    
         
            -
                    @portal_name = portal_name
         
     | 
| 
       8 
     | 
    
         
            -
                    @max_rows    = max_rows
         
     | 
| 
       9 
     | 
    
         
            -
                  end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       12 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       13 
     | 
    
         
            -
                    size += @portal_name.length + 1
         
     | 
| 
       14 
     | 
    
         
            -
                    size += 4
         
     | 
| 
       15 
     | 
    
         
            -
                    
         
     | 
| 
       16 
     | 
    
         
            -
                    stream.write_byte(message_id)
         
     | 
| 
       17 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       18 
     | 
    
         
            -
                    stream.write_cstring(@portal_name)
         
     | 
| 
       19 
     | 
    
         
            -
                    stream.write_network_int32(@max_rows)
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,21 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class NoticeResponse < BackendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?N
         
     | 
| 
       5 
     | 
    
         
            -
                  
         
     | 
| 
       6 
     | 
    
         
            -
                  attr_reader :notices
         
     | 
| 
       7 
     | 
    
         
            -
                  
         
     | 
| 
       8 
     | 
    
         
            -
                  def initialize(stream, size)
         
     | 
| 
       9 
     | 
    
         
            -
                    super
         
     | 
| 
       10 
     | 
    
         
            -
                    @notices = []
         
     | 
| 
       11 
     | 
    
         
            -
                    
         
     | 
| 
       12 
     | 
    
         
            -
                    field_type = stream.read_byte
         
     | 
| 
       13 
     | 
    
         
            -
                    while field_type != 0
         
     | 
| 
       14 
     | 
    
         
            -
                      @notices << [field_type, stream.read_cstring]
         
     | 
| 
       15 
     | 
    
         
            -
                      field_type = stream.read_byte
         
     | 
| 
       16 
     | 
    
         
            -
                    end
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                end
         
     | 
| 
       20 
     | 
    
         
            -
              end
         
     | 
| 
       21 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,31 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Parse < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?P
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(name, query, param_types)
         
     | 
| 
       7 
     | 
    
         
            -
                    @name         = name
         
     | 
| 
       8 
     | 
    
         
            -
                    @query        = query
         
     | 
| 
       9 
     | 
    
         
            -
                    @param_types  = param_types
         
     | 
| 
       10 
     | 
    
         
            -
                  end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       13 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       14 
     | 
    
         
            -
                    size += @name.length + 1
         
     | 
| 
       15 
     | 
    
         
            -
                    size += @query.length + 1
         
     | 
| 
       16 
     | 
    
         
            -
                    size += 2
         
     | 
| 
       17 
     | 
    
         
            -
                    size += (@param_types.length * 4)
         
     | 
| 
       18 
     | 
    
         
            -
                    
         
     | 
| 
       19 
     | 
    
         
            -
                    stream.write_byte(message_id)
         
     | 
| 
       20 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       21 
     | 
    
         
            -
                    stream.write_cstring(@name)
         
     | 
| 
       22 
     | 
    
         
            -
                    stream.write_cstring(@query)
         
     | 
| 
       23 
     | 
    
         
            -
                    stream.write_network_int16(@param_types.length)
         
     | 
| 
       24 
     | 
    
         
            -
                    @param_types.each do |param_type|
         
     | 
| 
       25 
     | 
    
         
            -
                      stream.write_network_int32(param_type)
         
     | 
| 
       26 
     | 
    
         
            -
                    end
         
     | 
| 
       27 
     | 
    
         
            -
                  end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                end
         
     | 
| 
       30 
     | 
    
         
            -
              end
         
     | 
| 
       31 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,33 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'digest/md5'
         
     | 
| 
       2 
     | 
    
         
            -
                      
         
     | 
| 
       3 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       4 
     | 
    
         
            -
              module Messages
         
     | 
| 
       5 
     | 
    
         
            -
                class Password < FrontendMessage
         
     | 
| 
       6 
     | 
    
         
            -
                  message_id ?p
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                  def initialize(password, authentication_method = Messages::Authentication::CLEARTEXT_PASSWORD, options = {})
         
     | 
| 
       9 
     | 
    
         
            -
                    case authentication_method
         
     | 
| 
       10 
     | 
    
         
            -
                    when Messages::Authentication::CLEARTEXT_PASSWORD
         
     | 
| 
       11 
     | 
    
         
            -
                      @password = password
         
     | 
| 
       12 
     | 
    
         
            -
                    when Messages::Authentication::CRYPT_PASSWORD
         
     | 
| 
       13 
     | 
    
         
            -
                      @password = password.crypt(options[:salt])
         
     | 
| 
       14 
     | 
    
         
            -
                    when Messages::Authentication::MD5_PASSWORD
         
     | 
| 
       15 
     | 
    
         
            -
                      @password = Digest::MD5.hexdigest(password + options[:user])
         
     | 
| 
       16 
     | 
    
         
            -
                      @password = Digest::MD5.hexdigest(m + options[:salt])
         
     | 
| 
       17 
     | 
    
         
            -
                      @password = 'md5' + @password
         
     | 
| 
       18 
     | 
    
         
            -
                    else
         
     | 
| 
       19 
     | 
    
         
            -
                      raise ArgumentError.new("unsupported authentication method: #{authentication_method}")
         
     | 
| 
       20 
     | 
    
         
            -
                    end
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       24 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       25 
     | 
    
         
            -
                    size += @password.length + 1
         
     | 
| 
       26 
     | 
    
         
            -
                    stream.write_byte(message_id)
         
     | 
| 
       27 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       28 
     | 
    
         
            -
                    stream.write_cstring(@password)
         
     | 
| 
       29 
     | 
    
         
            -
                  end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
              end
         
     | 
| 
       33 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Query < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id ?Q
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(query_string)
         
     | 
| 
       7 
     | 
    
         
            -
                    @query_string = query_string
         
     | 
| 
       8 
     | 
    
         
            -
                  end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       11 
     | 
    
         
            -
                    size = LENGTH_SIZE
         
     | 
| 
       12 
     | 
    
         
            -
                    size += @query_string.length + 1
         
     | 
| 
       13 
     | 
    
         
            -
                    stream.write_byte(message_id.bytes.first)
         
     | 
| 
       14 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       15 
     | 
    
         
            -
                    stream.write_cstring(@query_string)
         
     | 
| 
       16 
     | 
    
         
            -
                  end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,14 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class SslRequest < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id nil
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       7 
     | 
    
         
            -
                    size = LENGTH_SIZE + 4
         
     | 
| 
       8 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       9 
     | 
    
         
            -
                    stream.write_network_int32(80877103) # size
         
     | 
| 
       10 
     | 
    
         
            -
                  end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                end
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,38 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Vertica
         
     | 
| 
       2 
     | 
    
         
            -
              module Messages
         
     | 
| 
       3 
     | 
    
         
            -
                class Startup < FrontendMessage
         
     | 
| 
       4 
     | 
    
         
            -
                  message_id nil
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(user, database, options = nil)
         
     | 
| 
       7 
     | 
    
         
            -
                    @user     = user
         
     | 
| 
       8 
     | 
    
         
            -
                    @database = database
         
     | 
| 
       9 
     | 
    
         
            -
                    @options  = options
         
     | 
| 
       10 
     | 
    
         
            -
                  end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  def to_bytes(stream)
         
     | 
| 
       13 
     | 
    
         
            -
                    size = LENGTH_SIZE + 4 # length + protocol
         
     | 
| 
       14 
     | 
    
         
            -
                    size += @user.length     + 4 + 2 if @user
         
     | 
| 
       15 
     | 
    
         
            -
                    size += @database.length + 8 + 2 if @database
         
     | 
| 
       16 
     | 
    
         
            -
                    size += @options.length  + 7 + 2 if @options
         
     | 
| 
       17 
     | 
    
         
            -
                    size += 1 # ending zero
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                    stream.write_network_int32(size) # size
         
     | 
| 
       20 
     | 
    
         
            -
                    stream.write_network_int32(Vertica::PROTOCOL_VERSION) # proto version
         
     | 
| 
       21 
     | 
    
         
            -
                    if @user
         
     | 
| 
       22 
     | 
    
         
            -
                      stream.write_cstring('user')
         
     | 
| 
       23 
     | 
    
         
            -
                      stream.write_cstring(@user)
         
     | 
| 
       24 
     | 
    
         
            -
                    end
         
     | 
| 
       25 
     | 
    
         
            -
                    if @database
         
     | 
| 
       26 
     | 
    
         
            -
                      stream.write_cstring('database')
         
     | 
| 
       27 
     | 
    
         
            -
                      stream.write_cstring(@database)
         
     | 
| 
       28 
     | 
    
         
            -
                    end
         
     | 
| 
       29 
     | 
    
         
            -
                    if @options
         
     | 
| 
       30 
     | 
    
         
            -
                      stream.write_cstring('options')
         
     | 
| 
       31 
     | 
    
         
            -
                      stream.write_cstring(@options)
         
     | 
| 
       32 
     | 
    
         
            -
                    end
         
     | 
| 
       33 
     | 
    
         
            -
                    stream.write_byte(0)
         
     | 
| 
       34 
     | 
    
         
            -
                  end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
            end
         
     |