hyperion-sql 0.1.3 → 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.
@@ -66,12 +66,16 @@ module Hyperion
66
66
  end
67
67
 
68
68
  def pack_key(kind, key)
69
- table, id = Key.decompose_key(key)
70
- id
69
+ if key
70
+ table, id = Key.decompose_key(key)
71
+ id
72
+ end
71
73
  end
72
74
 
73
75
  def unpack_key(kind, key)
74
- Key.compose_key(kind, key)
76
+ if key
77
+ Key.compose_key(kind, key)
78
+ end
75
79
  end
76
80
 
77
81
  private
@@ -80,21 +80,33 @@ module Hyperion
80
80
  filter_sql = []
81
81
  filter_values = []
82
82
  filters.each do |filter|
83
- filter_sql << "#{format_column(filter.field)} #{format_operator(filter.operator)} ?"
84
- filter_values << filter.value
83
+ apply_filter(filter, filter_sql, filter_values)
85
84
  end
86
85
  sql_query.append("WHERE #{filter_sql.join(' AND ')}", filter_values)
87
86
  end
88
87
  end
89
88
 
90
- def format_operator(operator)
91
- case operator
92
- when 'contains?'
93
- "IN"
94
- when '!='
95
- "<>"
89
+ def apply_filter(filter, filter_sql, filter_values)
90
+ column = format_column(filter.field)
91
+ if filter.operator == '!='
92
+ if filter.value.nil?
93
+ filter_sql << "#{column} IS NOT NULL"
94
+ else
95
+ filter_sql << "(#{column} != ? OR #{column} IS NULL)"
96
+ filter_values << filter.value
97
+ end
98
+ elsif filter.operator == 'contains?'
99
+ if filter.value.include?(nil)
100
+ filter_sql << "(#{column} IN ? OR #{column} IS NULL)"
101
+ else
102
+ filter_sql << "#{column} IN ?"
103
+ end
104
+ filter_values << filter.value
105
+ elsif filter.operator == '=' && filter.value.nil?
106
+ filter_sql << "#{column} IS NULL"
96
107
  else
97
- operator
108
+ filter_sql << "#{column} #{filter.operator} ?"
109
+ filter_values << filter.value
98
110
  end
99
111
  end
100
112
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperion-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-01 00:00:00.000000000 Z
12
+ date: 2012-12-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - '='
36
36
  - !ruby/object:Gem::Version
37
- version: 0.1.3
37
+ version: 0.2.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,23 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - '='
44
44
  - !ruby/object:Gem::Version
45
- version: 0.1.3
46
- - !ruby/object:Gem::Dependency
47
- name: uuidtools
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - '='
52
- - !ruby/object:Gem::Version
53
- version: 2.1.3
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 2.1.3
45
+ version: 0.2.0
62
46
  - !ruby/object:Gem::Dependency
63
47
  name: do_sqlite3
64
48
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +50,7 @@ dependencies:
66
50
  requirements:
67
51
  - - '='
68
52
  - !ruby/object:Gem::Version
69
- version: 0.10.8
53
+ version: 0.10.10
70
54
  type: :development
71
55
  prerelease: false
72
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +58,7 @@ dependencies:
74
58
  requirements:
75
59
  - - '='
76
60
  - !ruby/object:Gem::Version
77
- version: 0.10.8
61
+ version: 0.10.10
78
62
  description: Shared behavior for Sql databases
79
63
  email:
80
64
  - myles@8thlight.com