Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
JerrySievert committed Jan 4, 2013
2 parents 8d0e290 + cfb3ca7 commit da4d9d2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
6 changes: 2 additions & 4 deletions create_collection.sql
Expand Up @@ -7,28 +7,26 @@ CREATE UNIQUE INDEX idx_collection_constraint ON collection (name);

CREATE OR REPLACE FUNCTION create_collection(collection varchar) RETURNS
boolean AS $$


var plan1 = plv8.prepare('INSERT INTO collection (name) VALUES ($1)', [ 'varchar' ]);
var plan2 = plv8.prepare('CREATE TABLE col_' + collection +
' (col_' + collection + '_id INT NOT NULL PRIMARY KEY, data JSON)');
var plan3 = plv8.prepare('CREATE SEQUENCE seq_col_' + collection);

var ret;

try {
plv8.subtransaction(function () {
plan1.execute([ collection ]);
plan2.execute([ ]);
plan3.execute([ ]);

ret = true;
});
} catch (err) {
ret = false;
}

plan1.free();
plan2.free();
plan3.free();

return ret;
$$ LANGUAGE plv8 IMMUTABLE STRICT;
22 changes: 20 additions & 2 deletions save.sql
@@ -1,12 +1,30 @@
CREATE OR REPLACE FUNCTION save(collection varchar, data json) RETURNS
BOOLEAN AS $$
var obj = JSON.parse(data);

var id = obj._id;

// if there is no id, naively assume an insert
if (id === undefined) {
var seq = plv8.prepare("SELECT nextval('seq_col_" + collection + "') AS id");



var seq;
try
{
plv8.subtransaction(function(){
seq = plv8.prepare("SELECT nextval('seq_col_" + collection + "') AS id");
});
}
catch(err)
{
if (err='Error: relation "seq_col_' + collection + '" does not exist')
{
var create_collection = plv8.find_function("create_collection");
res = create_collection(collection);
seq = plv8.prepare("SELECT nextval('seq_col_" + collection + "') AS id");
}
}

var rows = seq.execute([ ]);

id = rows[0].id;
Expand Down

0 comments on commit da4d9d2

Please sign in to comment.