Omer Frenkel has uploaded a new change for review.

Change subject: core: add distinct keyword to search
......................................................................

core: add distinct keyword to search

currently, the search can return duplicate results,
for example when template has more than one disk,
or disks are on different storage domains.

this patch adds a 'distinct' to the sql the search mechanism creates,
in order to remove any duplicates that return from the query.

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1130915
Change-Id: I070900dc9e1064c98f8b342f26dbc3c23ba8c4a4
Signed-off-by: Omer Frenkel <ofren...@redhat.com>
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
M 
backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
2 files changed, 67 insertions(+), 65 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/32676/1

diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
index 753099c..5552f4b 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
@@ -946,7 +946,7 @@
     }
 
     private String getInnerQuery(String tableName, String primeryKey, String 
fromStatement, StringBuilder wherePhrase) {
-        return StringFormat.format("SELECT %1$s.%2$s FROM %3$s %4$s", 
tableName, primeryKey, fromStatement,
+        return StringFormat.format("SELECT distinct %1$s.%2$s FROM %3$s %4$s", 
tableName, primeryKey, fromStatement,
                 wherePhrase);
     }
 
diff --git 
a/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
 
b/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
index de677a7..e3f7af3 100644
--- 
a/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
+++ 
b/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
@@ -115,51 +115,51 @@
     @Test
     public void testHost() {
         testValidSql("Host: sortby cpu_usage desc",
-                "SELECT * FROM ((SELECT vds.* FROM  vds  )  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds  )  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 19ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   WHERE  vds_with_tags.vds_name LIKE 
'test1' ))  ORDER BY usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 
OFFSET (1 -1) LIMIT 0"
         // Current: 5ms
         testValidSql("Host: name =\"test1\" sortby cpu_usage desc",
-                "SELECT * FROM ((SELECT vds.* FROM  vds   WHERE  vds.vds_name 
LIKE test1 )  ORDER BY usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 
OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds   WHERE  
vds.vds_name LIKE test1 )  ORDER BY usage_cpu_percent DESC NULLS LAST,vds_name 
ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 17ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   WHERE  
vds_with_tags.usage_cpu_percent > 80 ))  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 5ms
         testValidSql("Host: CPU_USAGE > 80 sortby cpu_usage desc",
-                "SELECT * FROM ((SELECT vds.* FROM  vds   WHERE  
vds.usage_cpu_percent > 80 )  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds   WHERE  
vds.usage_cpu_percent > 80 )  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 25ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN vdc_users_with_tags 
ON vds_with_tags.vds_id=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 ))  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 10ms
         testValidSql("Host: user.name = \"user1\" sortby cpu_usage desc",
-                "SELECT * FROM ((SELECT vds.* FROM  vds   LEFT OUTER JOIN 
vdc_users_with_tags ON vds.vds_id=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 )  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds   LEFT OUTER 
JOIN vdc_users_with_tags ON vds.vds_id=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 )  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 63ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( storage_pool_id IN 
(SELECT storage_pool_id FROM storage_domains WHERE  
storage_domains.storage_name LIKE 'pool1'))  ORDER BY usage_cpu_percent DESC 
NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 68ms
         testValidSql("Host: STORAGE.name = \"sd1\" sortby cpu_usage desc",
-                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vds_with_tags.storage_id=storage_domains_with_hosts_view.id    WHERE  
storage_domains_with_hosts_view.storage_name LIKE sd1 ))  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vds_with_tags.storage_id=storage_domains_with_hosts_view.id    WHERE  
storage_domains_with_hosts_view.storage_name LIKE sd1 ))  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 23ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN audit_log ON 
vds_with_tags.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = '2'  AND 
 vds_with_tags.usage_cpu_percent > 80  )))  ORDER BY usage_cpu_percent DESC 
NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 9ms
         testValidSql("Host: EVENT.severity=error and CPU_USAGE > 80 sortby 
cpu_usage desc",
-                "SELECT * FROM ((SELECT vds.* FROM  vds   LEFT OUTER JOIN 
audit_log ON vds.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = '2'  
AND  vds.usage_cpu_percent > 80  ))  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds   LEFT OUTER 
JOIN audit_log ON vds.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = 
'2'  AND  vds.usage_cpu_percent > 80  ))  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Host: EVENT.severity=error and tag=tag1 sortby cpu_usage 
desc",
-                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN audit_log ON 
vds_with_tags.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = '2'  AND 
 vds_with_tags.tag_name IN (tag1)  )))  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN audit_log 
