dm-sphinx-adapter 0.6 → 0.7

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 CHANGED
@@ -1,3 +1,16 @@
1
+ === 0.7 / 2009-02-21
2
+
3
+ * Explicit repository names everywhere I can. DM ~> 0.9.10 and dm-sphinx-adapter 0.6.2 couldn't guess the default repository name.
4
+
5
+ === 0.6.2 / 2008-12-16
6
+
7
+ * Fixed shallow .dup of riddle client errors. You need to upgrade if you are running 0.6.1.
8
+
9
+ === 0.6.1 / 2008-12-16
10
+
11
+ * The adapter returns the entire Riddle::Client#query response so document :weight and :attributes are usable.
12
+ * Fixed broken naming convention bug. The AbstractAdapter constructor was not being called.
13
+
1
14
  === 0.6 / 2008-12-13
2
15
 
3
16
  * Removed managed client and all related libs.
data/Manifest.txt CHANGED
@@ -16,8 +16,8 @@ lib/riddle/client/filter.rb
16
16
  lib/riddle/client/message.rb
17
17
  lib/riddle/client/response.rb
18
18
  test/files/model.rb
19
- test/files/mysql5.sphinx.conf
20
- test/files/mysql5.sql
19
+ test/files/source.xml
20
+ test/files/sphinx.conf
21
21
  test/helper.rb
22
22
  test/test_adapter.rb
23
23
  test/test_attribute.rb
data/README.txt CHANGED
@@ -10,11 +10,24 @@ A DataMapper Sphinx adapter.
10
10
 
11
11
  == Dependencies
12
12
 
13
+ Ruby::
13
14
  * dm-core ~> 0.9.7
14
15
  * dm-is-searchable ~> 0.9.7 (optional)
15
16
 
16
17
  I'd recommend using the dm-more plugin dm-is-searchable instead of fetching the document id's yourself.
17
18
 
19
+ Sphinx::
20
+ * 0.9.8-r871
21
+ * 0.9.8-r909
22
+ * 0.9.8-r985
23
+ * 0.9.8-r1065
24
+ * 0.9.8-r1112
25
+ * 0.9.8-rc1 (gem version: 0.9.8.1198)
26
+ * 0.9.8-rc2 (gem version: 0.9.8.1231)
27
+ * 0.9.8 (gem version: 0.9.8.1371)
28
+
29
+ Internally the Riddle client library is used.
30
+
18
31
  == Install
19
32
 
20
33
  * Via git: git clone git://github.com/shanna/dm-sphinx-adapter.git
data/Rakefile CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
5
 
6
- Hoe.new('dm-sphinx-adapter', '0.6') do |p|
6
+ Hoe.new('dm-sphinx-adapter', '0.7') do |p|
7
7
  p.developer('Shane Hanna', 'shane.hanna@gmail.com')
8
8
  p.extra_deps = [
9
9
  ['dm-core', '~> 0.9.7']
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{dm-sphinx-adapter}
5
- s.version = "0.6"
5
+ s.version = "0.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Shane Hanna"]
9
- s.date = %q{2008-12-13}
9
+ s.date = %q{2009-02-21}
10
10
  s.description = %q{A DataMapper Sphinx adapter.}
11
11
  s.email = ["shane.hanna@gmail.com"]
12
12
  s.extra_rdoc_files = ["History.txt", "LICENCE.txt", "Manifest.txt", "README.txt"]
