native-query 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +25 -0
- data/LICENSE.txt +20 -0
- data/README.md +462 -0
- data/Rakefile +31 -0
- data/VERSION +1 -0
- data/lib/native-query/join.rb +318 -0
- data/lib/native-query/model.rb +76 -0
- data/lib/native-query/query.rb +430 -0
- data/lib/native-query/result.rb +113 -0
- data/lib/native-query/row.rb +75 -0
- data/native-query.gemspec +60 -0
- metadata +113 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "native-query/row"
|
3
|
+
|
4
|
+
module NativeQuery
|
5
|
+
|
6
|
+
##
|
7
|
+
# Represents ORM query result.
|
8
|
+
#
|
9
|
+
|
10
|
+
class Result
|
11
|
+
|
12
|
+
##
|
13
|
+
# Brings query object.
|
14
|
+
#
|
15
|
+
|
16
|
+
@query
|
17
|
+
attr_reader :query
|
18
|
+
|
19
|
+
##
|
20
|
+
# Constructor.
|
21
|
+
#
|
22
|
+
|
23
|
+
def initialize(query)
|
24
|
+
@query = query
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Returns first field value of first record.
|
29
|
+
#
|
30
|
+
|
31
|
+
def single
|
32
|
+
@query.single
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Returns one result row.
|
37
|
+
#
|
38
|
+
|
39
|
+
def one
|
40
|
+
Row::new(@query.one)
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Iterates through result.
|
45
|
+
#
|
46
|
+
|
47
|
+
def each
|
48
|
+
@query.each do |row|
|
49
|
+
yield Row::new(row)
|
50
|
+
end
|
51
|
+
|
52
|
+
self.free!
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Returns all rows.
|
57
|
+
#
|
58
|
+
|
59
|
+
def all
|
60
|
+
self.map { |row| row }
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# Returns data in complex associative level.
|
65
|
+
#
|
66
|
+
# According to limitations of equivalent MP::Fluent
|
67
|
+
# method. Block is applied to all resultant rows.
|
68
|
+
#
|
69
|
+
|
70
|
+
def assoc(*args, &block)
|
71
|
+
@query.assoc(*args) do |row|
|
72
|
+
result = Row::new(row)
|
73
|
+
|
74
|
+
if block
|
75
|
+
result = block.call(result)
|
76
|
+
end
|
77
|
+
|
78
|
+
result # returns
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Returns count of the records.
|
84
|
+
#
|
85
|
+
|
86
|
+
def count
|
87
|
+
@query.count
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# Maps callback to array.
|
92
|
+
#
|
93
|
+
|
94
|
+
def map(&block)
|
95
|
+
result = [ ]
|
96
|
+
|
97
|
+
self.each do |item|
|
98
|
+
result << block.call(item)
|
99
|
+
end
|
100
|
+
|
101
|
+
return result
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# Frees result resources.
|
106
|
+
#
|
107
|
+
|
108
|
+
def free!
|
109
|
+
@query.free!
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module NativeQuery
|
4
|
+
|
5
|
+
##
|
6
|
+
# Represents one ORM row.
|
7
|
+
#
|
8
|
+
|
9
|
+
class Row
|
10
|
+
|
11
|
+
##
|
12
|
+
# Brings data.
|
13
|
+
#
|
14
|
+
|
15
|
+
@data
|
16
|
+
|
17
|
+
##
|
18
|
+
# Processed data cache.
|
19
|
+
#
|
20
|
+
|
21
|
+
@__data
|
22
|
+
|
23
|
+
##
|
24
|
+
# Constructor.
|
25
|
+
#
|
26
|
+
|
27
|
+
def initialize(data)
|
28
|
+
@data = data
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Maps unknown calls to data fields.
|
33
|
+
#
|
34
|
+
|
35
|
+
def method_missing(sym, *args, &block)
|
36
|
+
__data[sym]
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# Indicates, rows exists.
|
41
|
+
#
|
42
|
+
|
43
|
+
def any?
|
44
|
+
not __data.nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Returns data field.
|
49
|
+
#
|
50
|
+
|
51
|
+
private
|
52
|
+
def __data
|
53
|
+
if @__data.nil?
|
54
|
+
|
55
|
+
# Calls for data and converts string keys of hash
|
56
|
+
# to symbols.
|
57
|
+
|
58
|
+
data = @data
|
59
|
+
@__data = { }
|
60
|
+
|
61
|
+
if not data.nil?
|
62
|
+
@data = nil
|
63
|
+
data.each_pair do |k, v|
|
64
|
+
@__data[k.to_sym] = v
|
65
|
+
end
|
66
|
+
else
|
67
|
+
@__data = nil
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
return @__data
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{native-query}
|
8
|
+
s.version = "0.9.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = [%q{Martin Kozák}]
|
12
|
+
s.date = %q{2011-07-14}
|
13
|
+
s.email = %q{martinkozak@martinkozak.net}
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"LICENSE.txt",
|
16
|
+
"README.md"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
22
|
+
"LICENSE.txt",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/native-query/join.rb",
|
27
|
+
"lib/native-query/model.rb",
|
28
|
+
"lib/native-query/query.rb",
|
29
|
+
"lib/native-query/result.rb",
|
30
|
+
"lib/native-query/row.rb",
|
31
|
+
"native-query.gemspec"
|
32
|
+
]
|
33
|
+
s.homepage = %q{http://github.com/martinkozak/native-query}
|
34
|
+
s.licenses = [%q{MIT}]
|
35
|
+
s.require_paths = [%q{lib}]
|
36
|
+
s.rubygems_version = %q{1.8.5}
|
37
|
+
s.summary = %q{Cool way how to speak with database server. It's ellegant and very ruby SQL query helper which works by similar way as Arel or another ORM selecting logic. It's derived from Dibi database layer in its ideas, so is much more simple and (of sure) much more KISS, readable and straightforward.}
|
38
|
+
|
39
|
+
if s.respond_to? :specification_version then
|
40
|
+
s.specification_version = 3
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_runtime_dependency(%q<fluent-query>, [">= 0.9.0"])
|
44
|
+
s.add_runtime_dependency(%q<hash-utils>, [">= 0.18.0"])
|
45
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.13"])
|
46
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
|
47
|
+
else
|
48
|
+
s.add_dependency(%q<fluent-query>, [">= 0.9.0"])
|
49
|
+
s.add_dependency(%q<hash-utils>, [">= 0.18.0"])
|
50
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.13"])
|
51
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
52
|
+
end
|
53
|
+
else
|
54
|
+
s.add_dependency(%q<fluent-query>, [">= 0.9.0"])
|
55
|
+
s.add_dependency(%q<hash-utils>, [">= 0.18.0"])
|
56
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.13"])
|
57
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: native-query
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.9.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- "Martin Koz\xC3\xA1k"
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-07-14 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: fluent-query
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.9.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: hash-utils
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.18.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: bundler
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.0.13
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: jeweler
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.6.0
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *id004
|
59
|
+
description:
|
60
|
+
email: martinkozak@martinkozak.net
|
61
|
+
executables: []
|
62
|
+
|
63
|
+
extensions: []
|
64
|
+
|
65
|
+
extra_rdoc_files:
|
66
|
+
- LICENSE.txt
|
67
|
+
- README.md
|
68
|
+
files:
|
69
|
+
- .document
|
70
|
+
- Gemfile
|
71
|
+
- Gemfile.lock
|
72
|
+
- LICENSE.txt
|
73
|
+
- README.md
|
74
|
+
- Rakefile
|
75
|
+
- VERSION
|
76
|
+
- lib/native-query/join.rb
|
77
|
+
- lib/native-query/model.rb
|
78
|
+
- lib/native-query/query.rb
|
79
|
+
- lib/native-query/result.rb
|
80
|
+
- lib/native-query/row.rb
|
81
|
+
- native-query.gemspec
|
82
|
+
homepage: http://github.com/martinkozak/native-query
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
hash: 1037557380294456007
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
version: "0"
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: "0"
|
105
|
+
requirements: []
|
106
|
+
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 1.8.5
|
109
|
+
signing_key:
|
110
|
+
specification_version: 3
|
111
|
+
summary: Cool way how to speak with database server. It's ellegant and very ruby SQL query helper which works by similar way as Arel or another ORM selecting logic. It's derived from Dibi database layer in its ideas, so is much more simple and (of sure) much more KISS, readable and straightforward.
|
112
|
+
test_files: []
|
113
|
+
|