Eli Mesika has uploaded a new change for review.

Change subject: core: Search Engine changes
......................................................................

core: Search Engine changes

This patch adds deleted, custom_event_id and origin as a keywords to the
Search Engine and also filters out as a default deleted records (deleted
is implemented as a deleted flag in the database)

Change-Id: I6a2e1990e2f794b82e65ae86bf3009304fb28915
Signed-off-by: Eli Mesika <emes...@redhat.com>
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/AuditLogConditionFieldAutoCompleter.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
2 files changed, 65 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/95/10095/1

diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/AuditLogConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/AuditLogConditionFieldAutoCompleter.java
index bc69071..e71367f 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/AuditLogConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/AuditLogConditionFieldAutoCompleter.java
@@ -20,6 +20,9 @@
         mVerbs.put("EVENT_DATACENTER", "EVENT_DATACENTER");
         mVerbs.put("EVENT_VOLUME", "EVENT_VOLUME");
         mVerbs.put("CORRELATION_ID", "CORRELATION_ID");
+        mVerbs.put("ORIGIN", "ORIGIN");
+        mVerbs.put("CUSTOM_EVENT_ID", "CUSTOM_EVENT_ID");
+        mVerbs.put("DELETED", "DELETED");
         buildCompletions();
         // These search options remain hidden from the autocompletion
         // but still available for the user interface
@@ -52,6 +55,9 @@
         getTypeDictionary().put("EVENT_VOLUME", String.class);
         getTypeDictionary().put("_EVENT_VOLUME_ID", String.class);
         getTypeDictionary().put("CORRELATION_ID", String.class);
+        getTypeDictionary().put("ORIGIN", String.class);
+        getTypeDictionary().put("CUSTOM_EVENT_ID", Integer.class);
+        getTypeDictionary().put("DELETED", Boolean.class);
         // building the ColumnName Dict
         mColumnNameDict.put("TYPE", "log_type");
         mColumnNameDict.put("SEVERITY", "severity");
@@ -73,10 +79,14 @@
         mColumnNameDict.put("EVENT_VOLUME", "gluster_volume_name");
         mColumnNameDict.put("_EVENT_VOLUME_ID", "gluster_volume_id::varchar");
         mColumnNameDict.put("CORRELATION_ID", "correlation_id::varchar");