ON vds_with_tags.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = '2'  
AND  vds_with_tags.tag_name IN (tag1)  )))  ORDER BY usage_cpu_percent DESC 
NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Host: tag=\"tag1\"",
-                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   WHERE  vds_with_tags.tag_name IN 
(tag1) ))  ORDER BY vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   WHERE  
vds_with_tags.tag_name IN (tag1) ))  ORDER BY vds_name ASC ) as T1 OFFSET (1 
-1) LIMIT 0");
         // Before: 22ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN vms_with_tags ON 
vds_with_tags.vds_id=vms_with_tags.run_on_vds    WHERE  vms_with_tags.vm_name 
LIKE 'vm1' ))  ORDER BY vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 11ms
         testValidSql("Host: vm.name=\"vm1\"",
-                "SELECT * FROM ((SELECT vds.* FROM  vds   LEFT OUTER JOIN 
vms_with_tags ON vds.vds_id=vms_with_tags.run_on_vds    WHERE  
vms_with_tags.vm_name LIKE vm1 )  ORDER BY vds_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds   LEFT OUTER 
JOIN vms_with_tags ON vds.vds_id=vms_with_tags.run_on_vds    WHERE  
vms_with_tags.vm_name LIKE vm1 )  ORDER BY vds_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
         testValidSql("Vms: cluster = default and Templates.name = template_1 
and Storage.name = storage_1",
-                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
vm_templates_storage_domain ON 
vms_with_tags.vmt_guid=vm_templates_storage_domain.vmt_guid    LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vms_with_tags.storage_id=storage_domains_with_hosts_view.id    WHERE ( (  
vms.vds_group_name LIKE default  AND  vm_templates_storage_domain.name LIKE 
template\\_1  ) AND  storage_domains_with_hosts_view.storage_name LIKE 
storage\\_1  )))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
vm_templates_storage_domain ON 
vms_with_tags.vmt_guid=vm_templates_storage_domain.vmt_guid    LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vms_with_tags.storage_id=storage_domains_with_hosts_view.id    WHERE ( (  
vms.vds_group_name LIKE default  AND  vm_templates_storage_domain.name LIKE 
template\\_1  ) AND  storage_domains_with_hosts_view.storage_name LIKE 
storage\\_1  )))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Vms: cluster = default and Templates.name = template_1 
and Storage.name = storage_1 and Vnic.network_name = vnic_1",
-                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
vm_templates_storage_domain ON 
vms_with_tags.vmt_guid=vm_templates_storage_domain.vmt_guid    LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vms_with_tags.storage_id=storage_domains_with_hosts_view.id    LEFT OUTER JOIN 
vm_interface_view ON vms_with_tags.vm_guid=vm_interface_view.vm_guid    WHERE ( 
( (  vms.vds_group_name LIKE default  AND  vm_templates_storage_domain.name 
LIKE template\\_1  ) AND  storage_domains_with_hosts_view.storage_name LIKE 
storage\\_1  ) AND  vm_interface_view.network_name LIKE vnic\\_1  )))  ORDER BY 
vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
vm_templates_storage_domain ON 
vms_with_tags.vmt_guid=vm_templates_storage_domain.vmt_guid    LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vms_with_tags.storage_id=storage_domains_with_hosts_view.id    LEFT OUTER JOIN 
vm_interface_view ON vms_with_tags.vm_guid=vm_interface_view.vm_guid    WHERE ( 
( (  vms.vds_group_name LIKE default  AND  vm_templates_storage_domain.name 
LIKE template\\_1  ) AND  storage_domains_with_hosts_view.storage_name LIKE 
storage\\_1  ) AND  vm_interface_view.network_name LIKE vnic\\_1  )))  ORDER BY 
vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testHosts() {
         testValidSql("Hosts: sortby cpu_usage desc",
-                "SELECT * FROM ((SELECT vds.* FROM  vds  )  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds.* FROM  vds  )  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
@@ -168,109 +168,111 @@
         // "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   WHERE ( ( ( ( ( ( (  
vms_with_tags.status = '1'  OR  vms_with_tags.status = '2'  ) OR  
vms_with_tags.status = '6'  ) OR  vms_with_tags.status = '9'  ) OR  
vms_with_tags.status = '10'  ) OR  vms_with_tags.status = '16'  ) OR  
vms_with_tags.status = '4'  ) OR  vms_with_tags.status = '7'  )))  ORDER BY 
usage_cpu_percent DESC NULLS LAST,vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current - 15ms
         testValidSql("Vm: status=Up or status=PoweringUp or status=MigratingTo 
or status=WaitForLaunch or status=RebootInProgress or status=PoweringDown or 
status=Paused or status=Unknown sortby cpu_usage desc",
-                "SELECT * FROM ((SELECT vms.* FROM  vms   WHERE ( ( ( ( ( ( (  
vms.status = '1'  OR  vms.status = '2'  ) OR  vms.status = '6'  ) OR  
vms.status = '9'  ) OR  vms.status = '10'  ) OR  vms.status = '16'  ) OR  
vms.status = '4'  ) OR  vms.status = '7'  ))  ORDER BY usage_cpu_percent DESC 
NULLS LAST,vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vms.* FROM  vms   WHERE ( ( ( 
( ( ( (  vms.status = '1'  OR  vms.status = '2'  ) OR  vms.status = '6'  ) OR  
vms.status = '9'  ) OR  vms.status = '10'  ) OR  vms.status = '16'  ) OR  
vms.status = '4'  ) OR  vms.status = '7'  ))  ORDER BY usage_cpu_percent DESC 
NULLS LAST,vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before - 20ms
         // "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags  ))  ORDER BY vm_name ASC ) as T1 
