blob: 72a9d2b40a0657c6bb43929af8a850a97336ff91 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Sb is a syncbase general-purpose client and management utility.
// It currently supports syncQL (the syncbase query language).
//
// The 'sh' command connects to a specified database on a syncbase instance,
// creating it if it does not exist if -create-missing is specified.
// The user can then enter the following at the command line:
// 1. dump - to get a dump of the database
// 2. a syncQL select statement - which is executed and results printed to stdout
// 3. a syncQL delete statement - which is executed to delete k/v pairs from a collection
// 4. destroy {db|collection|syncgroup} <identifier> - to destroy a syncbase object
// 5. make-demo - to create demo collections in the database to experiment with, equivalent to -make-demo flag
// 5. exit (or quit) - to exit the program
//
// When the shell is running non-interactively (stdin not connected to a tty),
// errors cause the shell to exit with a non-zero status.
//
// To build client:
// jiri go install v.io/x/ref/cmd/sb
//
// To run client:
// $JIRI_ROOT/release/go/bin/sb sh <app_blessing> <db_name>
//
// Sample run (assuming a syncbase service is mounted at '/:8101/syncbase',
// otherwise specify using -service flag):
// > $JIRI_ROOT/release/go/bin/sb sh -create-missing -make-demo -format=csv demoapp demodb
// ? select v.Name, v.Address.State from Customers where Type(v) = "Customer";
// v.Name,v.Address.State
// John Smith,CA
// Bat Masterson,IA
// ? select v.CustId, v.InvoiceNum, v.ShipTo.Zip, v.Amount from Customers where Type(v) = "Invoice" and v.Amount > 100;
// v.CustId,v.InvoiceNum,v.ShipTo.Zip,v.Amount
// 2,1001,50055,166
// 2,1002,50055,243
// 2,1004,50055,787
// ? select k, v fro Customers;
// Error:
// select k, v fro Customers
// ^
// 13: Expected 'from', found fro.
// ? select k, v from Customers;
// k,v
// 001,"{Name: ""John Smith"", Id: 1, Active: true, Address: {Street: ""1 Main St."", City: ""Palo Alto"", State: ""CA"", Zip: ""94303""}, Credit: {Agency: Equifax, Report: EquifaxReport: {Rating: 65}}}"
// 001001,"{CustId: 1, InvoiceNum: 1000, Amount: 42, ShipTo: {Street: ""1 Main St."", City: ""Palo Alto"", State: ""CA"", Zip: ""94303""}}"
// 001002,"{CustId: 1, InvoiceNum: 1003, Amount: 7, ShipTo: {Street: ""2 Main St."", City: ""Palo Alto"", State: ""CA"", Zip: ""94303""}}"
// 001003,"{CustId: 1, InvoiceNum: 1005, Amount: 88, ShipTo: {Street: ""3 Main St."", City: ""Palo Alto"", State: ""CA"", Zip: ""94303""}}"
// 002,"{Name: ""Bat Masterson"", Id: 2, Active: true, Address: {Street: ""777 Any St."", City: ""Collins"", State: ""IA"", Zip: ""50055""}, Credit: {Agency: TransUnion, Report: TransUnionReport: {Rating: 80}}}"
// 002001,"{CustId: 2, InvoiceNum: 1001, Amount: 166, ShipTo: {Street: ""777 Any St."", City: ""Collins"", State: ""IA"", Zip: ""50055""}}"
// 002002,"{CustId: 2, InvoiceNum: 1002, Amount: 243, ShipTo: {Street: ""888 Any St."", City: ""Collins"", State: ""IA"", Zip: ""50055""}}"
// 002003,"{CustId: 2, InvoiceNum: 1004, Amount: 787, ShipTo: {Street: ""999 Any St."", City: ""Collins"", State: ""IA"", Zip: ""50055""}}"
// 002004,"{CustId: 2, InvoiceNum: 1006, Amount: 88, ShipTo: {Street: ""101010 Any St."", City: ""Collins"", State: ""IA"", Zip: ""50055""}}"
// ? delete from Customers where k = "001002";
// +-------+
// | Count |
// +-------+
// | 1 |
// +-------+
// ? exit;
// >
package main