ardm-do-adapter 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 Version](https://badge.fury.io/rb/ardm-do-adapter.png)][gem]
|
2
|
+
[![Build Status](https://travis-ci.org/ar-dm/ardm-do-adapter.png?branch=master)][travis]
|
3
|
+
[![Dependency Status](https://gemnasium.com/ar-dm/ardm-do-adapter.png?travis)][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