+        mColumnNameDict.put("ORIGIN", "origin::varchar");
+        mColumnNameDict.put("CUSTOM_EVENT_ID", "custom_event_id::int");
+        mColumnNameDict.put("DELETED", "deleted::boolean");
         // Building the validation dict
         buildBasicValidationTable();
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     public IAutoCompleter getFieldRelationshipAutoCompleter(final String 
fieldName) {
         if (StringHelper.EqOp(fieldName, "SEVERITY")) {
@@ -94,7 +104,8 @@
                 || StringHelper.EqOp(fieldName, "_EVENT_DATACENTER_ID")
                 || StringHelper.EqOp(fieldName, "_EVENT_QUOTA_ID")
                 || StringHelper.EqOp(fieldName, "EVENT_VOLUME") || 
StringHelper.EqOp(fieldName, "_EVENT_VOLUME_ID") ||
-                StringHelper.EqOp(fieldName, "CORRELATION_ID")) {
+                StringHelper.EqOp(fieldName, "CORRELATION_ID") || 
StringHelper.EqOp(fieldName, "ORIGIN") ||
+                StringHelper.EqOp(fieldName, "CUSTOM_EVENT_ID") || 
StringHelper.EqOp(fieldName, "DELETED")) {
             return StringConditionRelationAutoCompleter.INSTANCE;
         } else {
             return null;
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 a68b47a..9d0a98a 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
@@ -18,8 +18,6 @@
 import org.ovirt.engine.core.compat.StringFormat;
 import org.ovirt.engine.core.compat.StringHelper;
 
-
-
 public class SyntaxChecker implements ISyntaxChecker {
     private SearchObjectAutoCompleter mSearchObjectAC;
     private BaseAutoCompleter mColonAC;
@@ -57,9 +55,9 @@
         mStateMap.put(SyntaxObjectType.BEGIN, new SyntaxObjectType[] { 
SyntaxObjectType.SEARCH_OBJECT });
         mStateMap.put(SyntaxObjectType.SEARCH_OBJECT, new SyntaxObjectType[] { 
SyntaxObjectType.COLON });
         SyntaxObjectType[] afterColon =
-                { SyntaxObjectType.CROSS_REF_OBJ, 
SyntaxObjectType.CONDITION_FIELD,
-                        SyntaxObjectType.SORTBY, SyntaxObjectType.PAGE, 
SyntaxObjectType.CONDITION_VALUE,
-                        SyntaxObjectType.END };
+        { SyntaxObjectType.CROSS_REF_OBJ, SyntaxObjectType.CONDITION_FIELD,
+                SyntaxObjectType.SORTBY, SyntaxObjectType.PAGE, 
SyntaxObjectType.CONDITION_VALUE,
+                SyntaxObjectType.END };
         mStateMap.put(SyntaxObjectType.COLON, afterColon);
 
         SyntaxObjectType[] afterCrossRefObj = { SyntaxObjectType.DOT, 
SyntaxObjectType.CONDITION_RELATION };
@@ -164,21 +162,24 @@
 
     /**
      * gets the sql injection checker class for current db vendor.
+     *
      * @return SqlInjectionChecker
      * @throws Exception
      */
     private SqlInjectionChecker getSqlInjectionChecker() throws Exception {
         // This can not be done with reflection like:
-        //    return (SqlInjectionChecker) 
Class.forName(props.getProperty(SQL_INJECTION)).newInstance();
+        // return (SqlInjectionChecker) 
Class.forName(props.getProperty(SQL_INJECTION)).newInstance();
         // GWT lacks support of reflection.
-        if  
(((String)Config.GetValue(ConfigValues.DBEngine)).equalsIgnoreCase("postgres")){
-                return new PostgresSqlInjectionChecker();
+        if (((String) 
Config.GetValue(ConfigValues.DBEngine)).equalsIgnoreCase("postgres")) {
+            return new PostgresSqlInjectionChecker();
         }
         else {
-            throw new IllegalStateException("Failed to get correct sql 
injection checker instance name :" + SqlInjectionChecker.class);
+            throw new IllegalStateException("Failed to get correct sql 
injection checker instance name :"
+                    + SqlInjectionChecker.class);
         }
 
     }
+
     public SyntaxContainer analyzeSyntaxState(final String searchText, boolean 
final2) {
         final SyntaxContainer syntaxContainer = new 
SyntaxContainer(searchText);
         IConditionFieldAutoCompleter curConditionFieldAC = null;
@@ -259,7 +260,10 @@
                 } else if ((!"".equals(tryNextObj)) && 
(curConditionRelationAC.validate(tryNextObj))) {
                     break; // i.e. the relation object has another charecter
                 } else if (curConditionRelationAC.validate(nextObject)) {
-                    
syntaxContainer.addSyntaxObject(SyntaxObjectType.CONDITION_RELATION, 
nextObject, curStartPos, idx + 1);
+                    
syntaxContainer.addSyntaxObject(SyntaxObjectType.CONDITION_RELATION,
+                            nextObject,
+                            curStartPos,
+                            idx + 1);
                     curStartPos = idx + 1;
 
                 } else if 
((!curConditionRelationAC.validateCompletion(nextObject))
@@ -390,7 +394,10 @@
                     curRefObj = syntaxContainer.getSearchObjectStr();
                     curConditionFieldAC = 
mSearchObjectAC.getFieldAutoCompleter(curRefObj);
                     if (curConditionFieldAC.validate(nextObject)) {
-                        
syntaxContainer.addSyntaxObject(SyntaxObjectType.CONDITION_FIELD, nextObject, 
curStartPos, idx + 1);
+                        
syntaxContainer.addSyntaxObject(SyntaxObjectType.CONDITION_FIELD,
+                                nextObject,
+                                curStartPos,
+                                idx + 1);
                         curStartPos = idx + 1;
 
                     } else if (mSortbyAC.validate(nextObject)) {
@@ -413,7 +420,10 @@
                                 nextObject = sb.toString();
                             }
                         }
-                        
syntaxContainer.addSyntaxObject(SyntaxObjectType.CROSS_REF_OBJ, nextObject, 
curStartPos, idx + 1);
+                        
syntaxContainer.addSyntaxObject(SyntaxObjectType.CROSS_REF_OBJ,
+                                nextObject,
+                                curStartPos,
+                                idx + 1);
                         curStartPos = idx + 1;
                     } else if (mAndAC.validate(nextObject)) {
                         syntaxContainer.addSyntaxObject(SyntaxObjectType.AND, 
nextObject, curStartPos, idx + 1);
@@ -428,12 +438,15 @@
                             && 
(!mSearchObjectAC.validateCompletion(nextObject))
                             && (!mAndAC.validateCompletion(nextObject)) && 
(!mOrAC.validateCompletion(nextObject))) {
                         RefObject<Integer> tempRefObject3 = new 
RefObject<Integer>(curStartPos);
-                        ValueParseResult ans = handleValuePhrase(final2, 
searchText, idx, tempRefObject3, syntaxContainer);
+                        ValueParseResult ans =
+                                handleValuePhrase(final2, searchText, idx, 
tempRefObject3, syntaxContainer);
                         curStartPos = tempRefObject3.argvalue;
                         if (ans != ValueParseResult.Err) {
                             if (ans == ValueParseResult.FreeText) {
                                 if (freeTextObjSearched.contains(curRefObj)) {
-                                    
syntaxContainer.setErr(SyntaxError.FREE_TEXT_ALLOWED_ONCE_PER_OBJ, curStartPos, 
idx + 1);
+                                    
syntaxContainer.setErr(SyntaxError.FREE_TEXT_ALLOWED_ONCE_PER_OBJ,
+                                            curStartPos,
+                                            idx + 1);
                                     return syntaxContainer;
                                 }
                                 freeTextObjSearched.add(curRefObj);
@@ -441,7 +454,9 @@
                                 keepValid = true;
                             }
                         } else {
-                            
syntaxContainer.setErr(SyntaxError.INVALID_POST_CONDITION_VALUE_PHRASE, 
curStartPos, idx + 1);
+                            
syntaxContainer.setErr(SyntaxError.INVALID_POST_CONDITION_VALUE_PHRASE,
+                                    curStartPos,
+                                    idx + 1);
                             return syntaxContainer;
                         }
                     }
@@ -471,7 +486,10 @@
                         return syntaxContainer;
                     }
                 } else {
-                    
syntaxContainer.addSyntaxObject(SyntaxObjectType.CONDITION_RELATION, 
nextObject, curStartPos, idx + 1);
+                    
syntaxContainer.addSyntaxObject(SyntaxObjectType.CONDITION_RELATION,
+                            nextObject,
+                            curStartPos,
+                            idx + 1);
                 }
                 curStartPos = idx + 1;
                 syntaxContainer.setvalid(false);
@@ -512,7 +530,7 @@
                 }
                 break;
             case PAGE:
-                Integer pageNumber  = IntegerCompat.tryParse(nextObject);
+                Integer pageNumber = IntegerCompat.tryParse(nextObject);
                 if (pageNumber == null) {
                     syntaxContainer.setErr(SyntaxError.INVALID_CHARECTER, 
curStartPos, idx + 1);
                     return syntaxContainer;
@@ -527,7 +545,8 @@
                         nextObject = strRealObj.toUpperCase();
                     }
                     buff.append(nextObject);
-                    
syntaxContainer.addSyntaxObject(SyntaxObjectType.PAGE_VALUE, buff.toString(), 
curStartPos, idx + buff.length());
+                    
syntaxContainer.addSyntaxObject(SyntaxObjectType.PAGE_VALUE, buff.toString(), 
curStartPos, idx
+                            + buff.length());
                     // update index position
                     idx = pos + 1;
                     syntaxContainer.setvalid(true);
@@ -795,7 +814,7 @@
                     break;
                 case CONDITION_VALUE:
                     whereBuilder.addLast(generateConditionStatment(obj, 
syntax.listIterator(objIter.previousIndex()),
-                            searchObjStr, syntax.getCaseSensitive(),isSafe));
+                            searchObjStr, syntax.getCaseSensitive(), isSafe));
                     break;
                 case SORTBY:
                     break;
