ardm-do-adapter 1.2.0 → 1.2.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +18 -0
- data/ardm-do-adapter.gemspec +1 -1
- data/lib/dm-do-adapter/adapter.rb +50 -30
- data/lib/dm-do-adapter/version.rb +1 -1
- metadata +4 -4
- data/README.rdoc +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c82bd91805f6089e2010a5ce2b19fdc7d10d620f
|
4
|
+
data.tar.gz: 6a3737cdcd799f08b304d808efd0ede9792fb19a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90a587c722695538d67e414858d9c27dfa02055fe3df80c234b3a115ce47378fe26b0b4d22ca101f0e80992f61e442831a8bb86b5ba6bd038a3e1bf4c60547e5
|
7
|
+
data.tar.gz: da5713ace4d2fe7b8619b203042890dccf71446f45f320b166d0261a1f4d6a8871d1ae3c225d3ff888166cbf2f7f426898568dd37289860ec80d1a9625da555e
|
data/Gemfile
CHANGED
@@ -7,7 +7,7 @@ gemspec
|
|
7
7
|
SOURCE = ENV.fetch('SOURCE', :git).to_sym
|
8
8
|
REPO_POSTFIX = SOURCE == :path ? '' : '.git'
|
9
9
|
DATAMAPPER = SOURCE == :path ? Pathname(__FILE__).dirname.parent : 'http://github.com/ar-dm'
|
10
|
-
DM_VERSION = '~> 1.2
|
10
|
+
DM_VERSION = '~> 1.2'
|
11
11
|
DO_VERSION = '~> 0.10.6'
|
12
12
|
CURRENT_BRANCH = ENV.fetch('GIT_BRANCH', 'master')
|
13
13
|
|
data/README.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
[][gem]
|
2
|
+
[][travis]
|
3
|
+
[][gemnasium]
|
4
|
+
|
5
|
+
[gem]: https://rubygems.org/gems/ardm-do-adapter
|
6
|
+
[travis]: https://travis-ci.org/ar-dm/ardm-do-adapter
|
7
|
+
[gemnasium]: https://gemnasium.com/ar-dm/ardm-do-adapter
|
8
|
+
|
9
|
+
# ardm-do-adapter
|
10
|
+
|
11
|
+
A fork of [`dm-do-adapter`](https://github.com/datamapper/dm-do-adapter).
|
12
|
+
|
13
|
+
## Install
|
14
|
+
|
15
|
+
See [ardm-core](https://github.com/ar-dm/ardm-core) for more information.
|
16
|
+
|
17
|
+
Unless they are specific to this gem, please ask general `ardm-` questions
|
18
|
+
and open issues on `ardm-core`.
|
data/ardm-do-adapter.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split("\n")
|
16
16
|
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
|
-
gem.extra_rdoc_files = %w[LICENSE README.
|
17
|
+
gem.extra_rdoc_files = %w[LICENSE README.md]
|
18
18
|
gem.require_paths = [ "lib" ]
|
19
19
|
|
20
20
|
gem.add_runtime_dependency 'data_objects', '~> 0.10.6'
|
@@ -310,19 +310,39 @@ module DataMapper
|
|
310
310
|
# Adapter below.
|
311
311
|
module SQL #:nodoc:
|
312
312
|
IDENTIFIER_MAX_LENGTH = 128
|
313
|
+
QUESTION_MARK = '?'.freeze
|
314
|
+
GT_OPERATOR = '>'.freeze
|
315
|
+
LT_OPERATOR = '<'.freeze
|
316
|
+
GTE_OPERATOR = '>='.freeze
|
317
|
+
LTE_OPERATOR = '<='.freeze
|
318
|
+
IS_OPERATOR = 'IS'.freeze
|
319
|
+
EQ_OPERATOR = '='.freeze
|
320
|
+
IN_OPERATOR = 'IN'.freeze
|
321
|
+
BETWEEN_OPERATOR = 'BETWEEN'.freeze
|
322
|
+
REGEXP_OPERATOR = '~'.freeze
|
323
|
+
LIKE_OPERATOR = 'LIKE'.freeze
|
324
|
+
NULL_KEYWORD = 'NULL'.freeze
|
325
|
+
AND_KEYWORD = ' AND '.freeze
|
326
|
+
ON_KEYWORD = 'ON'.freeze
|
327
|
+
COLUMN_SEPARATOR = ', '.freeze
|
328
|
+
SPACE = ' '.freeze
|
329
|
+
ONE_EQ_ZERO = '1 = 0'.freeze
|
330
|
+
SINGLE_QUOTE = /"/.freeze
|
331
|
+
DOUBLE_QUOTE = '""'.freeze
|
313
332
|
|
314
333
|
# @api semipublic
|
315
334
|
def property_to_column_name(property, qualify)
|
316
|
-
column_name =
|
335
|
+
column_name = quote_name(property.field)
|
317
336
|
|
318
337
|
case qualify
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
338
|
+
when true
|
339
|
+
"#{quote_name(property.model.storage_name(name))}.#{column_name}"
|
340
|
+
when String
|
341
|
+
"#{quote_name(qualify)}.#{column_name}"
|
342
|
+
else
|
343
|
+
column_name
|
323
344
|
end
|
324
345
|
|
325
|
-
column_name << quote_name(property.field)
|
326
346
|
end
|
327
347
|
|
328
348
|
private
|
@@ -396,9 +416,9 @@ module DataMapper
|
|
396
416
|
statement << default_values_clause
|
397
417
|
else
|
398
418
|
statement << DataMapper::Ext::String.compress_lines(<<-SQL)
|
399
|
-
(#{properties.map { |property| quote_name(property.field) }.join(
|
419
|
+
(#{properties.map { |property| quote_name(property.field) }.join(COLUMN_SEPARATOR)})
|
400
420
|
VALUES
|
401
|
-
(#{([
|
421
|
+
(#{([QUESTION_MARK] * properties.size).join(COLUMN_SEPARATOR)})
|
402
422
|
SQL
|
403
423
|
end
|
404
424
|
|
@@ -438,7 +458,7 @@ module DataMapper
|
|
438
458
|
end
|
439
459
|
|
440
460
|
statement = "UPDATE #{quote_name(model.storage_name(name))}"
|
441
|
-
statement << " SET #{properties.map { |property| "#{quote_name(property.field)} = ?" }.join(
|
461
|
+
statement << " SET #{properties.map { |property| "#{quote_name(property.field)} = ?" }.join(COLUMN_SEPARATOR)}"
|
442
462
|
statement << " WHERE #{conditions_statement}" unless DataMapper::Ext.blank?(conditions_statement)
|
443
463
|
|
444
464
|
return statement, bind_values
|
@@ -473,7 +493,7 @@ module DataMapper
|
|
473
493
|
#
|
474
494
|
# @api private
|
475
495
|
def columns_statement(properties, qualify)
|
476
|
-
properties.map { |property| property_to_column_name(property, qualify) }.join(
|
496
|
+
properties.map { |property| property_to_column_name(property, qualify) }.join(COLUMN_SEPARATOR)
|
477
497
|
end
|
478
498
|
|
479
499
|
# Constructs joins clause
|
@@ -504,7 +524,7 @@ module DataMapper
|
|
504
524
|
seen[source_alias] = 0
|
505
525
|
end
|
506
526
|
|
507
|
-
statements <<
|
527
|
+
statements << ON_KEYWORD
|
508
528
|
|
509
529
|
add_join_conditions(relationship, target_alias, source_alias, statements)
|
510
530
|
add_extra_join_conditions(relationship, target_alias, statements, join_bind_values)
|
@@ -513,13 +533,13 @@ module DataMapper
|
|
513
533
|
# prepend the join bind values to the statement bind values
|
514
534
|
bind_values.unshift(*join_bind_values)
|
515
535
|
|
516
|
-
statements.join(
|
536
|
+
statements.join(SPACE)
|
517
537
|
end
|
518
538
|
|
519
539
|
def add_join_conditions(relationship, target_alias, source_alias, statements)
|
520
540
|
statements << relationship.target_key.zip(relationship.source_key).map do |target_property, source_property|
|
521
541
|
"#{property_to_column_name(target_property, target_alias)} = #{property_to_column_name(source_property, source_alias)}"
|
522
|
-
end.join(
|
542
|
+
end.join(AND_KEYWORD)
|
523
543
|
end
|
524
544
|
|
525
545
|
def add_extra_join_conditions(relationship, target_alias, statements, bind_values)
|
@@ -575,10 +595,10 @@ module DataMapper
|
|
575
595
|
statement = if target_key.size == 1
|
576
596
|
property_to_column_name(target_key.first, qualify)
|
577
597
|
else
|
578
|
-
"(#{target_key.map { |property| property_to_column_name(property, qualify) }.join(
|
598
|
+
"(#{target_key.map { |property| property_to_column_name(property, qualify) }.join(COLUMN_SEPARATOR)})"
|
579
599
|
end
|
580
600
|
|
581
|
-
statement
|
601
|
+
statement = "#{statement} IN (#{select_statement})"
|
582
602
|
|
583
603
|
return statement, bind_values
|
584
604
|
end
|
@@ -592,7 +612,7 @@ module DataMapper
|
|
592
612
|
if conditions.valid?
|
593
613
|
conditions_statement(conditions, qualify)
|
594
614
|
else
|
595
|
-
[
|
615
|
+
[ ONE_EQ_ZERO, [] ]
|
596
616
|
end
|
597
617
|
end
|
598
618
|
|
@@ -626,11 +646,11 @@ module DataMapper
|
|
626
646
|
def order_statement(order, qualify)
|
627
647
|
statements = order.map do |direction|
|
628
648
|
statement = property_to_column_name(direction.target, qualify)
|
629
|
-
statement
|
649
|
+
statement = "#{statement} DESC" if direction.operator == :desc
|
630
650
|
statement
|
631
651
|
end
|
632
652
|
|
633
|
-
statements.join(
|
653
|
+
statements.join(COLUMN_SEPARATOR)
|
634
654
|
end
|
635
655
|
|
636
656
|
# @api private
|
@@ -699,10 +719,10 @@ module DataMapper
|
|
699
719
|
|
700
720
|
# if operator return value contains ? then it means that it is function call
|
701
721
|
# and it contains placeholder (%s) for property name as well (used in Oracle adapter for regexp operator)
|
702
|
-
if operator.include?(
|
722
|
+
if operator.include?(QUESTION_MARK)
|
703
723
|
return operator % column_name, [ value ]
|
704
724
|
else
|
705
|
-
return "#{column_name} #{operator} #{value.nil? ?
|
725
|
+
return "#{column_name} #{operator} #{value.nil? ? NULL_KEYWORD : QUESTION_MARK}", [ value ].compact
|
706
726
|
end
|
707
727
|
end
|
708
728
|
|
@@ -715,39 +735,39 @@ module DataMapper
|
|
715
735
|
when :in then include_operator(subject, value)
|
716
736
|
when :regexp then regexp_operator(value)
|
717
737
|
when :like then like_operator(value)
|
718
|
-
when :gt then
|
719
|
-
when :lt then
|
720
|
-
when :gte then
|
721
|
-
when :lte then
|
738
|
+
when :gt then GT_OPERATOR
|
739
|
+
when :lt then LT_OPERATOR
|
740
|
+
when :gte then GTE_OPERATOR
|
741
|
+
when :lte then LTE_OPERATOR
|
722
742
|
end
|
723
743
|
end
|
724
744
|
|
725
745
|
# @api private
|
726
746
|
def equality_operator(property, operand)
|
727
|
-
operand.nil? ?
|
747
|
+
operand.nil? ? IS_OPERATOR : EQ_OPERATOR
|
728
748
|
end
|
729
749
|
|
730
750
|
# @api private
|
731
751
|
def include_operator(property, operand)
|
732
752
|
case operand
|
733
|
-
when Array then
|
734
|
-
when Range then
|
753
|
+
when Array then IN_OPERATOR
|
754
|
+
when Range then BETWEEN_OPERATOR
|
735
755
|
end
|
736
756
|
end
|
737
757
|
|
738
758
|
# @api private
|
739
759
|
def regexp_operator(operand)
|
740
|
-
|
760
|
+
REGEXP_OPERATOR
|
741
761
|
end
|
742
762
|
|
743
763
|
# @api private
|
744
764
|
def like_operator(operand)
|
745
|
-
|
765
|
+
LIKE_OPERATOR
|
746
766
|
end
|
747
767
|
|
748
768
|
# @api private
|
749
769
|
def quote_name(name)
|
750
|
-
"\"#{name[0, self.class::IDENTIFIER_MAX_LENGTH].gsub(
|
770
|
+
"\"#{name[0, self.class::IDENTIFIER_MAX_LENGTH].gsub(SINGLE_QUOTE,DOUBLE_QUOTE)}\""
|
751
771
|
end
|
752
772
|
|
753
773
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ardm-do-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Emde
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-02-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: data_objects
|
@@ -75,12 +75,12 @@ executables: []
|
|
75
75
|
extensions: []
|
76
76
|
extra_rdoc_files:
|
77
77
|
- LICENSE
|
78
|
-
- README.
|
78
|
+
- README.md
|
79
79
|
files:
|
80
80
|
- ".gitignore"
|
81
81
|
- Gemfile
|
82
82
|
- LICENSE
|
83
|
-
- README.
|
83
|
+
- README.md
|
84
84
|
- Rakefile
|
85
85
|
- ardm-do-adapter.gemspec
|
86
86
|
- lib/ardm-do-adapter.rb
|
data/README.rdoc
DELETED