13
- s.files = ["History.txt", "LICENCE.txt", "Manifest.txt", "README.txt", "Rakefile", "dm-sphinx-adapter.gemspec", "lib/dm-sphinx-adapter.rb", "lib/dm-sphinx-adapter/adapter.rb", "lib/dm-sphinx-adapter/attribute.rb", "lib/dm-sphinx-adapter/index.rb", "lib/dm-sphinx-adapter/query.rb", "lib/dm-sphinx-adapter/resource.rb", "lib/riddle.rb", "lib/riddle/client.rb", "lib/riddle/client/filter.rb", "lib/riddle/client/message.rb", "lib/riddle/client/response.rb", "test/files/model.rb", "test/files/mysql5.sphinx.conf", "test/files/mysql5.sql", "test/helper.rb", "test/test_adapter.rb", "test/test_attribute.rb", "test/test_index.rb", "test/test_query.rb", "test/test_resource.rb"]
13
+ s.files = ["History.txt", "LICENCE.txt", "Manifest.txt", "README.txt", "Rakefile", "dm-sphinx-adapter.gemspec", "lib/dm-sphinx-adapter.rb", "lib/dm-sphinx-adapter/adapter.rb", "lib/dm-sphinx-adapter/attribute.rb", "lib/dm-sphinx-adapter/index.rb", "lib/dm-sphinx-adapter/query.rb", "lib/dm-sphinx-adapter/resource.rb", "lib/riddle.rb", "lib/riddle/client.rb", "lib/riddle/client/filter.rb", "lib/riddle/client/message.rb", "lib/riddle/client/response.rb", "test/files/model.rb", "test/files/source.xml", "test/files/sphinx.conf", "test/helper.rb", "test/test_adapter.rb", "test/test_attribute.rb", "test/test_index.rb", "test/test_query.rb", "test/test_resource.rb"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://dm-sphinx.rubyforge.org}
16
16
  s.rdoc_options = ["--main", "README.txt"]
@@ -26,13 +26,13 @@ Gem::Specification.new do |s|
26
26
 
27
27
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
28
  s.add_runtime_dependency(%q<dm-core>, ["~> 0.9.7"])
29
- s.add_development_dependency(%q<hoe>, [">= 1.8.2"])
29
+ s.add_development_dependency(%q<hoe>, [">= 1.8.3"])
30
30
  else
31
31
  s.add_dependency(%q<dm-core>, ["~> 0.9.7"])
32
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
32
+ s.add_dependency(%q<hoe>, [">= 1.8.3"])
33
33
  end
34
34
  else
35
35
  s.add_dependency(%q<dm-core>, ["~> 0.9.7"])
36
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
36
+ s.add_dependency(%q<hoe>, [">= 1.8.3"])
37
37
  end
38
38
  end
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  # TODO: Hide the shitload of dm-core warnings or at least try to?
4
4
  old_verbose, $VERBOSE = $VERBOSE, nil
5
- gem 'dm-core', '~> 0.9.7'
5
+ gem 'dm-core', '~> 0.9.8'
6
6
  require 'dm-core'
7
7
  $VERBOSE = old_verbose
8
8
 
@@ -36,9 +36,8 @@ module DataMapper
36
36
  # uri_or_options<URI, DataObject::URI, Addressable::URI, String, Hash, Pathname>::
37
37
  # DataMapper uri or options hash.
38
38
  def initialize(name, uri_or_options)
39
- options = normalize_options(uri_or_options)
40
- @client = Riddle::Client.new(options.delete(:host), options.delete(:port))
41
- options.each{|k, v| @client.method("#{k}=".to_sym).call(v) if @client.respond_to?("#{k}=".to_sym)}
39
+ super # Set up defaults.
40
+ @options = normalize_options(uri_or_options)
42
41
  end
43
42
 
44
43
  def create(resources) #:nodoc:
@@ -56,11 +55,13 @@ module DataMapper
56
55
  # These methods are public but normally called indirectly through DataMapper::Resource#get,
57
56
  # DataMapper::Resource#first or DataMapper::Resource#all.
58
57
  #
58
+ # The document hashes returned are those from Riddle::Client.
59
+ #
59
60
  # ==== Parameters
60
61
  # query<DataMapper::Query>:: The query object.
61
62
  #
62
63
  # ==== Returns
63
- # Array<Hash>:: An array of document hashes. <tt>[{:id => 1}, {:id => 2}]</tt>
64
+ # Array<Hash>:: An array of document hashes. <tt>[{:id => 1, ...}, {:id => 2, ...}]</tt>
64
65
  # Array<>:: An empty array if no documents match.
65
66
  def read_many(query)
66
67
  read(query)
@@ -77,7 +78,7 @@ module DataMapper
77
78
  # query<DataMapper::Query>:: The query object.
78
79
  #
79
80
  # ==== Returns
80
- # Hash:: An document hash of the first document matched. <tt>{:id => 1}</tt>
81
+ # Hash:: An document hash of the first document matched. <tt>{:id => 1, ...}</tt>
81
82
  # Nil:: If no documents match.
82
83
  def read_one(query)
83
84
  read(query).first
@@ -97,10 +98,10 @@ module DataMapper
97
98
  #
98
99
  # ==== Returns
99
100
  # Array<DataMapper::Adapters::Sphinx::Index>:: Index objects from the model.
100
- def indexes(model)
101
- indexes = model.sphinx_indexes(repository(self.name).name) if model.respond_to?(:sphinx_indexes)
101
+ def indexes(query)
102
+ indexes = query.model.sphinx_indexes(name) if query.model.respond_to?(:sphinx_indexes)
102
103
  if indexes.nil? or indexes.empty?
103
- indexes = [Index.new(model, model.storage_name)]
104
+ indexes = [Index.new(query.model, query.model.storage_name(name))]
104
105
  end
105
106
  indexes
106
107
  end
@@ -111,13 +112,18 @@ module DataMapper
111
112
  # query<DataMapper::Query>:: The query object.
112
113
  #
113
114
  # ==== Returns
114
- # Array<Hash>:: An array of document hashes. <tt>[{:id => 1}, {:id => 2}]</tt>
115
+ # Array<Hash>:: An array of document hashes. <tt>[{:id => 1, ...}, {:id => 2, ...}]</tt>
115
116
  # Array<>:: An empty array if no documents match.
116
117
  def read(query)
117
- from = indexes(query.model).map{|index| index.name}.join(', ')
118
- search = Sphinx::Query.new(query).to_s
118
+ from = indexes(query).map{|index| index.name}.join(', ')
119
+ search = Sphinx::Query.new(query).to_s
120
+ client = Riddle::Client.new(@options[:host], @options[:port])
121
+
122
+ # You can set some options that aren't set by the adapter.
123
+ @options.except(:host, :port, :match_mode, :limit, :offset, :sort_mode, :sort_by).each do |k, v|
124
+ client.method("#{k}=".to_sym).call(v) if client.respond_to?("#{k}=".to_sym)
125
+ end
119
126
 
120
- client = @client.dup
121
127
  client.match_mode = :extended
122
128
  client.filters = search_filters(query) # By attribute.
123
129
  client.limit = query.limit.to_i if query.limit
@@ -134,7 +140,7 @@ module DataMapper
134
140
  DataMapper.logger.info(
135
141
  %q{Sphinx (%.3f): search '%s' in '%s' found %d documents} % [result[:time], search, from, result[:total]]
136
142
  )
137
- result[:matches].map{|doc| {:id => doc[:doc]}}
143
+ result[:matches].map{|doc| doc[:id] = doc[:doc]; doc}
138
144
  end
139
145
 
140
146
 
@@ -31,10 +31,11 @@ module DataMapper
31
31
  query.conditions.each do |operator, property, value|
32
32
  next if property.kind_of? Sphinx::Attribute # Filters are added elsewhere.
33
33
  normalized = normalize_value(value)
34
+ field = property.field(query.repository.name) unless operator == :raw
34
35
  @query << case operator
35
- when :eql, :like then '@%s "%s"' % [property.field.to_s, normalized.join(' ')]
36
- when :not then '@%s -"%s"' % [property.field.to_s, normalized.join(' ')]
37
- when :in then '@%s (%s)' % [property.field.to_s, normalized.map{|v| %{"#{v}"}}.join(' | ')]
36
+ when :eql, :like then '@%s "%s"' % [field.to_s, normalized.join(' ')]
37
+ when :not then '@%s -"%s"' % [field.to_s, normalized.join(' ')]
38
+ when :in then '@%s (%s)' % [field.to_s, normalized.map{|v| %{"#{v}"}}.join(' | ')]
38
39
  when :raw then "#{property}"
39
40
  else raise NotImplementedError.new("Sphinx: Query fields do not support the #{operator} operator")
40
41
  end
data/test/files/model.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  class Item
2
+ include DataMapper::Resource
2
3
  include DataMapper::SphinxResource
3
4
  property :id, Serial
4
5
  property :t_string, String
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <sphinx:docset xmlns:sphinx="sphinx">
3
+ <sphinx:schema>
4
+ <sphinx:field name="t_string"/>
5
+ <sphinx:field name="t_text"/>
6
+ <sphinx:attr name="t_decimal" type="float"/>
7
+ <sphinx:attr name="t_float" type="float"/>
8
+ <sphinx:attr name="t_integer" type="int"/>
9
+ <sphinx:attr name="t_datetime" type="timestamp"/>
10
+ </sphinx:schema>
11
+
12
+ <sphinx:document id="1">
13
+ <t_string>one</t_string>
14
+ <t_text>text one!</t_text>
15
+ <t_decimal>10.5</t_decimal>
16
+ <t_float>100.5</t_float>
17
+ <t_integer>1000</t_integer>
18
+ <t_datetime>1235183682</t_datetime>
19
+ </sphinx:document>
20
+
21
+ <sphinx:document id="2">
22
+ <t_string>two</t_string>
23
+ <t_text>text two!</t_text>
24
+ <t_decimal>20.5</t_decimal>
25
+ <t_float>200.5</t_float>
26
+ <t_integer>2000</t_integer>
27
+ <t_datetime>1235183682</t_datetime>
28
+ </sphinx:document>
29
+
30
+ <sphinx:document id="3">
31
+ <t_string>three</t_string>
32
+ <t_text>text three!</t_text>
33
+ <t_decimal>30.5</t_decimal>
34
+ <t_float>300.5</t_float>
35
+ <t_integer>3000</t_integer>
36
+ <t_datetime>1235183682</t_datetime>
37
+ </sphinx:document>
38
+ </sphinx:docset>
39
+
@@ -0,0 +1,36 @@
1
+ # searchd and indexer must be run from the root directory of this lib.
2
+
3
+ indexer
4
+ {
5
+ mem_limit = 64M
6
+ }
7
+
8
+ searchd
9
+ {
10
+ address = localhost
11
+ port = 3312
12
+ log = test/files/tmp/sphinx.log
13
+ query_log = test/files/tmp/sphinx.query.log
14
+ read_timeout = 5
15
+ pid_file = test/files/tmp/sphinx.pid
16
+ max_matches = 1000
17
+ }
18
+
19
+ source items
20
+ {
21
+ type = xmlpipe2
22
+ xmlpipe_command = cat test/files/source.xml
23
+ }
24
+
25
+ index items_main
26
+ {
27
+ source = items
28
+ charset_type = utf-8
29
+ path = test/files/tmp/items
30
+ }
31
+
32
+ index items
33
+ {
34
+ type = distributed
35
+ local = items_main
36
+ }
data/test/helper.rb CHANGED
@@ -6,37 +6,32 @@ require 'pathname'
6
6
  require 'shoulda'
7
7
  require 'test/unit'
8
8
 
9
- base = Pathname.new(__FILE__).dirname + '..'
9
+ base = Pathname.new(__FILE__).dirname + '..'
10
+ files = base + 'test' + 'files'
10
11
  %w{lib test}.each{|p| $:.unshift base + p}
11
12
 
12
13
  require 'dm-sphinx-adapter'
13
14
 
14
15
  # Sphinx runner.
15
16
  Dir.chdir(base)
16
- config = base + 'test' + 'files' + 'mysql5.sphinx.conf'
17
17
  begin
18
18
  TCPSocket.new('localhost', '3312')
19
19
  rescue
20
20
  puts 'Starting Sphinx...'
21
- system("searchd --config #{config}") || exit
21
+ system("searchd --config #{files + 'sphinx.conf'}") || exit
22
22
  system('ps aux | grep searchd')
23
23
  end
24
24
 
25
- class Test::Unit::TestCase
26
- include Extlib::Hook
27
-
28
- before :setup do
29
- files = Pathname.new(__FILE__).dirname + 'files'
30
-
31
- mysql = `mysql5 dm_sphinx_adapter_test < #{files + 'mysql5.sql'} 2>&1`
32
- raise %{Re-create database failed:\n #{mysql}} unless mysql.blank?
25
+ indexer = `indexer --config #{files + 'sphinx.conf'} --all --rotate`
26
+ raise %{Re-create index failed:\n #{indexer}} if indexer =~ /error|fatal/i
27
+ sleep 1
33
28
 
34
- indexer = `indexer --config #{files + 'mysql5.sphinx.conf'} --all --rotate`
35
- raise %{Re-create index failed:\n #{indexer}} if indexer =~ /error|fatal/i
29
+ # :default is unused at the moment.
30
+ DataMapper.setup(:default, :adapter => 'in_memory', :database => 'dm_sphinx_adapter_test')
31
+ DataMapper.setup(:search, :adapter => 'sphinx')
36
32
 
37
- DataMapper.setup(:default, :adapter => 'mysql', :database => 'dm_sphinx_adapter_test')
38
- sleep 1; # Give sphinx a chance to catch up before test runs.
39
- end
33
+ class Test::Unit::TestCase
34
+ include Extlib::Hook
40
35
 
41
36
  # after :teardown do
42
37
  def teardown
data/test/test_adapter.rb CHANGED
@@ -1,49 +1,52 @@
1
1
  require File.join(File.dirname(__FILE__), 'helper')
2
2
 
3
3
  class TestAdapter < Test::Unit::TestCase
4
- context 'DM::A::Sphinx::Adapter class' do
4
+ context 'DM::A::Sphinx::Adapter' do
5
5
  setup do
6
- DataMapper.setup(:adapter, :adapter => 'sphinx')
7
6
  load File.join(File.dirname(__FILE__), 'files', 'model.rb')
8
- @it = repository(:adapter)
7
+ @it = repository(:search)
9
8
  @resource = Item
10
9
  end
11
10
 
12
- context '#create' do
13
- should 'should return zero records created' do
14
- assert_equal 0, @it.create(create_resource)
11
+ context 'class' do
12
+ should 'use default field naming convention' do
13
+ assert_equal(
14
+ DataMapper::NamingConventions::Field::Underscored,
15
+ @it.adapter.field_naming_convention
16
+ )
15
17
  end
16
- end
17
18
 
18
- context '#delete' do
19
- should 'should return zero records deleted' do
20
- assert_equal 0, @it.delete(create_resource)
19
+ should 'use default resource naming convention' do
20
+ assert_equal(
21
+ DataMapper::NamingConventions::Resource::UnderscoredAndPluralized,
22
+ @it.adapter.resource_naming_convention
23
+ )
21
24
  end
22
25
  end
23
26
 
24
27
  context '#read_many' do
25
28
  context 'conditions' do
26
29
  should 'return all objects when nil' do
27
- assert_equal [{:id => 1}, {:id => 2}, {:id => 3}], @it.read_many(query)
30
+ assert_equal [1, 2, 3], @it.read_many(query).map{|d| d[:id]}
28
31
  end
29
32
 
30
33
  should 'return subset of objects for conditions' do
31
- assert_equal [{:id => 2}], @it.read_many(query(:t_string => 'two'))
34
+ assert_equal [2], @it.read_many(query(:t_string => 'two')).map{|d| d[:id]}
32
35
  end
33
36
  end
34
37
 
35
38
  context 'offsets' do
36
39
  should 'be able to offset the objects' do
37
- assert_equal [{:id => 1}, {:id => 2}, {:id => 3}], @it.read_many(query(:offset => 0))
38
- assert_equal [{:id => 2}, {:id => 3}], @it.read_many(query(:offset => 1))
40
+ assert_equal [1, 2, 3], @it.read_many(query(:offset => 0)).map{|d| d[:id]}
41
+ assert_equal [2, 3], @it.read_many(query(:offset => 1)).map{|d| d[:id]}
39
42
  assert_equal [], @it.read_many(query(:offset => 3))
40
43
  end
41
44
  end
42
45
 
43
46
  context 'limits' do
44
47
  should 'be able to limit the objects' do
45
- assert_equal [{:id => 1}], @it.read_many(query(:limit => 1))
46
- assert_equal [{:id => 1}, {:id => 2}], @it.read_many(query(:limit => 2))
48
+ assert_equal [1], @it.read_many(query(:limit => 1)).map{|d| d[:id]}
49
+ assert_equal [1, 2], @it.read_many(query(:limit => 2)).map{|d| d[:id]}
47
50
  end
48
51
  end
49
52
  end
@@ -60,25 +63,6 @@ class TestAdapter < Test::Unit::TestCase
60
63
 
61
64
  protected
62
65
  def query(conditions = {})
63
- DataMapper::Query.new(repository(:adapter), @resource, conditions)
64
- end
65
-
66
- def resource(options = {})
67
- now = Time.now
68
- attributes = {
69
- :t_string => now.to_s,
70
- :t_text => "text #{now.to_s}!",
71
- :t_decimal => now.to_i * 0.001,
72
- :t_float => now.to_i * 0.0001,
73
- :t_integer => now.to_i,
74
- :t_datetime => now
75
- }.update(options)
76
- @resource.new(attributes)
77
- end
78
-
79
- def create_resource(options = {})
80
- repository(:adapter) do
81
- @resource.create(resource(options).attributes.except(:id))
82
- end
66
+ DataMapper::Query.new(repository(:search), @resource, conditions)
83
67
  end
84
68
  end
data/test/test_query.rb CHANGED
@@ -3,9 +3,8 @@ require File.join(File.dirname(__FILE__), 'helper')
3
3
  class TestQuery < Test::Unit::TestCase
4
4
  context 'DM::A::Sphinx::Query conditions' do
5
5
  setup do
6
- DataMapper.setup(:adapter, :adapter => 'sphinx')
7
6
  load File.join(File.dirname(__FILE__), 'files', 'model.rb')
8
- @adapter = repository(:adapter)
7
+ @adapter = repository(:search)
9
8
  @resource = Item
10
9
  end
11
10
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-sphinx-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.6"
4
+ version: "0.7"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Hanna
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-13 00:00:00 +11:00
12
+ date: 2009-02-22 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.8.2
33
+ version: 1.8.3
34
34
  version:
35
35
  description: A DataMapper Sphinx adapter.
36
36
  email:
@@ -63,8 +63,8 @@ files:
63
63
  - lib/riddle/client/message.rb
64
64
  - lib/riddle/client/response.rb
65
65
  - test/files/model.rb
66
- - test/files/mysql5.sphinx.conf
67
- - test/files/mysql5.sql
66
+ - test/files/source.xml
67
+ - test/files/sphinx.conf
68
68
  - test/helper.rb
69
69
  - test/test_adapter.rb
70
70
  - test/test_attribute.rb
@@ -1,97 +0,0 @@
1
- # searchd and indexer must be run from the root directory of this lib.
2
-
3
- indexer
4
- {
5
- mem_limit = 64M
6
- }
7
-
8
- searchd
9
- {
10
- address = localhost
11
- port = 3312
12
- log = test/files/tmp/sphinx.log
13
- query_log = test/files/tmp/sphinx.query.log
14
- read_timeout = 5
15
- pid_file = test/files/tmp/sphinx.pid
16
- max_matches = 1000
17
- }
18
-
19
- source items
20
- {
21
- type = mysql
22
- sql_host = localhost
23
- sql_user = root
24
- sql_pass =
25
- sql_db = dm_sphinx_adapter_test
26
-
27
- sql_query_pre = set names utf8
28
- sql_query_pre = \
29
- replace into delta (name, updated_on) ( \
30
- select 'items', t_datetime \
31
- from items \
32
- order by t_datetime desc \
33
- limit 1\
34
- )
35
- sql_query_info = select * from items where id = $id
36
-
37
- sql_query_pre = set names utf8
38
- sql_query = \
39
- select \
40
- id, \
41
- t_string, \
42
- t_text, \
43
- t_decimal, \
44
- t_float, \
45
- t_integer, \
46
- unix_timestamp(t_datetime) as t_datetime \
47
- from items \
48
- where t_datetime <= ( \
49
- select updated_on \
50
- from delta \
51
- where name = 'items' \
52
- )
53
-
54
- sql_attr_float = t_decimal
55
- sql_attr_float = t_float
56
- sql_attr_uint = t_integer
57
- sql_attr_timestamp = t_datetime
58
- }
59
-
60
- source items_delta : items {
61
- sql_query_pre = set names utf8
62
- sql_query_pre =
63
- sql_query = \
64
- select \
65
- id, \
66
- t_string, \
67
- t_text, \
68
- t_decimal, \
69
- t_float, \
70
- t_integer, \
71
- unix_timestamp(t_datetime) as t_datetime \
72
- from items \
73
- where t_datetime > ( \
74
- select updated_on \
75
- from delta \
76
- where name = 'items' \
77
- )
78
- }
79
-
80
- index items_main
81
- {
82
- source = items
83
- path = test/files/tmp/items_main
84
- }
85
-
86
- index items_delta : items_main
87
- {
88
- source = items_delta
89
- path = test/files/tmp/items_delta
90
- }
91
-
92
- index items
93
- {
94
- type = distributed
95
- local = items_main
96
- local = items_delta
97
- }
@@ -1,26 +0,0 @@
1
- drop table if exists delta;
2
- create table delta (
3
- name varchar(50) not null,
4
- updated_on datetime,
5
- primary key (name)
6
- ) engine=innodb default charset=utf8;
7
-
8
- insert into delta (name, updated_on) values
9
- ('items', now());
10
-
11
- drop table if exists items;
12
- create table items (
13
- id int(11) not null auto_increment,
14
- t_string varchar(50),
15
- t_text text,
16
- t_decimal decimal(30,10),
17
- t_float float,
18
- t_integer int,
19
- t_datetime datetime,
20
- primary key (id)
21
- ) engine=innodb default charset=utf8;
22
-
23
- insert into items (t_string, t_text, t_decimal, t_float, t_integer, t_datetime) values
24
- ('one', 'text one!', '10.50', '100.50', '1000', now()),
25
- ('two', 'text two!', '20.50', '200.50', '2000', now()),
26
- ('three', 'text three!', '30.50', '300.50', '3000', now());