rsql 0.2.1 → 0.2.2
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.rdoc +9 -9
 - data/example.rsqlrc +5 -1
 - data/lib/rsql/eval_context.rb +34 -27
 - data/lib/rsql/mysql_results.rb +24 -1
 - data/lib/rsql.rb +1 -1
 - data/test/test_eval_context.rb +2 -2
 - metadata +4 -4
 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -14,13 +14,13 @@ to an intermediary host for access to the SQL server. 
     | 
|
| 
       14 
14 
     | 
    
         
             
              gem install rsql
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
            Alternatively, RSQL can be downloaded as a tar.gz or zip and run
         
     | 
| 
       17 
     | 
    
         
            -
            directly from within the unpacked source directory 
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            Net::SSH Ruby library is installed and available.
         
     | 
| 
      
 17 
     | 
    
         
            +
            directly from within the unpacked source directory as long as the
         
     | 
| 
      
 18 
     | 
    
         
            +
            MySQL Ruby library is available. SSH functionality will be disabled
         
     | 
| 
      
 19 
     | 
    
         
            +
            unless the Net::SSH Ruby library is also installed and available.
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            == USAGE
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            RSQL is invoked from the  
     | 
| 
      
 23 
     | 
    
         
            +
            RSQL is invoked from the command line using:
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
              rsql [<options>] <mysql_host> [<database>] [-e [<query>]]
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
         @@ -40,7 +40,7 @@ RSQL is invoked from the comamnd line using: 
     | 
|
| 
       40 
40 
     | 
    
         
             
              Override the maximum number of rows to process.
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
            -batch _field_separator_::
         
     | 
| 
       43 
     | 
    
         
            -
              Run in batch mode using the separator  
     | 
| 
      
 43 
     | 
    
         
            +
              Run in batch mode using the separator specified (e.g. a /t will
         
     | 
| 
       44 
44 
     | 
    
         
             
              separate fields with a tab character).
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
            -ssh _ssh_host_::
         
     | 
| 
         @@ -79,10 +79,10 @@ the colon and the at sign): 
     | 
|
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
            Connect as the "readonly" user to the "internal.database.acme.com"
         
     | 
| 
       81 
81 
     | 
    
         
             
            host's MySQL server after establishing a SSH tunnel to the
         
     | 
| 
       82 
     | 
    
         
            -
            "external.acme.com" gateway. In this case, we are  
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
            "external.acme.com" gateway. In this case, we are expecting that our
         
     | 
| 
      
 83 
     | 
    
         
            +
            SSH configuration is set up with the right user name. Because we did
         
     | 
| 
      
 84 
     | 
    
         
            +
            not provide a password for MySQL, one will be obtained directly from
         
     | 
| 
      
 85 
     | 
    
         
            +
            the console (without echoing the characters typed):
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
              rsql -ssh external.acme.com readonly@internal.database.acme.com
         
     | 
| 
       88 
88 
     | 
    
         | 
    
        data/example.rsqlrc
    CHANGED
    
    | 
         @@ -124,7 +124,7 @@ SELECT name, value FROM #{@rsql_table} WHERE #{val} <= value 
     | 
|
| 
       124 
124 
     | 
    
         
             
            # So the command in our history is the recipe and not the query. To
         
     | 
| 
       125 
125 
     | 
    
         
             
            # see the query the EvalContext has a recipe ready for us:
         
     | 
| 
       126 
126 
     | 
    
         
             
            #
         
     | 
| 
       127 
     | 
    
         
            -
            #   rsql> . 
     | 
| 
      
 127 
     | 
    
         
            +
            #   rsql> .history;
         
     | 
| 
       128 
128 
     | 
    
         
             
            #
         
     | 
| 
       129 
129 
     | 
    
         
             
            register :bad_query, %q{
         
     | 
| 
       130 
130 
     | 
    
         
             
            SELECT name, value FROM #{@rsql_table} WHERE valu < 10000
         
     | 
| 
         @@ -222,6 +222,10 @@ end 
     | 
|
| 
       222 
222 
     | 
    
         
             
            # serializes our object so that we may later decided to run some post
         
     | 
| 
       223 
223 
     | 
    
         
             
            # processing on the content.
         
     | 
| 
       224 
224 
     | 
    
         
             
            #
         
     | 
| 
      
 225 
     | 
    
         
            +
            # Inspect the YAML content written out:
         
     | 
| 
      
 226 
     | 
    
         
            +
            #
         
     | 
| 
      
 227 
     | 
    
         
            +
            #   rsql> .puts IO.read('myobj.yml');
         
     | 
| 
      
 228 
     | 
    
         
            +
            #
         
     | 
| 
       225 
229 
     | 
    
         
             
            register :save_values, :desc => 'Save results from a query into a file.' do |fn|
         
     | 
| 
       226 
230 
     | 
    
         
             
                myobj = {}
         
     | 
| 
       227 
231 
     | 
    
         
             
                @results.each_hash do |row|
         
     | 
    
        data/lib/rsql/eval_context.rb
    CHANGED
    
    | 
         @@ -37,7 +37,6 @@ module RSQL 
     | 
|
| 
       37 
37 
     | 
    
         
             
                        @verbose      = verbose
         
     | 
| 
       38 
38 
     | 
    
         
             
                        @hexstr_limit = HEXSTR_LIMIT
         
     | 
| 
       39 
39 
     | 
    
         
             
                        @results      = nil
         
     | 
| 
       40 
     | 
    
         
            -
                        @last_query   = nil
         
     | 
| 
       41 
40 
     | 
    
         | 
| 
       42 
41 
     | 
    
         
             
                        @loaded_fns         = []
         
     | 
| 
       43 
42 
     | 
    
         
             
                        @init_registrations = []
         
     | 
| 
         @@ -45,29 +44,29 @@ module RSQL 
     | 
|
| 
       45 
44 
     | 
    
         | 
| 
       46 
45 
     | 
    
         
             
                        @registrations = {
         
     | 
| 
       47 
46 
     | 
    
         
             
                            :version => Registration.new('version', [], {},
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
      
 47 
     | 
    
         
            +
                                method(:version),
         
     | 
| 
      
 48 
     | 
    
         
            +
                                'version',
         
     | 
| 
      
 49 
     | 
    
         
            +
                                'Version information about RSQL, the client, and the server.'),
         
     | 
| 
       51 
50 
     | 
    
         
             
                            :reload => Registration.new('reload', [], {},
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
                                method(:reload),
         
     | 
| 
      
 52 
     | 
    
         
            +
                                'reload',
         
     | 
| 
      
 53 
     | 
    
         
            +
                                'Reload the rsqlrc file.'),
         
     | 
| 
       55 
54 
     | 
    
         
             
                            :desc => Registration.new('desc', [], {},
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                            : 
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
                                method(:desc),
         
     | 
| 
      
 56 
     | 
    
         
            +
                                'desc',
         
     | 
| 
      
 57 
     | 
    
         
            +
                                'Describe the content of a recipe.'),
         
     | 
| 
      
 58 
     | 
    
         
            +
                            :history => Registration.new('history', [], {},
         
     | 
| 
      
 59 
     | 
    
         
            +
                                method(:history),
         
     | 
| 
      
 60 
     | 
    
         
            +
                                'history(cnt=1)',
         
     | 
| 
      
 61 
     | 
    
         
            +
                                'Print recent queries made (request a count or use :all for entire list).'),
         
     | 
| 
       63 
62 
     | 
    
         
             
                            :set_max_rows => Registration.new('set_max_rows', [], {},
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 63 
     | 
    
         
            +
                                Proc.new{|r| MySQLResults.max_rows = r},
         
     | 
| 
      
 64 
     | 
    
         
            +
                                'set_max_rows',
         
     | 
| 
      
 65 
     | 
    
         
            +
                                'Set the maximum number of rows to process.'),
         
     | 
| 
       67 
66 
     | 
    
         
             
                            :max_rows => Registration.new('max_rows', [], {},
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
      
 67 
     | 
    
         
            +
                                Proc.new{MySQLResults.max_rows},
         
     | 
| 
      
 68 
     | 
    
         
            +
                                'max_rows',
         
     | 
| 
      
 69 
     | 
    
         
            +
                                'Get the maximum number of rows to process.'),
         
     | 
| 
       71 
70 
     | 
    
         
             
                        }
         
     | 
| 
       72 
71 
     | 
    
         
             
                    end
         
     | 
| 
       73 
72 
     | 
    
         | 
| 
         @@ -176,8 +175,6 @@ module RSQL 
     | 
|
| 
       176 
175 
     | 
    
         
             
                            $stdout = orig_stdout if stdout
         
     | 
| 
       177 
176 
     | 
    
         
             
                        end
         
     | 
| 
       178 
177 
     | 
    
         | 
| 
       179 
     | 
    
         
            -
                        @last_query = value if String === value
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
178 
     | 
    
         
             
                        return value
         
     | 
| 
       182 
179 
     | 
    
         
             
                    end
         
     | 
| 
       183 
180 
     | 
    
         | 
| 
         @@ -264,7 +261,10 @@ module RSQL 
     | 
|
| 
       264 
261 
     | 
    
         
             
                            return nil
         
     | 
| 
       265 
262 
     | 
    
         
             
                        end
         
     | 
| 
       266 
263 
     | 
    
         | 
| 
       267 
     | 
    
         
            -
                         
     | 
| 
      
 264 
     | 
    
         
            +
                        # Attempt to locate the parameters of a given block by
         
     | 
| 
      
 265 
     | 
    
         
            +
                        # searching its source.
         
     | 
| 
      
 266 
     | 
    
         
            +
                        #
         
     | 
| 
      
 267 
     | 
    
         
            +
                        def params(name, block)
         
     | 
| 
       268 
268 
     | 
    
         
             
                            params = ''
         
     | 
| 
       269 
269 
     | 
    
         | 
| 
       270 
270 
     | 
    
         
             
                            if block.arity != 0 && block.arity != -1 &&
         
     | 
| 
         @@ -273,7 +273,7 @@ module RSQL 
     | 
|
| 
       273 
273 
     | 
    
         
             
                                lineno = $2.to_i
         
     | 
| 
       274 
274 
     | 
    
         | 
| 
       275 
275 
     | 
    
         
             
                                if fn == '(eval)'
         
     | 
| 
       276 
     | 
    
         
            -
                                    $stderr.puts  
     | 
| 
      
 276 
     | 
    
         
            +
                                    $stderr.puts "refusing to search an eval block for :#{name}"
         
     | 
| 
       277 
277 
     | 
    
         
             
                                    return params
         
     | 
| 
       278 
278 
     | 
    
         
             
                                end
         
     | 
| 
       279 
279 
     | 
    
         | 
| 
         @@ -288,7 +288,7 @@ module RSQL 
     | 
|
| 
       288 
288 
     | 
    
         
             
                                            # give up if no start found within 20
         
     | 
| 
       289 
289 
     | 
    
         
             
                                            # lines
         
     | 
| 
       290 
290 
     | 
    
         
             
                                            break if lineno + 20 < i
         
     | 
| 
       291 
     | 
    
         
            -
                                            if m = line.match(/(\{|do)(.*)$/)
         
     | 
| 
      
 291 
     | 
    
         
            +
                                            if m = line.match(/(\{|do\b)(.*)$/)
         
     | 
| 
       292 
292 
     | 
    
         
             
                                                # adjust line to be the remainder
         
     | 
| 
       293 
293 
     | 
    
         
             
                                                # after the start
         
     | 
| 
       294 
294 
     | 
    
         
             
                                                line = m[2]
         
     | 
| 
         @@ -308,7 +308,7 @@ module RSQL 
     | 
|
| 
       308 
308 
     | 
    
         
             
                                        # this block doesn't have params...even
         
     | 
| 
       309 
309 
     | 
    
         
             
                                        # though arity says it should
         
     | 
| 
       310 
310 
     | 
    
         
             
                                        next if line.match(/^\s*$/)
         
     | 
| 
       311 
     | 
    
         
            -
                                        $stderr.puts  
     | 
| 
      
 311 
     | 
    
         
            +
                                        $stderr.puts "unable to locate params for :#{name}"
         
     | 
| 
       312 
312 
     | 
    
         
             
                                        break
         
     | 
| 
       313 
313 
     | 
    
         
             
                                    end
         
     | 
| 
       314 
314 
     | 
    
         
             
                                end
         
     | 
| 
         @@ -401,6 +401,13 @@ module RSQL 
     | 
|
| 
       401 
401 
     | 
    
         
             
                            MySQLResults.query(content, self, *args)
         
     | 
| 
       402 
402 
     | 
    
         
             
                        end
         
     | 
| 
       403 
403 
     | 
    
         | 
| 
      
 404 
     | 
    
         
            +
                        def history(cnt=1)
         
     | 
| 
      
 405 
     | 
    
         
            +
                            if h = MySQLResults.history(cnt)
         
     | 
| 
      
 406 
     | 
    
         
            +
                                h.each{|q| puts '', q}
         
     | 
| 
      
 407 
     | 
    
         
            +
                            end
         
     | 
| 
      
 408 
     | 
    
         
            +
                            nil
         
     | 
| 
      
 409 
     | 
    
         
            +
                        end
         
     | 
| 
      
 410 
     | 
    
         
            +
             
     | 
| 
       404 
411 
     | 
    
         
             
                        # Exactly like register below except in addition to registering as
         
     | 
| 
       405 
412 
     | 
    
         
             
                        # a usable call for later, we will also use these as soon as we
         
     | 
| 
       406 
413 
     | 
    
         
             
                        # have a connection to MySQL.
         
     | 
| 
         @@ -438,7 +445,7 @@ module RSQL 
     | 
|
| 
       438 
445 
     | 
    
         
             
                                args = []
         
     | 
| 
       439 
446 
     | 
    
         
             
                            else
         
     | 
| 
       440 
447 
     | 
    
         
             
                                source = nil
         
     | 
| 
       441 
     | 
    
         
            -
                                usage << params(block)
         
     | 
| 
      
 448 
     | 
    
         
            +
                                usage << params(name, block)
         
     | 
| 
       442 
449 
     | 
    
         
             
                            end
         
     | 
| 
       443 
450 
     | 
    
         | 
| 
       444 
451 
     | 
    
         
             
                            @registrations[sym] = Registration.new(name, args, bangs, block, usage, desc, source)
         
     | 
    
        data/lib/rsql/mysql_results.rb
    CHANGED
    
    | 
         @@ -37,7 +37,9 @@ module RSQL 
     | 
|
| 
       37 
37 
     | 
    
         
             
                    @@field_separator = ' '
         
     | 
| 
       38 
38 
     | 
    
         
             
                    @@max_rows        = 1000
         
     | 
| 
       39 
39 
     | 
    
         
             
                    @@database_name   = nil
         
     | 
| 
       40 
     | 
    
         
            -
                    @@name_cache 
     | 
| 
      
 40 
     | 
    
         
            +
                    @@name_cache      = {}
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @@history         = []
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @@max_history     = 10
         
     | 
| 
       41 
43 
     | 
    
         | 
| 
       42 
44 
     | 
    
         
             
                    class MaxRowsException < RangeError
         
     | 
| 
       43 
45 
     | 
    
         
             
                        def initialize(rows, max)
         
     | 
| 
         @@ -89,6 +91,24 @@ module RSQL 
     | 
|
| 
       89 
91 
     | 
    
         
             
                        #
         
     | 
| 
       90 
92 
     | 
    
         
             
                        def database_name=(database); @@database_name = database; end
         
     | 
| 
       91 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                        # Get a list of the most recent query strings.
         
     | 
| 
      
 95 
     | 
    
         
            +
                        #
         
     | 
| 
      
 96 
     | 
    
         
            +
                        def history(cnt=:all)
         
     | 
| 
      
 97 
     | 
    
         
            +
                            if Integer === cnt 
         
     | 
| 
      
 98 
     | 
    
         
            +
                                @@history[-cnt,cnt]
         
     | 
| 
      
 99 
     | 
    
         
            +
                            else
         
     | 
| 
      
 100 
     | 
    
         
            +
                                @@history
         
     | 
| 
      
 101 
     | 
    
         
            +
                            end
         
     | 
| 
      
 102 
     | 
    
         
            +
                        end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                        # Get the maximum number of historical entries to retain.
         
     | 
| 
      
 105 
     | 
    
         
            +
                        #
         
     | 
| 
      
 106 
     | 
    
         
            +
                        def get_max_history; @@max_history; end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                        # Set the maximum number of historical entries to retain.
         
     | 
| 
      
 109 
     | 
    
         
            +
                        #
         
     | 
| 
      
 110 
     | 
    
         
            +
                        def set_max_history=(count); @@max_history = count; end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
       92 
112 
     | 
    
         
             
                        # Get the list of databases available.
         
     | 
| 
       93 
113 
     | 
    
         
             
                        #
         
     | 
| 
       94 
114 
     | 
    
         
             
                        def databases
         
     | 
| 
         @@ -163,6 +183,9 @@ module RSQL 
     | 
|
| 
       163 
183 
     | 
    
         
             
                        # Get results from a query.
         
     | 
| 
       164 
184 
     | 
    
         
             
                        #
         
     | 
| 
       165 
185 
     | 
    
         
             
                        def query(sql, eval_context, raw=false, max_rows=@@max_rows)
         
     | 
| 
      
 186 
     | 
    
         
            +
                            @@history.shift if @@max_history <= @@history.size 
         
     | 
| 
      
 187 
     | 
    
         
            +
                            @@history << sql
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
       166 
189 
     | 
    
         
             
                            start   = Time.now.to_f
         
     | 
| 
       167 
190 
     | 
    
         
             
                            results = @@conn.query(sql)
         
     | 
| 
       168 
191 
     | 
    
         
             
                            elapsed = Time.now.to_f - start.to_f
         
     | 
    
        data/lib/rsql.rb
    CHANGED
    
    
    
        data/test/test_eval_context.rb
    CHANGED
    
    | 
         @@ -65,9 +65,9 @@ class TestEvalContext < Test::Unit::TestCase 
     | 
|
| 
       65 
65 
     | 
    
         
             
                end
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
                def test_params
         
     | 
| 
       68 
     | 
    
         
            -
                    val = @ctx.safe_eval('params(@registrations[:fill_table].block)', nil, nil)
         
     | 
| 
      
 68 
     | 
    
         
            +
                    val = @ctx.safe_eval('params("ft", @registrations[:fill_table].block)', nil, nil)
         
     | 
| 
       69 
69 
     | 
    
         
             
                    assert_equal('', val)
         
     | 
| 
       70 
     | 
    
         
            -
                    val = @ctx.safe_eval('params(@registrations[:save_values].block)', nil, nil)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    val = @ctx.safe_eval('params("sv", @registrations[:save_values].block)', nil, nil)
         
     | 
| 
       71 
71 
     | 
    
         
             
                    assert_equal('(fn)', val)
         
     | 
| 
       72 
72 
     | 
    
         
             
                end
         
     | 
| 
       73 
73 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rsql
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 19
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 2
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 2
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.2.2
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Brad Robel-Forrest
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2011-09- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-09-25 00:00:00 Z
         
     | 
| 
       19 
19 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
21 
     | 
    
         
             
              name: net-ssh
         
     |