From 8f5749355a92d10d8d30aa8d66eddc3e5f629b27 Mon Sep 17 00:00:00 2001
From: Israel Barreto Sant'Anna <ibsa14@inf.ufpr.br>
Date: Thu, 1 Oct 2015 09:52:02 -0300
Subject: [PATCH] Changed add_index method to accept multiple properties

Signed-off-by: Israel Barreto Sant'Anna <ibsa14@inf.ufpr.br>
---
 .../orient_db/learning_object_repository.rb   |  2 +-
 lib/orient_db/migration.rb                    | 22 +++++++++++++++----
 lib/orient_db/migrations/create_attribute.rb  |  4 ++--
 .../migrations/create_learning_object.rb      |  4 +++-
 lib/orient_db/migrations/create_user.rb       |  2 +-
 5 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb
index 51e747d9..96d2cb63 100644
--- a/app/repositories/orient_db/learning_object_repository.rb
+++ b/app/repositories/orient_db/learning_object_repository.rb
@@ -77,7 +77,7 @@ module OrientDb
                                 SELECT EXPAND(rid)
                                 FROM index:learningobject_search
                                 WHERE key LUCENE '#{qry}'
-                              ", limit: -1
+                              ", limit: 10000
       build_objects(learning_objects_hash) || []
     end
 
diff --git a/lib/orient_db/migration.rb b/lib/orient_db/migration.rb
index 0d282d31..466003fa 100644
--- a/lib/orient_db/migration.rb
+++ b/lib/orient_db/migration.rb
@@ -35,19 +35,33 @@ module OrientDb
       end
     end
 
-    def add_index(klass, property, type, engine=nil, metadata=nil)
+    def add_index(klass, properties, type, name=nil, engine=nil, metadata=nil)
       engine = engine.nil? ? "" : " ENGINE #{engine}"
       metadata = metadata.nil? ? "" : " METADATA #{metadata.to_s}"
+      props = stringify(properties,", ")
+      name = name.nil? ? "#{klass}."+stringify(properties,"_") : name;
+      
       begin
-        @client.command "CREATE INDEX #{klass}.#{property} ON #{klass} (#{property}) #{type}#{engine}#{metadata}"
+        index = "CREATE INDEX #{name} ON #{klass} (#{props}) #{type}#{engine}#{metadata}"
+        @client.command index
       rescue Orientdb4r::ServerError => e
         # If the index already exists OrientDB will give an error containing this message
-        unless e.message.include? "Index with name #{klass.downcase}.#{property.downcase}"
+        unless e.message.include? "Index with name #{name.downcase}"
           puts "Error at index creation"
           p e.message
-          p.backtrace
+          p e.backtrace
         end
       end
     end
+
+    private
+    def stringify(array, separator)
+      str = ""
+      array.each do |value|
+        str += value.to_s+separator 
+      end
+      str[0..-(separator.size+1)]
+    end
+
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_attribute.rb b/lib/orient_db/migrations/create_attribute.rb
index db0de647..b297b684 100644
--- a/lib/orient_db/migrations/create_attribute.rb
+++ b/lib/orient_db/migrations/create_attribute.rb
@@ -5,9 +5,9 @@ class OrientDb::Migrations::CreateAttribute < OrientDb::Migration
         c.property 'key', :string
         c.property 'value', :string
     end
-    add_index 'Attribute', 'key', "NOTUNIQUE_HASH_INDEX"
+    add_index 'Attribute', ['key'], "NOTUNIQUE_HASH_INDEX"
     metadata = {:analyzer => "org.apache.lucene.analysis.br.BrazilianAnalyzer"}
-    add_index 'Attribute', 'value', "FULLTEXT", "LUCENE", metadata.to_json
+    add_index 'Attribute', ['value'], "FULLTEXT", nil, "LUCENE", metadata.to_json
   end
 
   def down
diff --git a/lib/orient_db/migrations/create_learning_object.rb b/lib/orient_db/migrations/create_learning_object.rb
index 194fedb4..7d3a15a6 100644
--- a/lib/orient_db/migrations/create_learning_object.rb
+++ b/lib/orient_db/migrations/create_learning_object.rb
@@ -8,7 +8,9 @@ class OrientDb::Migrations::CreateLearningObject < OrientDb::Migration
         c.property 'type', :string
         c.property 'metadata', :string
     end
-    add_index 'LearningObject', 'id_dspace', :type => "UNIQUE_HASH_INDEX"
+    add_index 'LearningObject', ['id_dspace'], "UNIQUE_HASH_INDEX"
+    metadata = {:analyzer => "org.apache.lucene.analysis.br.BrazilianAnalyzer"}
+    add_index 'LearningObject', ['name', 'description'], "FULLTEXT", "learningobject_search", "LUCENE", metadata.to_json
   end
 
   def down
diff --git a/lib/orient_db/migrations/create_user.rb b/lib/orient_db/migrations/create_user.rb
index 887c6be7..3c7406f4 100644
--- a/lib/orient_db/migrations/create_user.rb
+++ b/lib/orient_db/migrations/create_user.rb
@@ -4,7 +4,7 @@ class OrientDb::Migrations::CreateUser < OrientDb::Migration
     create_class 'User', 'V' do |c|
         c.property 'p_id', :integer, :mandatory => true, :notnull => true
     end
-    add_index 'User', 'p_id', "UNIQUE_HASH_INDEX"
+    add_index 'User', ['p_id'], "UNIQUE_HASH_INDEX"
   end
 
   def down
-- 
GitLab