OFFSET (1 -1) LIMIT 0"
         // Current - 16ms
         testValidSql("Vm:",
-                "SELECT * FROM ((SELECT vms.* FROM  vms  )  ORDER BY vm_name 
ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vms.* FROM  vms  )  ORDER BY 
vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         // Before - 203ms
         // "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN vdc_users_with_tags 
ON vms_with_tags.vm_guid=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 ))  ORDER BY vm_name ASC ) as T1 OFFSET (1 
-1) LIMIT 0"
         // Current - 15ms
         testValidSql("Vm: user.name = user1",
-                "SELECT * FROM ((SELECT vms.* FROM  vms   LEFT OUTER JOIN 
vdc_users_with_tags ON vms.vm_guid=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 )  ORDER BY vm_name ASC ) as T1 OFFSET (1 
-1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vms.* FROM  vms   LEFT OUTER 
JOIN vdc_users_with_tags ON vms.vm_guid=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 )  ORDER BY vm_name ASC ) as T1 OFFSET (1 
-1) LIMIT 0");
         testValidSql("Vm: user.name = \"user1\" and user.tag=\"tag1\"",
-                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN vdc_users_with_tags 
ON vms_with_tags.vm_guid=vdc_users_with_tags.vm_guid    WHERE (  
vdc_users_with_tags.name LIKE user1  AND  vdc_users_with_tags.tag_name IN 
(tag1)  )))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
vdc_users_with_tags ON vms_with_tags.vm_guid=vdc_users_with_tags.vm_guid    
WHERE (  vdc_users_with_tags.name LIKE user1  AND  vdc_users_with_tags.tag_name 
IN (tag1)  )))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
 
         // Used to validate that searching values not in fields search all 