@@ -871,7 +890,7 @@
             String inQuery =
                     (primeryKey.equals("audit_log_id")
                             ?
-                            StringFormat.format("SELECT * FROM %1$s WHERE ( 
%2$s > %3$s and %2$s IN (%4$s)",
+                            StringFormat.format("SELECT * FROM %1$s WHERE ( 
%2$s > %3$s and %2$s IN (%4$s) and not deleted",
                                     tableNameWithOutTags,
                                     primeryKey,
                                     syntax.getSearchFrom(),
@@ -883,7 +902,7 @@
                     StringFormat.format(Config.<String> 
GetValue(ConfigValues.DBSearchTemplate), sortByPhrase, inQuery,
                             pagePhrase);
             // Check for sql injection if query is not safe
-            if (! isSafe) {
+            if (!isSafe) {
                 if (sqlInjectionChecker.hasSqlInjection(retval)) {
                     throw new SqlInjectionException();
                 }
@@ -1028,9 +1047,9 @@
             customizedRelation = previous.getBody();
         }
 
-        if(conditionValueAC == null && ("".equals(fieldName) ||
+        if (conditionValueAC == null && ("".equals(fieldName) ||
                 
String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) {
-            /* enable case-insensitive search by changing operation to I/LIKE*/
+            /* enable case-insensitive search by changing operation to I/LIKE 
*/
             if ("=".equals(customizedRelation)) {
                 customizedRelation = 
BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive);
             } else if ("!=".equals(customizedRelation)) {
@@ -1056,8 +1075,8 @@
         if (conditionValueAC != null) {
             customizedValue = StringFormat.format("'%1$s'",
                     
conditionValueAC.convertFieldEnumValueToActualValue(obj.getBody()));
-        } else if ("".equals(fieldName) /* search on all relevant fields */ ||
-                  
(String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) {
+        } else if ("".equals(fieldName) /* search on all relevant fields */||
+                
(String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) {
             customizedValue = customizedValue.replace('*', '%');
         }
         return customizedValue;
@@ -1077,10 +1096,17 @@
         switch (conditionType) {
         case FreeText:
         case FreeTextSpecificObj:
-            return conditionFieldAC.buildFreeTextConditionSql(tableName, 
customizedRelation, customizedValue, caseSensitive);
+            return conditionFieldAC.buildFreeTextConditionSql(tableName,
+                    customizedRelation,
+                    customizedValue,
+                    caseSensitive);
         case ConditionWithDefaultObj:
         case ConditionwithSpesificObj:
-            return conditionFieldAC.buildConditionSql(fieldName, 
customizedValue, customizedRelation, tableName, caseSensitive);
+            return conditionFieldAC.buildConditionSql(fieldName,
+                    customizedValue,
+                    customizedRelation,
+                    tableName,
+                    caseSensitive);
         default:
             return "";
         }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6a2e1990e2f794b82e65ae86bf3009304fb28915
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <emes...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to