Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Simple command line client to read/write from a database using a DB i…

…mplementation. Useful for testing DB layers, and inspecting values in the database.
  • Loading branch information...
commit b71723cf22e16d7aa7fb28fe6997cc83a6d8dd90 1 parent 4881171
@brianfrankcooper brianfrankcooper authored
Showing with 404 additions and 6 deletions.
  1. +6 −6 src/com/yahoo/ycsb/Client.java
  2. +398 −0 src/com/yahoo/ycsb/CommandLine.java
View
12 src/com/yahoo/ycsb/Client.java
@@ -400,7 +400,7 @@ public static void main(String[] args)
if (args[argindex].compareTo("-threads")==0)
{
argindex++;
- if (argindex>args.length)
+ if (argindex>=args.length)
{
usageMessage();
System.exit(0);
@@ -412,7 +412,7 @@ public static void main(String[] args)
else if (args[argindex].compareTo("-target")==0)
{
argindex++;
- if (argindex>args.length)
+ if (argindex>=args.length)
{
usageMessage();
System.exit(0);
@@ -439,7 +439,7 @@ else if (args[argindex].compareTo("-s")==0)
else if (args[argindex].compareTo("-db")==0)
{
argindex++;
- if (argindex>args.length)
+ if (argindex>=args.length)
{
usageMessage();
System.exit(0);
@@ -450,7 +450,7 @@ else if (args[argindex].compareTo("-db")==0)
else if (args[argindex].compareTo("-l")==0)
{
argindex++;
- if (argindex>args.length)
+ if (argindex>=args.length)
{
usageMessage();
System.exit(0);
@@ -461,7 +461,7 @@ else if (args[argindex].compareTo("-l")==0)
else if (args[argindex].compareTo("-P")==0)
{
argindex++;
- if (argindex>args.length)
+ if (argindex>=args.length)
{
usageMessage();
System.exit(0);
@@ -492,7 +492,7 @@ else if (args[argindex].compareTo("-P")==0)
else if (args[argindex].compareTo("-p")==0)
{
argindex++;
- if (argindex>args.length)
+ if (argindex>=args.length)
{
usageMessage();
System.exit(0);
View
398 src/com/yahoo/ycsb/CommandLine.java
@@ -0,0 +1,398 @@
+/**
+ * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
+ *
+ * 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. See accompanying
+ * LICENSE file.
+ */
+
+package com.yahoo.ycsb;
+
+import java.util.Properties;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Vector;
+
+import com.yahoo.ycsb.workloads.*;
+
+/**
+ * A simple command line client to a database, using the appropriate com.yahoo.ycsb.DB implementation.
+ */
+public class CommandLine
+{
+ public static final String DEFAULT_DB="com.yahoo.ycsb.BasicDB";
+
+ public static void usageMessage()
+ {
+ System.out.println("YCSB Command Line Client");
+ System.out.println("Usage: java com.yahoo.ycsb.CommandLine [options]");
+ System.out.println("Options:");
+ System.out.println(" -P filename: Specify a property file");
+ System.out.println(" -p name=value: Specify a property value");
+ System.out.println(" -db classname: Use a specified DB class (can also set the \"db\" property)");
+ System.out.println(" -table tablename: Use the table name instead of the default \""+CoreWorkload.TABLENAME+"\"");
+ System.out.println();
+ }
+
+ public static void help()
+ {
+ System.out.println("Commands:");
+ System.out.println(" read key [field1 field2 ...] - Read a record");
+ System.out.println(" scan key recordcount [field1 field2 ...] - Scan starting at key");
+ System.out.println(" insert key name1=value1 [name2=value2 ...] - Insert a new record");
+ System.out.println(" update key name1=value1 [name2=value2 ...] - Update a record");
+ System.out.println(" delete key - Delete a record");
+ System.out.println(" table [tablename] - Get or [set] the name of the table");
+ System.out.println(" quit - Quit");
+ }
+
+ public static void main(String[] args)
+ {
+ int argindex=0;
+
+ Properties props=new Properties();
+ Properties fileprops=new Properties();
+ String table=CoreWorkload.TABLENAME;
+
+ while ( (argindex<args.length) && (args[argindex].startsWith("-")) )
+ {
+ if ( (args[argindex].compareTo("-help")==0) ||
+ (args[argindex].compareTo("--help")==0) ||
+ (args[argindex].compareTo("-?")==0) ||
+ (args[argindex].compareTo("--?")==0) )
+ {
+ usageMessage();
+ System.exit(0);
+ }
+
+ if (args[argindex].compareTo("-db")==0)
+ {
+ argindex++;
+ if (argindex>=args.length)
+ {
+ usageMessage();
+ System.exit(0);
+ }
+ props.setProperty("db",args[argindex]);
+ argindex++;
+ }
+ else if (args[argindex].compareTo("-P")==0)
+ {
+ argindex++;
+ if (argindex>=args.length)
+ {
+ usageMessage();
+ System.exit(0);
+ }
+ String propfile=args[argindex];
+ argindex++;
+
+ Properties myfileprops=new Properties();
+ try
+ {
+ myfileprops.load(new FileInputStream(propfile));
+ }
+ catch (IOException e)
+ {
+ System.out.println(e.getMessage());
+ System.exit(0);
+ }
+
+ for (Enumeration e=myfileprops.propertyNames(); e.hasMoreElements(); )
+ {
+ String prop=(String)e.nextElement();
+
+ fileprops.setProperty(prop,myfileprops.getProperty(prop));
+ }
+
+ }
+ else if (args[argindex].compareTo("-p")==0)
+ {
+ argindex++;
+ if (argindex>=args.length)
+ {
+ usageMessage();
+ System.exit(0);
+ }
+ int eq=args[argindex].indexOf('=');
+ if (eq<0)
+ {
+ usageMessage();
+ System.exit(0);
+ }
+
+ String name=args[argindex].substring(0,eq);
+ String value=args[argindex].substring(eq+1);
+ props.put(name,value);
+ //System.out.println("["+name+"]=["+value+"]");
+ argindex++;
+ }
+ else if (args[argindex].compareTo("-table")==0)
+ {
+ argindex++;
+ if (argindex>=args.length)
+ {
+ usageMessage();
+ System.exit(0);
+ }
+ table=args[argindex];
+ argindex++;
+ }
+ else
+ {
+ System.out.println("Unknown option "+args[argindex]);
+ usageMessage();
+ System.exit(0);
+ }
+
+ if (argindex>=args.length)
+ {
+ break;
+ }
+ }
+
+ if (argindex!=args.length)
+ {
+ usageMessage();
+ System.exit(0);
+ }
+
+ for (Enumeration e=props.propertyNames(); e.hasMoreElements(); )
+ {
+ String prop=(String)e.nextElement();
+
+ fileprops.setProperty(prop,props.getProperty(prop));
+ }
+
+ props=fileprops;
+
+ //create a DB
+ String dbname=props.getProperty("db",DEFAULT_DB);
+
+ ClassLoader classLoader = CommandLine.class.getClassLoader();
+
+ DB db=null;
+
+ try
+ {
+ Class dbclass = classLoader.loadClass(dbname);
+ db=(DB)dbclass.newInstance();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ System.exit(0);
+ }
+
+ db.setProperties(props);
+ try
+ {
+ db.init();
+ }
+ catch (DBException e)
+ {
+ e.printStackTrace();
+ System.exit(0);
+ }
+
+ System.out.println("Connected.");
+
+ //main loop
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ for (;;)
+ {
+ //get user input
+ System.out.print("> ");
+
+ String input=null;
+
+ try
+ {
+ input=br.readLine();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ if (input.compareTo("")==0)
+ {
+ continue;
+ }
+
+ if (input.compareTo("help")==0)
+ {
+ help();
+ continue;
+ }
+
+ if (input.compareTo("quit")==0)
+ {
+ break;
+ }
+
+ String[] tokens=input.split(" ");
+
+ long st=System.currentTimeMillis();
+ //handle commands
+ if (tokens[0].compareTo("table")==0)
+ {
+ if (tokens.length==1)
+ {
+ System.out.println("Using table \""+table+"\"");
+ }
+ else if (tokens.length==2)
+ {
+ table=tokens[1];
+ System.out.println("Using table \""+table+"\"");
+ }
+ else
+ {
+ System.out.println("Error: syntax is \"table tablename\"");
+ }
+ }
+ else if (tokens[0].compareTo("read")==0)
+ {
+ if (tokens.length==1)
+ {
+ System.out.println("Error: syntax is \"read keyname [field1 field2 ...]\"");
+ }
+ else
+ {
+ Set<String> fields=null;
+
+ if (tokens.length>2)
+ {
+ fields=new HashSet<String>();
+
+ for (int i=2; i<tokens.length; i++)
+ {
+ fields.add(tokens[i]);
+ }
+ }
+
+ HashMap<String,String> result=new HashMap<String,String>();
+ int ret=db.read(table,tokens[1],fields,result);
+ System.out.println("Return code: "+ret);
+ for (Map.Entry<String,String> ent : result.entrySet())
+ {
+ System.out.println(ent.getKey()+"="+ent.getValue());
+ }
+ }
+ }
+ else if (tokens[0].compareTo("scan")==0)
+ {
+ if (tokens.length<3)
+ {
+ System.out.println("Error: syntax is \"scan keyname scanlength [field1 field2 ...]\"");
+ }
+ else
+ {
+ Set<String> fields=null;
+
+ if (tokens.length>3)
+ {
+ fields=new HashSet<String>();
+
+ for (int i=3; i<tokens.length; i++)
+ {
+ fields.add(tokens[i]);
+ }
+ }
+
+ Vector<HashMap<String,String>> results=new Vector<HashMap<String,String>>();
+ int ret=db.scan(table,tokens[1],Integer.parseInt(tokens[2]),fields,results);
+ System.out.println("Return code: "+ret);
+ int record=0;
+ for (HashMap<String,String> result : results)
+ {
+ System.out.println("Record"+(record++));
+ for (Map.Entry<String,String> ent : result.entrySet())
+ {
+ System.out.println(ent.getKey()+"="+ent.getValue());
+ }
+ System.out.println("--------------------------------");
+ }
+ }
+ }
+ else if (tokens[0].compareTo("update")==0)
+ {
+ if (tokens.length<3)
+ {
+ System.out.println("Error: syntax is \"update keyname name1=value1 [name2=value2 ...]\"");
+ }
+ else
+ {
+ HashMap<String,String> values=new HashMap<String,String>();
+
+ for (int i=2; i<tokens.length; i++)
+ {
+ String[] nv=tokens[i].split("=");
+ values.put(nv[0],nv[1]);
+ }
+
+ int ret=db.update(table,tokens[1],values);
+ System.out.println("Return code: "+ret);
+ }
+ }
+ else if (tokens[0].compareTo("insert")==0)
+ {
+ if (tokens.length<3)
+ {
+ System.out.println("Error: syntax is \"insert keyname name1=value1 [name2=value2 ...]\"");
+ }
+ else
+ {
+ HashMap<String,String> values=new HashMap<String,String>();
+
+ for (int i=2; i<tokens.length; i++)
+ {
+ String[] nv=tokens[i].split("=");
+ values.put(nv[0],nv[1]);
+ }
+
+ int ret=db.insert(table,tokens[1],values);
+ System.out.println("Return code: "+ret);
+ }
+ }
+ else if (tokens[0].compareTo("delete")==0)
+ {
+ if (tokens.length!=2)
+ {
+ System.out.println("Error: syntax is \"delete keyname\"");
+ }
+ else
+ {
+ int ret=db.delete(table,tokens[1]);
+ System.out.println("Return code: "+ret);
+ }
+ }
+ else
+ {
+ System.out.println("Error: unknown command \""+tokens[0]+"\"");
+ }
+
+ System.out.println((System.currentTimeMillis()-st)+" ms");
+
+ }
+ }
+
+}
Please sign in to comment.
Something went wrong with that request. Please try again.