fields
         testValidSql("Vm: mac=00:1a:4a:d4:53:94",
-                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   WHERE  (  
vms_with_tags.vm_pool_name LIKE '%mac=00:1a:4a:d4:53:94%' OR  
vms_with_tags.run_on_vds_name LIKE '%mac=00:1a:4a:d4:53:94%' OR  
vms_with_tags.vm_fqdn LIKE '%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.tag_name 
LIKE '%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.guest_cur_user_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_description LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.quota_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_host LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_ip LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.storage_pool_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vds_group_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_comment LIKE 
'%mac=00:1a:4a:d4:53:94%' ) ))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct vms_with_tags.vm_guid FROM  vms_with_tags   WHERE  (  
vms_with_tags.vm_pool_name LIKE '%mac=00:1a:4a:d4:53:94%' OR  
vms_with_tags.run_on_vds_name LIKE '%mac=00:1a:4a:d4:53:94%' OR  
vms_with_tags.vm_fqdn LIKE '%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.tag_name 
LIKE '%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.guest_cur_user_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_description LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.quota_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_host LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_ip LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.storage_pool_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vds_group_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_comment LIKE 
'%mac=00:1a:4a:d4:53:94%' ) ))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0"!
 );
     }
 
     @Test
     public void testVms() {
         testValidSql("Vms:",
-                "SELECT * FROM ((SELECT vms.* FROM  vms  )  ORDER BY vm_name 
ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vms.* FROM  vms  )  ORDER BY 
vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Vms: storage.name = 111",
-                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vms_with_tags.storage_id=storage_domains_with_hosts_view.id    WHERE  
storage_domains_with_hosts_view.storage_name LIKE 111 ))  ORDER BY vm_name ASC 
) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vms_with_tags.storage_id=storage_domains_with_hosts_view.id    WHERE  
storage_domains_with_hosts_view.storage_name LIKE 111 ))  ORDER BY vm_name ASC 
) as T1 OFFSET (1 -1) LIMIT 0");
+        testValidSql("Vm: template.name = temp1",
+                "SELECT * FROM ((SELECT distinct vms.* FROM  vms   LEFT OUTER 
JOIN vm_templates_storage_domain ON 
vms.vmt_guid=vm_templates_storage_domain.vmt_guid    WHERE  
vm_templates_storage_domain.name LIKE temp1 )  ORDER BY vm_name ASC ) as T1 
OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testEvent() {
         testValidSql("Event: ",
-                "SELECT * FROM ((SELECT audit_log.* FROM  audit_log   WHERE 
not deleted)  ORDER BY audit_log_id DESC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct audit_log.* FROM  audit_log   
WHERE not deleted)  ORDER BY audit_log_id DESC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Event: severity=error ",
-                "SELECT * FROM ((SELECT audit_log.* FROM  audit_log   WHERE  
audit_log.severity = '2'  AND not deleted)  ORDER BY audit_log_id DESC ) as T1 
OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct audit_log.* FROM  audit_log   
WHERE  audit_log.severity = '2'  AND not deleted)  ORDER BY audit_log_id DESC ) 
as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Event: severity=alert ",
-                "SELECT * FROM ((SELECT audit_log.* FROM  audit_log   WHERE  
audit_log.severity = '10'  AND not deleted)  ORDER BY audit_log_id DESC ) as T1 
OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct audit_log.* FROM  audit_log   
WHERE  audit_log.severity = '10'  AND not deleted)  ORDER BY audit_log_id DESC 
) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 11ms
         // "SELECT * FROM (SELECT * FROM audit_log WHERE ( audit_log_id > 0 
and audit_log_id IN (SELECT audit_log.audit_log_id FROM  audit_log   LEFT OUTER 
JOIN vds_with_tags ON audit_log.vds_id=vds_with_tags.vds_id    WHERE  
vds_with_tags.vds_name LIKE host1 ) and not deleted)  ORDER BY audit_log_id 
DESC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 9ms
         testValidSql("Event: host.name = \"host1\" ",
-                "SELECT * FROM ((SELECT audit_log.* FROM  audit_log   LEFT 
OUTER JOIN vds_with_tags ON audit_log.vds_id=vds_with_tags.vds_id    WHERE  
vds_with_tags.vds_name LIKE host1  AND not deleted)  ORDER BY audit_log_id DESC 
) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct audit_log.* FROM  audit_log   
LEFT OUTER JOIN vds_with_tags ON audit_log.vds_id=vds_with_tags.vds_id    WHERE 
 vds_with_tags.vds_name LIKE host1  AND not deleted)  ORDER BY audit_log_id 
