2014-01-28 09:26:25 -05:00
<!DOCTYPE html> < html lang = "en" > < head > < title > clients/server/postgres/grammar< / title > < / head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" > < meta name = "groc-relative-root" content = "../../../" > < meta name = "groc-document-path" content = "clients/server/postgres/grammar" > < meta name = "groc-project-path" content = "clients/server/postgres/grammar.js" > < link rel = "stylesheet" type = "text/css" media = "all" href = "../../../assets/style.css" > < script type = "text/javascript" src = "../../../assets/behavior.js" > < / script > < body > < div id = "meta" > < div class = "file-path" > clients/server/postgres/grammar.js< / div > < / div > < div id = "document" > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < h2 id = "postgresql-grammar" > PostgreSQL Grammar< / h2 > < / div > < / div > < / div > < div class = "segment" > < div class = "code" > < div class = "wrapper" > < span class = "kd" > var< / span > < span class = "nx" > _< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' lodash' < / span > < span class = "p" > );< / span >
2013-09-18 11:56:32 -04:00
< span class = "kd" > var< / span > < span class = "nx" > Helpers< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' ../../../lib/helpers' < / span > < span class = "p" > ).< / span > < span class = "nx" > Helpers< / span > < span class = "p" > ;< / span >
2014-01-28 09:26:25 -05:00
< span class = "kd" > var< / span > < span class = "nx" > baseGrammar< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' ../../base/grammar' < / span > < span class = "p" > ).< / span > < span class = "nx" > baseGrammar< / span > < span class = "p" > ;< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > Extends the standard sql grammar.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > exports< / span > < span class = "p" > .< / span > < span class = "nx" > grammar< / span > < span class = "o" > =< / span > < span class = "nx" > _< / span > < span class = "p" > .< / span > < span class = "nx" > defaults< / span > < span class = "p" > ({< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > The keyword identifier wrapper format.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > wrapValue< / span > < span class = "o" > :< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > value< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-09-17 07:15:18 -04:00
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "nx" > value< / span > < span class = "o" > !==< / span > < span class = "s1" > ' *' < / span > < span class = "o" > ?< / span > < span class = "nx" > Helpers< / span > < span class = "p" > .< / span > < span class = "nx" > format< / span > < span class = "p" > (< / span > < span class = "s1" > ' " %s" ' < / span > < span class = "p" > ,< / span > < span class = "nx" > value< / span > < span class = "p" > )< / span > < span class = "o" > :< / span > < span class = "s2" > " *" < / span > < span class = "p" > );< / span >
2014-01-28 09:26:25 -05:00
< span class = "p" > },< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > Compiles a truncate query.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > compileTruncate< / span > < span class = "o" > :< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-09-17 07:15:18 -04:00
< span class = "k" > return< / span > < span class = "s1" > ' truncate ' < / span > < span class = "o" > +< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > wrapTable< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > table< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s1" > ' restart identity' < / span > < span class = "p" > ;< / span >
2014-01-28 09:26:25 -05:00
< span class = "p" > },< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > Compiles an < code > insert< / code > query, allowing for multiple
2013-09-17 07:15:18 -04:00
inserts using a single query statement.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > compileInsert< / span > < span class = "o" > :< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "kd" > var< / span > < span class = "nx" > values< / span > < span class = "o" > =< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > values< / span > < span class = "p" > ;< / span >
< span class = "kd" > var< / span > < span class = "nx" > columns< / span > < span class = "o" > =< / span > < span class = "nx" > _< / span > < span class = "p" > .< / span > < span class = "nx" > pluck< / span > < span class = "p" > (< / span > < span class = "nx" > values< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "mi" > 0< / span > < span class = "p" > );< / span >
2014-01-28 09:26:25 -05:00
< span class = "kd" > var< / span > < span class = "nx" > paramBlocks< / span > < span class = "o" > =< / span > < span class = "p" > [];< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > If there are any "where" clauses, we need to omit
2013-09-17 07:15:18 -04:00
any bindings that may have been associated with them.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > wheres< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "o" > > < / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > clearWhereBindings< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > );< / span >
< span class = "kd" > var< / span > < span class = "nx" > sql< / span > < span class = "o" > =< / span > < span class = "s1" > ' insert into ' < / span > < span class = "o" > +< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > wrapTable< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > table< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s1" > ' ' < / span > < span class = "p" > ;< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > columns< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "o" > ===< / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > sql< / span > < span class = "o" > +=< / span > < span class = "s1" > ' default values' < / span > < span class = "p" > ;< / span >
< span class = "p" > }< / span > < span class = "k" > else< / span > < span class = "p" > {< / span >
< span class = "k" > for< / span > < span class = "p" > (< / span > < span class = "kd" > var< / span > < span class = "nx" > i< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "nx" > l< / span > < span class = "o" > =< / span > < span class = "nx" > values< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "p" > ;< / span > < span class = "nx" > i< / span > < span class = "o" > < < / span > < span class = "nx" > l< / span > < span class = "p" > ;< / span > < span class = "o" > ++< / span > < span class = "nx" > i< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > paramBlocks< / span > < span class = "p" > .< / span > < span class = "nx" > push< / span > < span class = "p" > (< / span > < span class = "s2" > " (" < / span > < span class = "o" > +< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > parameterize< / span > < span class = "p" > (< / span > < span class = "nx" > _< / span > < span class = "p" > .< / span > < span class = "nx" > pluck< / span > < span class = "p" > (< / span > < span class = "nx" > values< / span > < span class = "p" > [< / span > < span class = "nx" > i< / span > < span class = "p" > ],< / span > < span class = "mi" > 1< / span > < span class = "p" > ))< / span > < span class = "o" > +< / span > < span class = "s2" > " )" < / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
< span class = "nx" > sql< / span > < span class = "o" > +=< / span > < span class = "s2" > " (" < / span > < span class = "o" > +< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > columnize< / span > < span class = "p" > (< / span > < span class = "nx" > columns< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s2" > " ) values " < / span > < span class = "o" > +< / span > < span class = "nx" > paramBlocks< / span > < span class = "p" > .< / span > < span class = "nx" > join< / span > < span class = "p" > (< / span > < span class = "s1" > ' , ' < / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
2013-12-12 17:37:44 -05:00
< span class = "nx" > sql< / span > < span class = "o" > +=< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > compileReturning< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > );< / span >
< span class = "k" > return< / span > < span class = "nx" > sql< / span > < span class = "p" > ;< / span >
2014-01-28 09:26:25 -05:00
< span class = "p" > },< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > Compiles an < code > update< / code > query, allowing for a return value.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > compileUpdate< / span > < span class = "o" > :< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "kd" > var< / span > < span class = "nx" > sql< / span > < span class = "o" > =< / span > < span class = "nx" > baseGrammar< / span > < span class = "p" > .< / span > < span class = "nx" > compileUpdate< / span > < span class = "p" > .< / span > < span class = "nx" > apply< / span > < span class = "p" > (< / span > < span class = "k" > this< / span > < span class = "p" > ,< / span > < span class = "nx" > arguments< / span > < span class = "p" > );< / span >
< span class = "nx" > sql< / span > < span class = "o" > +=< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > compileReturning< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > );< / span >
< span class = "k" > return< / span > < span class = "nx" > sql< / span > < span class = "p" > ;< / span >
2014-01-28 09:26:25 -05:00
< span class = "p" > },< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > Adds the returning value to the statement.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > compileReturning< / span > < span class = "o" > :< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "kd" > var< / span > < span class = "nx" > sql< / span > < span class = "o" > =< / span > < span class = "s1" > ' ' < / span > < span class = "p" > ;< / span >
2013-09-17 07:15:18 -04:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > flags< / span > < span class = "p" > .< / span > < span class = "nx" > returning< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > _< / span > < span class = "p" > .< / span > < span class = "nx" > isArray< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > flags< / span > < span class = "p" > .< / span > < span class = "nx" > returning< / span > < span class = "p" > ))< / span > < span class = "p" > {< / span >
< span class = "nx" > sql< / span > < span class = "o" > +=< / span > < span class = "s1" > ' returning ' < / span > < span class = "o" > +< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > wrapArray< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > flags< / span > < span class = "p" > .< / span > < span class = "nx" > returning< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span > < span class = "k" > else< / span > < span class = "p" > {< / span >
< span class = "nx" > sql< / span > < span class = "o" > +=< / span > < span class = "s1" > ' returning ' < / span > < span class = "o" > +< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > wrapValue< / span > < span class = "p" > (< / span > < span class = "nx" > qb< / span > < span class = "p" > .< / span > < span class = "nx" > flags< / span > < span class = "p" > .< / span > < span class = "nx" > returning< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
2013-09-17 07:15:18 -04:00
< span class = "p" > }< / span >
< span class = "k" > return< / span > < span class = "nx" > sql< / span > < span class = "p" > ;< / span >
2014-01-28 09:26:25 -05:00
< span class = "p" > },< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments " > < div class = "wrapper" > < p > Ensures the response is returned in the same format as other clients.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > handleResponse< / span > < span class = "o" > :< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > builder< / span > < span class = "p" > ,< / span > < span class = "nx" > response< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "kd" > var< / span > < span class = "nx" > returning< / span > < span class = "o" > =< / span > < span class = "nx" > builder< / span > < span class = "p" > .< / span > < span class = "nx" > flags< / span > < span class = "p" > .< / span > < span class = "nx" > returning< / span > < span class = "p" > ;< / span >
2013-09-17 07:15:18 -04:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > command< / span > < span class = "o" > ===< / span > < span class = "s1" > ' SELECT' < / span > < span class = "p" > )< / span > < span class = "k" > return< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > rows< / span > < span class = "p" > ;< / span >
2013-12-12 17:37:44 -05:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > command< / span > < span class = "o" > ===< / span > < span class = "s1" > ' INSERT' < / span > < span class = "o" > ||< / span > < span class = "p" > (< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > command< / span > < span class = "o" > ===< / span > < span class = "s1" > ' UPDATE' < / span > < span class = "o" > & & < / span > < span class = "nx" > returning< / span > < span class = "p" > ))< / span > < span class = "p" > {< / span >
2013-09-17 07:15:18 -04:00
< span class = "k" > return< / span > < span class = "nx" > _< / span > < span class = "p" > .< / span > < span class = "nx" > map< / span > < span class = "p" > (< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > rows< / span > < span class = "p" > ,< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > row< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > returning< / span > < span class = "o" > ===< / span > < span class = "s1" > ' *' < / span > < span class = "o" > ||< / span > < span class = "nx" > _< / span > < span class = "p" > .< / span > < span class = "nx" > isArray< / span > < span class = "p" > (< / span > < span class = "nx" > returning< / span > < span class = "p" > ))< / span > < span class = "k" > return< / span > < span class = "nx" > row< / span > < span class = "p" > ;< / span >
< span class = "k" > return< / span > < span class = "nx" > row< / span > < span class = "p" > [< / span > < span class = "nx" > returning< / span > < span class = "p" > ];< / span >
2013-09-17 07:15:18 -04:00
< span class = "p" > });< / span >
< span class = "p" > }< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > command< / span > < span class = "o" > ===< / span > < span class = "s1" > ' UPDATE' < / span > < span class = "o" > ||< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > command< / span > < span class = "o" > ===< / span > < span class = "s1" > ' DELETE' < / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > return< / span > < span class = "nx" > response< / span > < span class = "p" > .< / span > < span class = "nx" > rowCount< / span > < span class = "p" > ;< / span >
< span class = "p" > }< / span >
< span class = "k" > return< / span > < span class = "s1" > ' ' < / span > < span class = "p" > ;< / span >
< span class = "p" > }< / span >
< span class = "p" > },< / span > < span class = "nx" > baseGrammar< / span > < span class = "p" > );< / span > < / div > < / div > < / div > < / div > < / body > < / html >