/******************************************************************************* * /* * * * * Copyright 2013 Netflix, Inc. * * * * 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. * * * * ******************************************************************************/ package com.netflix.staash.common.query; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.Collection; import java.util.List; import java.lang.RuntimeException; import com.datastax.driver.core.ColumnDefinitions; import com.datastax.driver.core.Row; import com.netflix.astyanax.cql.CqlStatementResult; import com.netflix.astyanax.model.ColumnFamily; import com.netflix.astyanax.model.ColumnList; import com.netflix.astyanax.model.Rows; import com.netflix.astyanax.serializers.StringSerializer; import com.netflix.staash.json.JsonObject; import com.netflix.staash.model.StorageType; public class QueryUtils { public static String formatColumns(String columnswithtypes, StorageType stype) { // TODO Auto-generated method stub String[] allCols = columnswithtypes.split(","); String outputCols = ""; for (String col:allCols) { String type; String name; if (!col.contains(":")) { if (stype!=null && stype.getCannonicalName().equals(StorageType.MYSQL.getCannonicalName())) type = "varchar(256)"; else type="text"; name=col; } else { name = col.split(":")[0]; type = col.split(":")[1]; } outputCols = outputCols + name + " " + type +","; } return outputCols; } public static String formatQueryResult(ResultSet rs) { try { JsonObject fullResponse = new JsonObject(); int rcount = 1; while (rs.next()) { ResultSetMetaData rsmd = rs.getMetaData(); String columns =""; String values = ""; int count = rsmd.getColumnCount(); for (int i=1;i<=count;i++) { String colName = rsmd.getColumnName(i); columns = columns + colName + ","; String value = rs.getString(i); values = values + value +","; } JsonObject response = new JsonObject(); response.putString("columns", columns.substring(0, columns.length()-1)); response.putString("values", values.substring(0, values.length()-1)); fullResponse.putObject("row"+rcount++, response); } return fullResponse.toString(); } catch (SQLException e) { // TODO Auto-generated catch block //e.printStackTrace(); throw new RuntimeException(e); } } public static String formatQueryResult(com.datastax.driver.core.ResultSet rs) { // TODO Auto-generated method stub String colStr = ""; String rowStr = ""; JsonObject response = new JsonObject(); List<Row> rows = rs.all(); if (!rows.isEmpty() && rows.size() == 1) { rowStr = rows.get(0).toString(); } ColumnDefinitions colDefs = rs.getColumnDefinitions(); colStr = colDefs.toString(); response.putString("columns", colStr.substring(8, colStr.length() - 1)); response.putString("values", rowStr.substring(4, rowStr.length() - 1)); return response.toString(); } public static String formatQueryResult(CqlStatementResult rs, String cfname) { // TODO Auto-generated method stub String value = ""; JsonObject response = new JsonObject(); ColumnFamily<String, String> cf = ColumnFamily .newColumnFamily(cfname, StringSerializer.get(), StringSerializer.get()); Rows<String, String> rows = rs.getRows(cf); int rcount = 1; for (com.netflix.astyanax.model.Row<String, String> row : rows) { ColumnList<String> columns = row.getColumns(); Collection<String> colnames = columns.getColumnNames(); String rowStr = ""; String colStr = ""; if (colnames.contains("key") && colnames.contains("column1")) { colStr = colStr + columns.getDateValue("column1", null).toGMTString(); rowStr = rowStr + columns.getStringValue("value", null); response.putString(colStr, rowStr); } else { JsonObject rowObj = new JsonObject(); for (String colName:colnames) { //colStr = colStr+colname+","; value = columns.getStringValue(colName, null); //rowStr=rowStr+value+","; rowObj.putString(colName, value); } //rowobj.putString("columns", colStr); //rowobj.putString("values", rowStr); response.putObject(""+rcount++, rowObj); } } return response.toString(); } }