All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arcadedb.query.sql.executor.QueryHelper Maven / Gradle / Ivy

There is a newer version: 24.11.1
Show newest version
/*
 * Copyright © 2021-present Arcade Data Ltd ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-FileCopyrightText: 2021-present Arcade Data Ltd ([email protected])
 * SPDX-License-Identifier: Apache-2.0
 */
package com.arcadedb.query.sql.executor;

public class QueryHelper {
  protected static final char WILDCARD_ANYCHAR = '?';
  protected static final char WILDCARD_ANY     = '%';

  public static boolean like(String currentValue, String value) {
    if (currentValue == null || currentValue.isEmpty() || value == null || value.isEmpty())
      // EMPTY/NULL PARAMETERS
      return false;

    value = convertForRegExp(value);
    return currentValue.matches(value);
  }

  public static String convertForRegExp(String value) {
    // TODO: NOT EFFICIENT, IT SHOULD BROWSE ONCE AND BUILD THE FINAL RESULT
    for (int i = 0; i < value.length(); ) {
      final char c = value.charAt(i);

      final String replaceWith;
      switch (c) {
      case '\\':
        if (i + 1 < value.length()) {
          final char next = value.charAt(i + 1);
          if (next == '%')
            replaceWith = "" + next;
          else
            replaceWith = "\\\\";
        } else
          replaceWith = "\\\\";
        break;
      case '[':
        replaceWith = "\\[";
        break;
      case ']':
        replaceWith = "\\]";
        break;
      case '{':
        replaceWith = "\\{";
        break;
      case '}':
        replaceWith = "\\}";
        break;
      case '(':
        replaceWith = "\\(";
        break;
      case ')':
        replaceWith = "\\)";
        break;
      case '|':
        replaceWith = "\\|";
        break;
      case '*':
        replaceWith = "\\*";
        break;
      case '+':
        replaceWith = "\\+";
        break;
      case '$':
        replaceWith = "\\$";
        break;
      case '^':
        replaceWith = "\\^";
        break;
      case '.':
        replaceWith = "\\.";
        break;
      case WILDCARD_ANYCHAR:
        replaceWith = ".";
        break;
      case WILDCARD_ANY:
        replaceWith = ".*";
        break;

      default:
        ++i;
        continue;
      }

      value = value.substring(0, i) + replaceWith + value.substring(i + 1);
      i += replaceWith.length();
    }
    return value;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy