package org.apache.cassandra.cli; import org.apache.cassandra.thrift.CfDef; import org.apache.cassandra.thrift.IndexOperator; import org.apache.cassandra.thrift.KsDef; import java.util.LinkedHashSet; import java.util.Set; /* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. * */ public class CliUtils { /** * Strips leading and trailing "'" characters, and handles * and escaped characters such as \n, \r, etc. * @param b - string to unescape * @return String - unexspaced string */ public static String unescapeSQLString(String b) { int j = 1; final char start = b.charAt(0); final char end = b.charAt(b.length() - 1); if (start != '\'' && end != '\'') { j = 0; } StringBuilder sb = new StringBuilder(b.length()); for (int i = j; ((j == 0) ? i : i + 1) < b.length(); i++) { if (b.charAt(i) == '\\' && i + 2 < b.length()) { char n = b.charAt(i + 1); switch (n) { case '0': sb.append("\0"); break; case '\'': sb.append("'"); break; case '"': sb.append("\""); break; case 'b': sb.append("\b"); break; case 'n': sb.append("\n"); break; case 'r': sb.append("\r"); break; case 't': sb.append("\t"); break; case 'Z': sb.append("\u001A"); break; case '\\': sb.append("\\"); break; case '%': sb.append("%"); break; case '_': sb.append("_"); break; default: sb.append(n); } } else { sb.append(b.charAt(i)); } } return sb.toString(); } /** * Returns IndexOperator from string representation * @param operator - string representing IndexOperator (=, >=, >, <, <=) * @return IndexOperator - enum value of IndexOperator or null if not found */ public static IndexOperator getIndexOperator(String operator) { if (operator.equals("=")) { return IndexOperator.EQ; } else if (operator.equals(">=")) { return IndexOperator.GTE; } else if (operator.equals(">")) { return IndexOperator.GT; } else if (operator.equals("<")) { return IndexOperator.LT; } else if (operator.equals("<=")) { return IndexOperator.LTE; } return null; } /** * Returns set of column family names in specified keySpace. * @param keySpace - keyspace definition to get column family names from. * @return Set - column family names */ public static Set<String> getCfNamesByKeySpace(KsDef keySpace) { Set<String> names = new LinkedHashSet<String>(); for (CfDef cfDef : keySpace.getCf_defs()) { names.add(cfDef.getName()); } return names; } }