ronin-sql 0.1.1 → 0.2.0
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/History.txt +43 -0
- data/Manifest.txt +76 -23
- data/README.txt +31 -6
- data/Rakefile +2 -2
- data/lib/ronin/code/sql/{keyword.rb → add_column_clause.rb} +9 -13
- data/lib/ronin/code/sql/as.rb +47 -0
- data/lib/ronin/code/sql/asc.rb +38 -0
- data/lib/ronin/code/sql/between.rb +18 -12
- data/lib/ronin/code/sql/binary_expr.rb +12 -5
- data/lib/ronin/code/sql/clause.rb +37 -0
- data/lib/ronin/code/sql/code.rb +1 -1
- data/lib/ronin/code/sql/common_dialect.rb +16 -10
- data/lib/ronin/code/sql/create.rb +68 -0
- data/lib/ronin/code/sql/create_index.rb +9 -39
- data/lib/ronin/code/sql/create_table.rb +9 -56
- data/lib/ronin/code/sql/create_view.rb +7 -29
- data/lib/ronin/code/sql/default_values_clause.rb +38 -0
- data/lib/ronin/code/sql/delete.rb +10 -25
- data/lib/ronin/code/sql/desc.rb +38 -0
- data/lib/ronin/code/sql/dialect.rb +172 -52
- data/lib/ronin/code/sql/{builder.rb → drop.rb} +16 -20
- data/lib/ronin/code/sql/drop_index.rb +43 -0
- data/lib/ronin/code/sql/drop_table.rb +8 -16
- data/lib/ronin/code/sql/drop_view.rb +43 -0
- data/lib/ronin/code/sql/emittable.rb +102 -0
- data/lib/ronin/code/sql/exceptions/unknown_clause.rb +31 -0
- data/lib/ronin/code/sql/exceptions/unknown_dialect.rb +2 -2
- data/lib/ronin/code/sql/exceptions/unknown_statement.rb +31 -0
- data/lib/ronin/code/sql/exceptions.rb +3 -1
- data/lib/ronin/code/sql/expr.rb +7 -96
- data/lib/ronin/code/sql/field.rb +40 -23
- data/lib/ronin/code/sql/fields_clause.rb +48 -0
- data/lib/ronin/code/sql/from_clause.rb +44 -0
- data/lib/ronin/code/sql/function.rb +15 -12
- data/lib/ronin/code/sql/group_by_clause.rb +48 -0
- data/lib/ronin/code/sql/having_clause.rb +48 -0
- data/lib/ronin/code/sql/in.rb +9 -9
- data/lib/ronin/code/sql/injected_statement.rb +102 -0
- data/lib/ronin/code/sql/injection.rb +171 -5
- data/lib/ronin/code/sql/insert.rb +15 -45
- data/lib/ronin/code/sql/intersect_clause.rb +44 -0
- data/lib/ronin/code/sql/join_clause.rb +125 -0
- data/lib/ronin/code/sql/{like_expr.rb → like.rb} +19 -31
- data/lib/ronin/code/sql/limit_clause.rb +44 -0
- data/lib/ronin/code/sql/modifier.rb +50 -0
- data/lib/ronin/code/sql/offset_clause.rb +44 -0
- data/lib/ronin/code/sql/on_clause.rb +57 -0
- data/lib/ronin/code/sql/order_by_clause.rb +44 -0
- data/lib/ronin/code/sql/program.rb +170 -23
- data/lib/ronin/code/sql/rename_to_clause.rb +44 -0
- data/lib/ronin/code/sql/replace.rb +15 -17
- data/lib/ronin/code/sql/select.rb +46 -141
- data/lib/ronin/code/sql/set_clause.rb +44 -0
- data/lib/ronin/code/sql/statement.rb +117 -47
- data/lib/ronin/code/sql/token.rb +64 -0
- data/lib/ronin/code/sql/unary_expr.rb +9 -5
- data/lib/ronin/code/sql/union_all_clause.rb +44 -0
- data/lib/ronin/code/sql/union_clause.rb +44 -0
- data/lib/ronin/code/sql/update.rb +10 -31
- data/lib/ronin/code/sql/values_clause.rb +48 -0
- data/lib/ronin/code/sql/where_clause.rb +44 -0
- data/lib/ronin/code/sql.rb +1 -1
- data/lib/ronin/sql/error/error.rb +64 -0
- data/lib/ronin/sql/error/message.rb +64 -0
- data/lib/ronin/sql/error/pattern.rb +106 -0
- data/lib/ronin/sql/error/patterns.rb +100 -0
- data/lib/ronin/sql/error.rb +5 -30
- data/lib/ronin/sql/extensions/uri/http.rb +76 -21
- data/lib/ronin/sql/extensions/uri.rb +1 -1
- data/lib/ronin/sql/extensions.rb +2 -1
- data/lib/ronin/sql/injection.rb +213 -0
- data/lib/ronin/sql/version.rb +2 -2
- data/lib/ronin/sql.rb +7 -2
- data/spec/code/sql/create_examples.rb +19 -0
- data/spec/code/sql/create_index_spec.rb +25 -0
- data/spec/code/sql/create_table_spec.rb +27 -0
- data/spec/code/sql/create_view_spec.rb +16 -0
- data/spec/code/sql/delete_spec.rb +14 -0
- data/spec/code/sql/drop_examples.rb +10 -0
- data/spec/code/sql/drop_index_spec.rb +16 -0
- data/spec/code/sql/drop_table_spec.rb +16 -0
- data/spec/code/sql/drop_view_spec.rb +16 -0
- data/spec/code/sql/has_default_values_clause_examples.rb +10 -0
- data/spec/code/sql/has_fields_clause_examples.rb +15 -0
- data/spec/code/sql/has_from_clause_examples.rb +13 -0
- data/spec/code/sql/has_values_clause_examples.rb +15 -0
- data/spec/code/sql/has_where_clause_examples.rb +15 -0
- data/spec/code/sql/insert_spec.rb +21 -0
- data/spec/code/sql/replace_spec.rb +21 -0
- data/spec/code/sql/select_spec.rb +105 -0
- data/spec/code/sql/update_spec.rb +26 -0
- data/spec/helpers/code.rb +14 -0
- data/spec/sql/error_spec.rb +24 -0
- data/spec/sql/extensions/string_spec.rb +28 -0
- data/spec/sql_spec.rb +9 -0
- data/tasks/spec.rb +2 -0
- metadata +82 -29
- data/lib/ronin/code/sql/injection_builder.rb +0 -137
- data/lib/ronin/code/sql/injection_style.rb +0 -79
- data/lib/ronin/code/sql/style.rb +0 -170
- data/lib/ronin/sql/sql.rb +0 -83
@@ -3,7 +3,7 @@
|
|
3
3
|
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
4
|
# tasks.
|
5
5
|
#
|
6
|
-
# Copyright (c) 2007-
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
7
|
#
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
9
9
|
# it under the terms of the GNU General Public License as published by
|
@@ -22,37 +22,33 @@
|
|
22
22
|
#
|
23
23
|
|
24
24
|
require 'ronin/code/sql/statement'
|
25
|
-
require 'ronin/code/sql/dialect'
|
26
|
-
require 'ronin/code/sql/common_dialect'
|
27
|
-
require 'ronin/code/sql/style'
|
28
25
|
|
29
26
|
module Ronin
|
30
27
|
module Code
|
31
28
|
module SQL
|
32
|
-
class
|
29
|
+
class Drop < Statement
|
33
30
|
|
34
|
-
def initialize(
|
35
|
-
@
|
31
|
+
def initialize(dialect,type,name=nil,options={},&block)
|
32
|
+
@type = type
|
33
|
+
@name = name
|
34
|
+
@if_exists = options[:if_exists]
|
36
35
|
|
37
|
-
super(
|
36
|
+
super(dialect,&block)
|
38
37
|
end
|
39
38
|
|
40
|
-
def
|
41
|
-
@
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
|
46
|
-
def command(cmd)
|
47
|
-
@commands << cmd
|
39
|
+
def if_exists
|
40
|
+
@if_exists = true
|
48
41
|
return self
|
49
42
|
end
|
50
43
|
|
51
|
-
def
|
52
|
-
|
44
|
+
def emit
|
45
|
+
tokens = emit_token('DROP')
|
46
|
+
tokens += emit_token(@type)
|
47
|
+
|
48
|
+
tokens += emit_token('IF EXISTS') if @if_exists
|
49
|
+
tokens += emit_value(@name)
|
53
50
|
|
54
|
-
|
55
|
-
return result
|
51
|
+
return tokens
|
56
52
|
end
|
57
53
|
|
58
54
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
|
+
# tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/code/sql/drop'
|
25
|
+
|
26
|
+
module Ronin
|
27
|
+
module Code
|
28
|
+
module SQL
|
29
|
+
class DropIndex < Drop
|
30
|
+
|
31
|
+
def initialize(dialect,index=nil,options={},&block)
|
32
|
+
super(dialect,'INDEX',index,options,&block)
|
33
|
+
end
|
34
|
+
|
35
|
+
def index(name)
|
36
|
+
@name = name
|
37
|
+
return self
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
4
|
# tasks.
|
5
5
|
#
|
6
|
-
# Copyright (c) 2007-
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
7
|
#
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
9
9
|
# it under the terms of the GNU General Public License as published by
|
@@ -21,30 +21,22 @@
|
|
21
21
|
#++
|
22
22
|
#
|
23
23
|
|
24
|
-
require 'ronin/code/sql/
|
24
|
+
require 'ronin/code/sql/drop'
|
25
25
|
|
26
26
|
module Ronin
|
27
27
|
module Code
|
28
28
|
module SQL
|
29
|
-
class DropTable <
|
29
|
+
class DropTable < Drop
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
def initialize(style,table=nil,&block)
|
34
|
-
@table = table
|
35
|
-
@exists = false
|
36
|
-
|
37
|
-
super(style,&block)
|
31
|
+
def initialize(dialect,table=nil,options={},&block)
|
32
|
+
super(dialect,'TABLE',table,options,&block)
|
38
33
|
end
|
39
34
|
|
40
|
-
def
|
41
|
-
|
35
|
+
def table(name)
|
36
|
+
@name = name
|
37
|
+
return self
|
42
38
|
end
|
43
39
|
|
44
|
-
protected
|
45
|
-
|
46
|
-
keyword :drop, 'DROP TABLE'
|
47
|
-
|
48
40
|
end
|
49
41
|
end
|
50
42
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
|
+
# tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/code/sql/drop'
|
25
|
+
|
26
|
+
module Ronin
|
27
|
+
module Code
|
28
|
+
module SQL
|
29
|
+
class DropView < Drop
|
30
|
+
|
31
|
+
def initialize(dialect,view=nil,options={},&block)
|
32
|
+
super(dialect,'VIEW',view,options,&block)
|
33
|
+
end
|
34
|
+
|
35
|
+
def view(name)
|
36
|
+
@name = name
|
37
|
+
return self
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
|
+
# tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/code/emittable'
|
25
|
+
|
26
|
+
module Ronin
|
27
|
+
module Code
|
28
|
+
module SQL
|
29
|
+
module Emittable
|
30
|
+
include Code::Emittable
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def emit_token(value)
|
35
|
+
value.to_s.split(/\s/).map { |word| Token.new(word) }
|
36
|
+
end
|
37
|
+
|
38
|
+
def emit_value(value)
|
39
|
+
if value.kind_of?(Statement)
|
40
|
+
tokens = []
|
41
|
+
|
42
|
+
tokens << Token.open_paren
|
43
|
+
tokens += value.emit
|
44
|
+
tokens << Token.close_paren
|
45
|
+
|
46
|
+
return tokens
|
47
|
+
else
|
48
|
+
return super(value)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def emit_values(values)
|
53
|
+
tokens = []
|
54
|
+
|
55
|
+
values.each { |value| tokens += emit_value(value) }
|
56
|
+
|
57
|
+
return tokens
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Emits the comma separated list of the specified _values_.
|
62
|
+
#
|
63
|
+
def emit_list(values)
|
64
|
+
tokens = []
|
65
|
+
|
66
|
+
(values.length - 1).times do |index|
|
67
|
+
tokens << emit_value(values[index])
|
68
|
+
tokens << Token.new(',')
|
69
|
+
end
|
70
|
+
|
71
|
+
tokens << emit_value(values.last)
|
72
|
+
return tokens
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# Emits the specified SQL _row_.
|
77
|
+
#
|
78
|
+
def emit_row(row)
|
79
|
+
case row.length
|
80
|
+
when 0
|
81
|
+
return []
|
82
|
+
when 1
|
83
|
+
return emit_list(row)
|
84
|
+
else
|
85
|
+
return [Token.new('(')] + emit_list(row) + [Token.new(')')]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Emits the specified _statement_.
|
91
|
+
#
|
92
|
+
def emit_statement(statement)
|
93
|
+
if statement.kind_of?(Statement)
|
94
|
+
return statement.emit
|
95
|
+
else
|
96
|
+
return statement
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
|
+
# tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module Code
|
26
|
+
module SQL
|
27
|
+
class UnknownClause < RuntimeError
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
4
|
# tasks.
|
5
5
|
#
|
6
|
-
# Copyright (c) 2007-
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
7
|
#
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
9
9
|
# it under the terms of the GNU General Public License as published by
|
@@ -24,7 +24,7 @@
|
|
24
24
|
module Ronin
|
25
25
|
module Code
|
26
26
|
module SQL
|
27
|
-
class
|
27
|
+
class UnknownDialect < RuntimeError
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
|
+
# tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module Code
|
26
|
+
module SQL
|
27
|
+
class UnknownStatement < RuntimeError
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
4
|
# tasks.
|
5
5
|
#
|
6
|
-
# Copyright (c) 2007-
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
7
|
#
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
9
9
|
# it under the terms of the GNU General Public License as published by
|
@@ -22,3 +22,5 @@
|
|
22
22
|
#
|
23
23
|
|
24
24
|
require 'ronin/code/sql/exceptions/unknown_dialect'
|
25
|
+
require 'ronin/code/sql/exceptions/unknown_statement'
|
26
|
+
require 'ronin/code/sql/exceptions/unknown_clause'
|
data/lib/ronin/code/sql/expr.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
4
|
# tasks.
|
5
5
|
#
|
6
|
-
# Copyright (c) 2007-
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
7
|
#
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
9
9
|
# it under the terms of the GNU General Public License as published by
|
@@ -21,7 +21,7 @@
|
|
21
21
|
#++
|
22
22
|
#
|
23
23
|
|
24
|
-
require 'ronin/code/sql/
|
24
|
+
require 'ronin/code/sql/emittable'
|
25
25
|
require 'ronin/extensions/meta'
|
26
26
|
|
27
27
|
module Ronin
|
@@ -29,15 +29,10 @@ module Ronin
|
|
29
29
|
module SQL
|
30
30
|
class Expr
|
31
31
|
|
32
|
-
|
33
|
-
attr_reader :style
|
34
|
-
|
35
|
-
def initialize(style)
|
36
|
-
@style = style
|
37
|
-
end
|
32
|
+
include Emittable
|
38
33
|
|
39
34
|
def in?(*range)
|
40
|
-
In.new(
|
35
|
+
In.new(self,*range)
|
41
36
|
end
|
42
37
|
|
43
38
|
def ===(*range)
|
@@ -48,38 +43,12 @@ module Ronin
|
|
48
43
|
in?(*range).not!
|
49
44
|
end
|
50
45
|
|
51
|
-
def compile
|
52
|
-
# place holder
|
53
|
-
end
|
54
|
-
|
55
|
-
def to_s
|
56
|
-
compile
|
57
|
-
end
|
58
|
-
|
59
46
|
protected
|
60
47
|
|
61
|
-
def keyword(value)
|
62
|
-
keyword_cache[value.to_sym]
|
63
|
-
end
|
64
|
-
|
65
|
-
def keywords(*values)
|
66
|
-
values.map { |value| keyword(value) }
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.keyword(name,value=name.to_s.upcase)
|
70
|
-
name = name.to_s.downcase
|
71
|
-
|
72
|
-
class_def("keyword_#{name}") do
|
73
|
-
keyword(value)
|
74
|
-
end
|
75
|
-
|
76
|
-
return self
|
77
|
-
end
|
78
|
-
|
79
48
|
def self.binary_op(op,*names)
|
80
49
|
names.each do |name|
|
81
50
|
class_def(name) do |expr|
|
82
|
-
BinaryExpr.new(
|
51
|
+
BinaryExpr.new(op,self,expr)
|
83
52
|
end
|
84
53
|
end
|
85
54
|
|
@@ -104,7 +73,7 @@ module Ronin
|
|
104
73
|
def self.like_op(op,*names)
|
105
74
|
names.each do |name|
|
106
75
|
class_def(name) do |expr,escape|
|
107
|
-
|
76
|
+
Like.new(op,self,expr,escape)
|
108
77
|
end
|
109
78
|
end
|
110
79
|
|
@@ -119,7 +88,7 @@ module Ronin
|
|
119
88
|
def self.unary_op(op,*names)
|
120
89
|
names.each do |name|
|
121
90
|
class_def(name) do
|
122
|
-
UnaryExpr.new(
|
91
|
+
UnaryExpr.new(op,self)
|
123
92
|
end
|
124
93
|
end
|
125
94
|
|
@@ -129,64 +98,6 @@ module Ronin
|
|
129
98
|
unary_op 'NOT', :not!
|
130
99
|
unary_op 'EXISTS', :exists?
|
131
100
|
|
132
|
-
def compile_space
|
133
|
-
@style.compile_space
|
134
|
-
end
|
135
|
-
|
136
|
-
def preappend_space(str)
|
137
|
-
@style.preappend_space(str)
|
138
|
-
end
|
139
|
-
|
140
|
-
def append_space(str)
|
141
|
-
@style.append_space(str)
|
142
|
-
end
|
143
|
-
|
144
|
-
def space(*str)
|
145
|
-
@style.space(*str)
|
146
|
-
end
|
147
|
-
|
148
|
-
def compile_newline
|
149
|
-
@style.compile_newline
|
150
|
-
end
|
151
|
-
|
152
|
-
def quote_string(data)
|
153
|
-
@style.quote_string(data)
|
154
|
-
end
|
155
|
-
|
156
|
-
def compile_keyword(name)
|
157
|
-
@style.compile_keyword(name)
|
158
|
-
end
|
159
|
-
|
160
|
-
def compile_list(*expr)
|
161
|
-
@style.compile_list(*expr)
|
162
|
-
end
|
163
|
-
|
164
|
-
def compile_datalist(*expr)
|
165
|
-
@style.compile_list(*expr)
|
166
|
-
end
|
167
|
-
|
168
|
-
def compile_row(*expr)
|
169
|
-
@style.compile_row(*expr)
|
170
|
-
end
|
171
|
-
|
172
|
-
def compile_data(data)
|
173
|
-
@style.compile_data(data)
|
174
|
-
end
|
175
|
-
|
176
|
-
def compile_expr(*expr)
|
177
|
-
@style.compile_expr(*expr)
|
178
|
-
end
|
179
|
-
|
180
|
-
def compile_statements(*statements)
|
181
|
-
@style.compile_statements(*statements)
|
182
|
-
end
|
183
|
-
|
184
|
-
private
|
185
|
-
|
186
|
-
def keyword_cache
|
187
|
-
@keyword_cache ||= Hash.new { |hash,key| hash[key] = Keyword.new(@style,key) }
|
188
|
-
end
|
189
|
-
|
190
101
|
end
|
191
102
|
end
|
192
103
|
end
|
data/lib/ronin/code/sql/field.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Ronin SQL - A Ronin library providing support for SQL related security
|
4
4
|
# tasks.
|
5
5
|
#
|
6
|
-
# Copyright (c) 2007-
|
6
|
+
# Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
7
|
#
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
9
9
|
# it under the terms of the GNU General Public License as published by
|
@@ -22,26 +22,41 @@
|
|
22
22
|
#
|
23
23
|
|
24
24
|
require 'ronin/code/sql/expr'
|
25
|
+
require 'ronin/code/sql/as'
|
25
26
|
require 'ronin/code/sql/between'
|
27
|
+
require 'ronin/code/sql/asc'
|
28
|
+
require 'ronin/code/sql/desc'
|
26
29
|
|
27
30
|
module Ronin
|
28
31
|
module Code
|
29
32
|
module SQL
|
30
33
|
class Field < Expr
|
31
34
|
|
32
|
-
def initialize(
|
33
|
-
|
34
|
-
|
35
|
+
def initialize(symbols,name,prefix=nil)
|
36
|
+
@symbols = symbols
|
35
37
|
@prefix = prefix
|
36
38
|
@name = name
|
37
39
|
end
|
38
40
|
|
39
|
-
def
|
40
|
-
|
41
|
+
def field(name)
|
42
|
+
sym = @symbols.symbol("#{path}.#{name}")
|
43
|
+
sym.value ||= Field.new(@symbols,name,self)
|
44
|
+
|
45
|
+
return sym
|
41
46
|
end
|
42
47
|
|
48
|
+
def all
|
49
|
+
field('*')
|
50
|
+
end
|
51
|
+
|
52
|
+
alias * all
|
53
|
+
|
43
54
|
def id
|
44
|
-
|
55
|
+
field('id')
|
56
|
+
end
|
57
|
+
|
58
|
+
def as(name)
|
59
|
+
As.new(self,name)
|
45
60
|
end
|
46
61
|
|
47
62
|
def between(start,stop)
|
@@ -52,32 +67,34 @@ module Ronin
|
|
52
67
|
between(range.begin,range.end)
|
53
68
|
end
|
54
69
|
|
55
|
-
def
|
56
|
-
|
57
|
-
return "#{@prefix}.#{@name}"
|
58
|
-
else
|
59
|
-
return @name.to_s
|
60
|
-
end
|
70
|
+
def asc
|
71
|
+
Asc.new(self)
|
61
72
|
end
|
62
73
|
|
63
|
-
def
|
64
|
-
|
74
|
+
def desc
|
75
|
+
Desc.new(self)
|
76
|
+
end
|
77
|
+
|
78
|
+
def emit
|
79
|
+
[path.to_sym]
|
65
80
|
end
|
66
81
|
|
67
82
|
protected
|
68
83
|
|
69
|
-
def
|
70
|
-
if
|
71
|
-
return
|
84
|
+
def path
|
85
|
+
if @prefix
|
86
|
+
return "#{@prefix}.#{@name}"
|
87
|
+
else
|
88
|
+
return "#{@name}"
|
72
89
|
end
|
73
|
-
|
74
|
-
raise(NoMethodError,sym.id2name)
|
75
90
|
end
|
76
91
|
|
77
|
-
|
92
|
+
def method_missing(name,*arguments,&block)
|
93
|
+
if (arguments.empty? && @prefix.nil? && block.nil?)
|
94
|
+
return field(name)
|
95
|
+
end
|
78
96
|
|
79
|
-
|
80
|
-
@field_cache ||= Hash.new { |hash,key| hash[key] = Field.new(@style,key,self) }
|
97
|
+
raise(NoMethodError,sym.id2name)
|
81
98
|
end
|
82
99
|
|
83
100
|
end
|