DESC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testEvents() {
         testValidSql("Events: ",
-                "SELECT * FROM ((SELECT audit_log.* FROM  audit_log   WHERE 
not deleted)  ORDER BY audit_log_id DESC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct audit_log.* FROM  audit_log   
WHERE not deleted)  ORDER BY audit_log_id DESC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testTemplate() {
         testValidSql("Template: ",
-                "SELECT * FROM ((SELECT vm_templates_view.* FROM  
vm_templates_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vm_templates_view.* FROM  
vm_templates_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Template: hosts.name = fake1",
-                "SELECT * FROM ((SELECT vm_templates_view.* FROM  
vm_templates_view   LEFT OUTER JOIN vms_with_tags ON 
vm_templates_view.vmt_guid=vms_with_tags.vmt_guid    LEFT OUTER JOIN 
vds_with_tags ON vms_with_tags.run_on_vds=vds_with_tags.vds_id    WHERE  
vds_with_tags.vds_name LIKE fake1 )  ORDER BY name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vm_templates_view.* FROM  
vm_templates_view   LEFT OUTER JOIN vms_with_tags ON 
vm_templates_view.vmt_guid=vms_with_tags.vmt_guid    LEFT OUTER JOIN 
vds_with_tags ON vms_with_tags.run_on_vds=vds_with_tags.vds_id    WHERE  
vds_with_tags.vds_name LIKE fake1 )  ORDER BY name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
         testValidSql("Templates: storage.name = 111",
-                "SELECT * FROM (SELECT * FROM vm_templates_view WHERE ( 
vmt_guid IN (SELECT vm_templates_storage_domain.vmt_guid FROM  
vm_templates_storage_domain   LEFT OUTER JOIN vms_with_tags ON 
vm_templates_storage_domain.vmt_guid=vms_with_tags.vmt_guid    LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vm_templates_storage_domain.storage_id=storage_domains_with_hosts_view.id    
WHERE  storage_domains_with_hosts_view.storage_name LIKE 111 ))  ORDER BY name 
ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vm_templates_view WHERE ( 
vmt_guid IN (SELECT distinct vm_templates_storage_domain.vmt_guid FROM  
vm_templates_storage_domain   LEFT OUTER JOIN vms_with_tags ON 
vm_templates_storage_domain.vmt_guid=vms_with_tags.vmt_guid    LEFT OUTER JOIN 
storage_domains_with_hosts_view ON 
vm_templates_storage_domain.storage_id=storage_domains_with_hosts_view.id    
WHERE  storage_domains_with_hosts_view.storage_name LIKE 111 ))  ORDER BY name 
ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testTemplates() {
         testValidSql("Templates: ",
-                "SELECT * FROM ((SELECT vm_templates_view.* FROM  
vm_templates_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vm_templates_view.* FROM  
vm_templates_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testUser() {
         testValidSql("User:",
-                "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN 
(SELECT vdc_users_with_tags.user_id FROM  vdc_users_with_tags  ))  ORDER BY 
name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN 
(SELECT distinct vdc_users_with_tags.user_id FROM  vdc_users_with_tags  ))  
ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
 
         testValidSql("User: host.name=\"host1\"",
-                "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN 
(SELECT vdc_users_with_tags.user_id FROM  vdc_users_with_tags   LEFT OUTER JOIN 
vms_with_tags ON vdc_users_with_tags.vm_guid=vms_with_tags.vm_guid    LEFT 
OUTER JOIN vds_with_tags ON vms_with_tags.run_on_vds=vds_with_tags.vds_id    
WHERE  vds_with_tags.vds_name LIKE host1 ))  ORDER BY name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN 
(SELECT distinct vdc_users_with_tags.user_id FROM  vdc_users_with_tags   LEFT 
OUTER JOIN vms_with_tags ON vdc_users_with_tags.vm_guid=vms_with_tags.vm_guid   
 LEFT OUTER JOIN vds_with_tags ON vms_with_tags.run_on_vds=vds_with_tags.vds_id 
   WHERE  vds_with_tags.vds_name LIKE host1 ))  ORDER BY name ASC ) as T1 
OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testUsers() {
         testValidSql("Users:",
-                "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN 
(SELECT vdc_users_with_tags.user_id FROM  vdc_users_with_tags  ))  ORDER BY 
name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN 
(SELECT distinct vdc_users_with_tags.user_id FROM  vdc_users_with_tags  ))  
ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testGroup() {
         testValidSql("Group:",
-                "SELECT * FROM ((SELECT ad_groups.* FROM  ad_groups  )  ORDER 
BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct ad_groups.* FROM  ad_groups  
)  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Group: name=group1",
-                "SELECT * FROM ((SELECT ad_groups.* FROM  ad_groups   WHERE  
ad_groups.name LIKE group1 )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct ad_groups.* FROM  ad_groups   
WHERE  ad_groups.name LIKE group1 )  ORDER BY name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
     }
 
     @Test
     public void testGroups() {
         testValidSql("Groups:",
-                "SELECT * FROM ((SELECT ad_groups.* FROM  ad_groups  )  ORDER 
BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct ad_groups.* FROM  ad_groups  
)  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testPool() {
         testValidSql("Pool: ",
-                "SELECT * FROM ((SELECT vm_pools_full_view.* FROM  
vm_pools_full_view  )  ORDER BY vm_pool_name ASC ) as T1 OFFSET (1 -1) LIMIT 
0");
+                "SELECT * FROM ((SELECT distinct vm_pools_full_view.* FROM  
vm_pools_full_view  )  ORDER BY vm_pool_name ASC ) as T1 OFFSET (1 -1) LIMIT 
0");
     }
 
     @Test
     public void testPools() {
         testValidSql("Pools: ",
-                "SELECT * FROM ((SELECT vm_pools_full_view.* FROM  
vm_pools_full_view  )  ORDER BY vm_pool_name ASC ) as T1 OFFSET (1 -1) LIMIT 
0");
+                "SELECT * FROM ((SELECT distinct vm_pools_full_view.* FROM  
vm_pools_full_view  )  ORDER BY vm_pool_name ASC ) as T1 OFFSET (1 -1) LIMIT 
0");
     }
 
     @Test
