<!DOCTYPE html><htmllang="en"><head><title>clients/server/postgres</title></head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><metaname="groc-relative-root"content="../../"><metaname="groc-document-path"content="clients/server/postgres"><metaname="groc-project-path"content="clients/server/postgres.js"><linkrel="stylesheet"type="text/css"media="all"href="../../assets/style.css"><scripttype="text/javascript"src="../../assets/behavior.js"></script><body><divid="meta"><divclass="file-path">clients/server/postgres.js</div></div><divid="document"><divclass="segment"><divclass="comments"><divclass="wrapper"><h2id="postgresql">PostgreSQL</h2></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>All of the "when.js" promise components needed in this module.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">when</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'when'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">nodefn</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'when/node/function'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Other dependencies, including the <code>pg</code> library,
which needs to be added as a dependency to the project
using this database.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">_</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'underscore'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">pg</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'pg'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>All other local project modules needed in this scope.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">ServerBase</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./base'</span><spanclass="p">).</span><spanclass="nx">ServerBase</span><spanclass="p">;</span>
<spanclass="kd">var</span><spanclass="nx">schemaGrammar</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./postgres/schemagrammar'</span><spanclass="p">).</span><spanclass="nx">schemaGrammar</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Constructor for the PostgreSQL Client</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">Client</span><spanclass="o">=</span><spanclass="nx">ServerBase</span><spanclass="p">.</span><spanclass="nx">extend</span><spanclass="p">({</span>
<spanclass="nx">dialect</span><spanclass="o">:</span><spanclass="s1">'postgresql'</span><spanclass="p">,</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Attach the appropriate grammar definitions onto the current client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">attachGrammars</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Runs the query on the specified connection, providing the bindings
and any other necessary prep work.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">runQuery</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">,</span><spanclass="nx">sql</span><spanclass="p">,</span><spanclass="nx">bindings</span><spanclass="p">,</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="o">!</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'No database connection exists for the query'</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get a raw connection, called by the <code>pool</code> whenever a new
connection needs to be added to the pool.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getRawConnection</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">callback</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Used to explicitly close a connection, called internally by the pool
when a connection times out or the pool is shutdown.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">destroyRawConnection</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>In PostgreSQL, we need to do a version check to do some feature
checking on the database.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">checkVersion</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="p">{</span>