Java Code Examples for org.apache.calcite.sql.validate.SqlMoniker#getType()

The following examples show how to use org.apache.calcite.sql.validate.SqlMoniker#getType() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: TestSQLAnalyzer.java    From dremio-oss with Apache License 2.0 6 votes vote down vote up
/**
 * Check that the returned suggestions list contains the expected hints.
 *
 * @param suggestions The list of query hints
 */
private void assertSuggestions(List<SqlMoniker> suggestions) {
  for (SqlMoniker hint : suggestions) {
    switch (hint.getType()) {
      case CATALOG:
        assertEquals(TEST_CATALOG ,hint.getFullyQualifiedNames().get(0));
        break;
      case SCHEMA:
        assertEquals(TEST_SCHEMA ,hint.getFullyQualifiedNames().get(0));
        break;
      case TABLE:
        assertEquals(TEST_TABLE ,hint.getFullyQualifiedNames().get(0));
        break;
      case KEYWORD:
        assertTrue(FROM_KEYWORDS.contains(hint.getFullyQualifiedNames().get(0)));
        break;
      default:
        Assert.fail();
    }
  }
}
 
Example 2
Source File: SQLResource.java    From dremio-oss with Apache License 2.0 6 votes vote down vote up
/**
 * Builds the response object for query suggestions.
 *
 * @param suggestionList  The suggestion list returned from the SqlAdvisor.
 *
 * @return The built SuggestionResponse object or null if there are no suggestions.
 */
public SuggestionResponse buildSuggestionResponse(List<SqlMoniker> suggestionList) {

  // Return empty response in REST request
  if (suggestionList == null || suggestionList.isEmpty()) {
    return null;
  }

  // Create and populate suggestion response list
  List<SuggestionResponse.Suggestion> suggestions = new ArrayList<>();
  for (SqlMoniker hint : suggestionList) {

    // Quote the identifiers if they are not keywords or functions,
    // and are required to be quoted.
    List<String> qualifiedNames = hint.getFullyQualifiedNames();
    if ((hint.getType() != SqlMonikerType.KEYWORD) && (hint.getType() != SqlMonikerType.FUNCTION)) {
      qualifiedNames = qualifiedNames.stream().map(name -> quoteIdentifier(name)).collect(Collectors.toList());
    }

    suggestions.add(
      new SuggestionResponse.Suggestion(Joiner.on(".").join(qualifiedNames),hint.getType().name()));
  }

  SuggestionResponse response = new SuggestionResponse(suggestions);
  return response;
}
 
Example 3
Source File: SqlAdvisorTest.java    From calcite with Apache License 2.0 5 votes vote down vote up
private String convertCompletionHints(List<SqlMoniker> hints) {
  if (hints == null) {
    return "<<NULL>>";
  }
  List<String> list = new ArrayList<String>();
  for (SqlMoniker hint : hints) {
    if (hint.getType() != SqlMonikerType.FUNCTION) {
      list.add(hint.id());
    }
  }
  Collections.sort(list);
  return toString(list);
}
 
Example 4
Source File: SqlAdvisor.java    From Bats with Apache License 2.0 4 votes vote down vote up
public String getReplacement(SqlMoniker hint, boolean quoted, Casing preferredCasing) {
  String name = Util.last(hint.getFullyQualifiedNames());
  boolean isKeyword = hint.getType() == SqlMonikerType.KEYWORD;
  // If replacement has mixed case, we need to quote it (or not depending
  // on quotedCasing/unquotedCasing
  quoted &= !isKeyword;

  if (!quoted && !isKeyword && getReservedAndKeyWordsSet().contains(name)) {
    quoted = true;
  }

  StringBuilder sb =
      new StringBuilder(name.length() + (quoted ? 2 : 0));

  if (!isKeyword && !Util.isValidJavaIdentifier(name)) {
    // needs quotes ==> quoted
    quoted = true;
  }
  String idToAppend = name;

  if (!quoted) {
    // id ==preferredCasing==> preferredId ==unquotedCasing==> recasedId
    // if recasedId matches id, then use preferredId
    String preferredId = applyCasing(name, preferredCasing);
    if (isKeyword || matchesUnquoted(name, preferredId)) {
      idToAppend = preferredId;
    } else {
      // Check if we can use unquoted identifier as is: for instance, unquotedCasing==UNCHANGED
      quoted = !matchesUnquoted(name, idToAppend);
    }
  }
  if (quoted) {
    sb.append(quoteStart());
  }
  sb.append(idToAppend);
  if (quoted) {
    sb.append(quoteEnd());
  }

  return sb.toString();
}
 
Example 5
Source File: SqlAdvisor.java    From calcite with Apache License 2.0 4 votes vote down vote up
public String getReplacement(SqlMoniker hint, boolean quoted, Casing preferredCasing) {
  String name = Util.last(hint.getFullyQualifiedNames());
  boolean isKeyword = hint.getType() == SqlMonikerType.KEYWORD;
  // If replacement has mixed case, we need to quote it (or not depending
  // on quotedCasing/unquotedCasing
  quoted &= !isKeyword;

  if (!quoted && !isKeyword && getReservedAndKeyWordsSet().contains(name)) {
    quoted = true;
  }

  StringBuilder sb =
      new StringBuilder(name.length() + (quoted ? 2 : 0));

  if (!isKeyword && !Util.isValidJavaIdentifier(name)) {
    // needs quotes ==> quoted
    quoted = true;
  }
  String idToAppend = name;

  if (!quoted) {
    // id ==preferredCasing==> preferredId ==unquotedCasing==> recasedId
    // if recasedId matches id, then use preferredId
    String preferredId = applyCasing(name, preferredCasing);
    if (isKeyword || matchesUnquoted(name, preferredId)) {
      idToAppend = preferredId;
    } else {
      // Check if we can use unquoted identifier as is: for instance, unquotedCasing==UNCHANGED
      quoted = !matchesUnquoted(name, idToAppend);
    }
  }
  if (quoted) {
    sb.append(quoteStart());
  }
  sb.append(idToAppend);
  if (quoted) {
    sb.append(quoteEnd());
  }

  return sb.toString();
}