@@ -279,9 +281,9 @@
         // "SELECT * FROM (SELECT * FROM vds_groups_view WHERE ( vds_group_id 
IN (SELECT vds_groups_storage_domain.vds_group_id FROM  
vds_groups_storage_domain  ))  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 1ms
         testValidSql("Cluster: ",
-                "SELECT * FROM ((SELECT vds_groups_view.* FROM  
vds_groups_view  )  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds_groups_view.* FROM  
vds_groups_view  )  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Cluster: storage.name = 111",
-                "SELECT * FROM (SELECT * FROM vds_groups_view WHERE ( 
vds_group_id IN (SELECT vds_groups_storage_domain.vds_group_id FROM  
vds_groups_storage_domain   LEFT OUTER JOIN storage_domains_with_hosts_view ON 
vds_groups_storage_domain.storage_id=storage_domains_with_hosts_view.id    
WHERE  storage_domains_with_hosts_view.storage_name LIKE 111 ))  ORDER BY name 
ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vds_groups_view WHERE ( 
vds_group_id IN (SELECT distinct vds_groups_storage_domain.vds_group_id FROM  
vds_groups_storage_domain   LEFT OUTER JOIN storage_domains_with_hosts_view ON 
vds_groups_storage_domain.storage_id=storage_domains_with_hosts_view.id    
WHERE  storage_domains_with_hosts_view.storage_name LIKE 111 ))  ORDER BY name 
ASC) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
@@ -290,7 +292,7 @@
         // "SELECT * FROM (SELECT * FROM vds_groups_view WHERE ( vds_group_id 
IN (SELECT vds_groups_storage_domain.vds_group_id FROM  
vds_groups_storage_domain  ))  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 1ms
         testValidSql("Clusters: ",
-                "SELECT * FROM ((SELECT vds_groups_view.* FROM  
vds_groups_view  )  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct vds_groups_view.* FROM  
vds_groups_view  )  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
@@ -299,25 +301,25 @@
         // "SELECT * FROM (SELECT * FROM storage_pool WHERE ( id IN (SELECT 
storage_pool_with_storage_domain.id FROM  storage_pool_with_storage_domain  ))  
ORDER BY name,name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 1ms
         testValidSql("DataCenter: sortby name",
-                "SELECT * FROM ((SELECT storage_pool.* FROM  storage_pool  )  
ORDER BY name,name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct storage_pool.* FROM  
storage_pool  )  ORDER BY name,name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("DataCenter: Clusters.name =Default",
-                "SELECT * FROM ((SELECT storage_pool.* FROM  storage_pool   
LEFT OUTER JOIN vds_groups_storage_domain ON 
storage_pool.id=vds_groups_storage_domain.storage_pool_id    WHERE  
vds_groups_storage_domain.name LIKE Default )  ORDER BY name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct storage_pool.* FROM  
storage_pool   LEFT OUTER JOIN vds_groups_storage_domain ON 
storage_pool.id=vds_groups_storage_domain.storage_pool_id    WHERE  
vds_groups_storage_domain.name LIKE Default )  ORDER BY name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
     }
 
     @Test
     public void testStorage() {
         testValidSql("Storage: ",
-                "SELECT * FROM ((SELECT storage_domains_for_search.* FROM  
storage_domains_for_search  )  ORDER BY storage_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
+                "SELECT * FROM ((SELECT distinct storage_domains_for_search.* 
FROM  storage_domains_for_search  )  ORDER BY storage_name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
         testValidSql("Storage: datacenter = Default",
-                "SELECT * FROM ((SELECT storage_domains_for_search.* FROM  
storage_domains_for_search   WHERE  
storage_domains_for_search.storage_pool_name::text LIKE Default )  ORDER BY 
storage_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct storage_domains_for_search.* 
FROM  storage_domains_for_search   WHERE  
storage_domains_for_search.storage_pool_name::text LIKE Default )  ORDER BY 
storage_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Storage: host.name = fake1",
-                "SELECT * FROM ((SELECT storage_domains_for_search.* FROM  
storage_domains_for_search   LEFT OUTER JOIN vds_with_tags ON 
storage_domains_for_search.id=vds_with_tags.storage_id    WHERE  
vds_with_tags.vds_name LIKE fake1 )  ORDER BY storage_name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct storage_domains_for_search.* 
FROM  storage_domains_for_search   LEFT OUTER JOIN vds_with_tags ON 
storage_domains_for_search.id=vds_with_tags.storage_id    WHERE  
vds_with_tags.vds_name LIKE fake1 )  ORDER BY storage_name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
     }
 
     @Test
     public void testStorages() {
         testValidSql("Storages: ",
-                "SELECT * FROM ((SELECT storage_domains_for_search.* FROM  
storage_domains_for_search  )  ORDER BY storage_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
+                "SELECT * FROM ((SELECT distinct storage_domains_for_search.* 
FROM  storage_domains_for_search  )  ORDER BY storage_name ASC ) as T1 OFFSET 
(1 -1) LIMIT 0");
     }
 
     @Test
@@ -326,9 +328,9 @@
         // "SELECT * FROM (SELECT * FROM all_disks WHERE ( disk_id IN (SELECT 
all_disks.disk_id FROM  all_disks  ))  ORDER BY disk_alias ASC, disk_id ASC ) 
as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 12ms
         testValidSql("disk: ",
-                "SELECT * FROM ((SELECT all_disks.* FROM  all_disks  )  ORDER 
BY disk_alias ASC, disk_id ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct all_disks.* FROM  all_disks  
)  ORDER BY disk_alias ASC, disk_id ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("disk: alias=vm1",
-                "SELECT * FROM ((SELECT all_disks.* FROM  all_disks   WHERE  
all_disks.disk_alias LIKE vm1 )  ORDER BY disk_alias ASC, disk_id ASC ) as T1 
OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct all_disks.* FROM  all_disks   
WHERE  all_disks.disk_alias LIKE vm1 )  ORDER BY disk_alias ASC, disk_id ASC ) 
as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
@@ -337,35 +339,35 @@
         // "SELECT * FROM (SELECT * FROM all_disks WHERE ( disk_id IN (SELECT 
all_disks.disk_id FROM  all_disks  ))  ORDER BY disk_alias ASC, disk_id ASC ) 
as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 12ms
         testValidSql("disks: ",
-                "SELECT * FROM ((SELECT all_disks.* FROM  all_disks  )  ORDER 
BY disk_alias ASC, disk_id ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct all_disks.* FROM  all_disks  
)  ORDER BY disk_alias ASC, disk_id ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testVolume() {
         testValidSql("volume: ",
-                "SELECT * FROM ((SELECT gluster_volumes_view.* FROM  
gluster_volumes_view  )  ORDER BY vol_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct gluster_volumes_view.* FROM  
gluster_volumes_view  )  ORDER BY vol_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("volume: name=volume1",
-                "SELECT * FROM ((SELECT gluster_volumes_view.* FROM  
gluster_volumes_view   WHERE  gluster_volumes_view.vol_name LIKE volume1 )  
ORDER BY vol_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct gluster_volumes_view.* FROM  
gluster_volumes_view   WHERE  gluster_volumes_view.vol_name LIKE volume1 )  
ORDER BY vol_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testVolumes() {
         testValidSql("volumes: ",
-                "SELECT * FROM ((SELECT gluster_volumes_view.* FROM  
gluster_volumes_view  )  ORDER BY vol_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct gluster_volumes_view.* FROM  
gluster_volumes_view  )  ORDER BY vol_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testQuota() {
         testValidSql("quota: ",
-                "SELECT * FROM ((SELECT quota_view.* FROM  quota_view  )  
ORDER BY quota_name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct quota_view.* FROM  quota_view 
 )  ORDER BY quota_name ASC) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("quota: STORAGEPOOLNAME=pool",
-                "SELECT * FROM ((SELECT quota_view.* FROM  quota_view   WHERE  
quota_view.storage_pool_name LIKE pool )  ORDER BY quota_name ASC) as T1 OFFSET 
(1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct quota_view.* FROM  quota_view 
  WHERE  quota_view.storage_pool_name LIKE pool )  ORDER BY quota_name ASC) as 
T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testQuotas() {
         testValidSql("quota: ",
-                "SELECT * FROM ((SELECT quota_view.* FROM  quota_view  )  
ORDER BY quota_name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct quota_view.* FROM  quota_view 
 )  ORDER BY quota_name ASC) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
@@ -374,12 +376,12 @@
         // "SELECT * FROM (SELECT * FROM network_view WHERE ( id IN (SELECT 
