Skip to content

Instantly share code, notes, and snippets.

View nathanlws's full-sized avatar

Nathan Williams nathanlws

  • San Francisco, CA
View GitHub Profile
@nathanlws
nathanlws / ar_bulk_insert.rb
Last active August 29, 2015 14:13
ActiveRecord Insert Test
require 'active_record'
require 'benchmark'
require 'faker'
ActiveRecord::Base.establish_connection(
adapter: 'fdbsql', database: 'test', host: 'localhost', pool: 20
)
class User < ActiveRecord::Base
end
@nathanlws
nathanlws / UniqueDemo.java
Created January 14, 2015 15:36
FoundationDB Key-Value Store Unique Constraint
import com.foundationdb.*;
import com.foundationdb.async.*;
import com.foundationdb.directory.*;
import com.foundationdb.tuple.*;
public class UniqueDemo
{
public static void main(String[] args) {
FDB fdb = FDB.selectAPIVersion(200);
UniqueDemo app = new UniqueDemo(fdb);
@nathanlws
nathanlws / TableFinder.java
Created November 19, 2014 15:09
TableFinder
import com.foundationdb.sql.parser.*;
import com.foundationdb.sql.StandardException;
public class TableFinder {
public static void main(String[] args) throws Exception {
SQLParser parser = new SQLParser();
for(String sql : args) {
StatementNode node = parser.parseStatement(sql);
node.accept(new FromTablePrinter());
}
@nathanlws
nathanlws / Query Splitter Output
Last active August 29, 2015 14:01
Query Splitter
$ java -cp fdb-sql-parser-1.2.0.jar:. QuerySplitter "select * from a,b where (a.name='xyz' or a.id>5 ) and (b.name='abc' or b.id=5)"
original: select * from a,b where (a.name='xyz' or a.id>5 ) and (b.name='abc' or b.id=5)
unparsed: SELECT * FROM a, b WHERE ((a.name = 'xyz') OR (a.id > 5)) AND ((b.name = 'abc') OR (b.id = 5))
table a: SELECT * FROM a WHERE ((a.name = 'xyz') OR (a.id > 5)) AND (TRUE OR TRUE)
table b: SELECT * FROM b WHERE (TRUE OR TRUE) AND ((b.name = 'abc') OR (b.id = 5))
@nathanlws
nathanlws / Paramer.java
Last active August 29, 2015 13:57
SQL Parser Paramer
import com.foundationdb.sql.parser.BinaryRelationalOperatorNode;
import com.foundationdb.sql.parser.ConstantNode;
import com.foundationdb.sql.parser.NodeTypes;
import com.foundationdb.sql.parser.ParameterNode;
import com.foundationdb.sql.parser.Visitable;
import com.foundationdb.sql.parser.Visitor;
import java.util.LinkedHashMap;
import java.util.Map;
@nathanlws
nathanlws / NormalizerDemo.java
Created February 27, 2014 15:30
BooleanNormalizer Example
import com.foundationdb.sql.compiler.BooleanNormalizer;
import com.foundationdb.sql.parser.SQLParser;
import com.foundationdb.sql.parser.StatementNode;
import com.foundationdb.sql.unparser.NodeToString;
public class NormalizerDemo {
public static void main(String[] args) throws Exception {
if(args.length == 0) {
return;
}
@nathanlws
nathanlws / ParserOrderBy.java
Created July 22, 2013 19:16
Parser ORDER BY
import com.akiban.sql.parser.*;
public class ParserOrderBy {
public static void main(String[] args) throws Exception {
String sql = "Select id, refName from refRepo where property='SQL' order by id asc";
System.out.println("SQL: " + sql);
SQLParser parser = new SQLParser();
StatementNode node = parser.parseStatement(sql);
System.out.println(node);
}
@nathanlws
nathanlws / CustomCase.java
Last active December 18, 2015 14:29
FoundationDB SQL Parser IdentifierCase
//
// See: https://github.com/foundationdb/sql-parser
//
import com.foundationdb.sql.parser.*;
import com.foundationdb.sql.parser.SQLParserContext.*;
public class CustomCase {
public static class ColumnNamePrinter implements Visitor {
@Override
@nathanlws
nathanlws / 0_config.json
Last active December 15, 2015 19:49
Akiban REST with Python
{
"host": "<host>",
"port": "<port>",
"user": "<user>",
"pass": "<pass>"
}