network_view.id FROM  network_view  ))  ORDER BY storage_pool_name ASC, name 
ASC) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 1.5ms
         testValidSql("network: ",
-                "SELECT * FROM ((SELECT network_view.* FROM  network_view  )  
ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct network_view.* FROM  
network_view  )  ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) 
LIMIT 0");
         // Before: 5ms
         // "SELECT * FROM (SELECT * FROM network_view WHERE ( id IN (SELECT 
network_view.id FROM  network_view   LEFT OUTER JOIN network_cluster_view ON 
network_view.id=network_cluster_view.network_id    WHERE (  
network_cluster_view.network_name LIKE 'cluster1'  AND  network_view.name LIKE 
'network1'  )))  ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) 
LIMIT 0"
         // Current: 4ms
         testValidSql("network: CLUSTER_NETWORK.network_name=cluster1 and 
name=network1",
-                "SELECT * FROM ((SELECT network_view.* FROM  network_view   
LEFT OUTER JOIN network_cluster_view ON 
network_view.id=network_cluster_view.network_id    WHERE (  
network_cluster_view.network_name LIKE cluster1  AND  network_view.name LIKE 
network1  ))  ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) 
LIMIT 0");
+                "SELECT * FROM ((SELECT distinct network_view.* FROM  
network_view   LEFT OUTER JOIN network_cluster_view ON 
network_view.id=network_cluster_view.network_id    WHERE (  
network_cluster_view.network_name LIKE cluster1  AND  network_view.name LIKE 
network1  ))  ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) 
LIMIT 0");
     }
 
     @Test
@@ -388,7 +390,7 @@
         // "SELECT * FROM (SELECT * FROM network_view WHERE ( id IN (SELECT 
network_view.id FROM  network_view  ))  ORDER BY storage_pool_name ASC, name 
ASC) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 1.5ms
         testValidSql("networks: ",
-                "SELECT * FROM ((SELECT network_view.* FROM  network_view  )  
ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct network_view.* FROM  
network_view  )  ORDER BY storage_pool_name ASC, name ASC) as T1 OFFSET (1 -1) 
LIMIT 0");
     }
 
     @Test
@@ -397,12 +399,12 @@
         // "SELECT * FROM (SELECT * FROM providers WHERE ( id IN (SELECT 
providers.id FROM  providers  ))  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 
0"
         // Current: 1ms
         testValidSql("provider: ",
-                "SELECT * FROM ((SELECT providers.* FROM  providers  )  ORDER 
BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct providers.* FROM  providers  
)  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
         // Before: 1.2ms
         // "SELECT * FROM (SELECT * FROM providers WHERE ( id IN (SELECT 
providers.id FROM  providers   WHERE  providers.name LIKE 'prov1' ))  ORDER BY 
name ASC) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 0.7ms
         testValidSql("provider: name=\"prov1\"",
-                "SELECT * FROM ((SELECT providers.* FROM  providers   WHERE  
providers.name LIKE prov1 )  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct providers.* FROM  providers   
WHERE  providers.name LIKE prov1 )  ORDER BY name ASC) as T1 OFFSET (1 -1) 
LIMIT 0");
     }
 
     @Test
@@ -411,32 +413,32 @@
         // "SELECT * FROM (SELECT * FROM providers WHERE ( id IN (SELECT 
providers.id FROM  providers  ))  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 
0"
         // Current: 1ms
         testValidSql("providers: ",
-                "SELECT * FROM ((SELECT providers.* FROM  providers  )  ORDER 
BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct providers.* FROM  providers  
)  ORDER BY name ASC) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testInstanceType() {
         testValidSql("instancetype: ",
-                "SELECT * FROM ((SELECT instance_types_view.* FROM  
instance_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct instance_types_view.* FROM  
instance_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testInstanceTypes() {
         testValidSql("instancetype: ",
-                "SELECT * FROM ((SELECT instance_types_view.* FROM  
instance_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct instance_types_view.* FROM  
instance_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     @Test
     public void testImageType() {
         testValidSql("imagetype: ",
-                "SELECT * FROM ((SELECT image_types_view.* FROM  
image_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct image_types_view.* FROM  
image_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
 
     @Test
     public void testImageTypes() {
         testValidSql("imagetypes: ",
-                "SELECT * FROM ((SELECT image_types_view.* FROM  
image_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM ((SELECT distinct image_types_view.* FROM  
image_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
     private void testValidSql(String dynamicQuery, String exepctedSQLResult) {


-- 
To view, visit http://gerrit.ovirt.org/32676
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I070900dc9e1064c98f8b342f26dbc3c23ba8c4a4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Omer Frenkel <ofren...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to