pike.git
/
lib
/
modules
/
Sql.pmod
/
pgsql.pike
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/lib/modules/Sql.pmod/pgsql.pike:337:
big_query(sprintf("SET CLIENT_ENCODING TO '%s'",quote(charset))); } //! @returns //! The PostgreSQL name for the current connection charset. //! //! @seealso //! @[set_charset()], @[getruntimeparameters()], //! @url{http://www.postgresql.org/search/?u=%2Fdocs%2Fcurrent%2F&q=character+sets@} string get_charset() {
+
waitauthready();
return _runtimeparameter[CLIENT_ENCODING]; } //! @returns //! Currently active runtimeparameters for //! the open session; these are initialised by the @tt{options@} parameter //! during session creation, and then processed and returned by the server. //! Common values are: //! @mapping //! @member string "client_encoding"
pike.git/lib/modules/Sql.pmod/pgsql.pike:380:
//! database. //! For other runtimeparameters check the PostgreSQL documentation. //! //! @seealso //! @url{http://www.postgresql.org/search/?u=%2Fdocs%2Fcurrent%2F&q=client+connection+defaults@} //! //! @note //! This function is PostgreSQL-specific, and thus it is not available //! through the generic SQL-interface. mapping(string:string) getruntimeparameters() {
+
waitauthready();
return _runtimeparameter+([]); } //! @returns //! A set of statistics for the current session: //! @mapping //! @member int "warnings_dropped" //! Number of warnings/notices generated by the database but not //! collected by the application by using @[error()] after the statements //! that generated them.
pike.git/lib/modules/Sql.pmod/pgsql.pike:567:
msgresponse.L||"")}); } protected void storetiming(object portal) { mapping(string:mixed) tp=portal._tprepared; tp.trun=gethrtime()-tp.trunstart; m_delete(tp,"trunstart"); portal._tprepared = UNDEFINED; }
+
protected void waitauthready() {
+
if(waitforauthready) {
+
Thread.MutexKey lock=waitforauth->lock();
+
catch(waitforauthready->wait(lock));
+
lock=0;
+
}
+
}
+
final void _processloop(object ci) { int terminating=0; int|.pgsql_util.pgsql_result portal; mixed err; { object plugbuffer=Stdio.Buffer()->add_int32(PG_PROTOCOL(3,0)); if(user) plugbuffer->add("user\0")->add(user)->add_int8(0); if(database) plugbuffer->add("database\0")->add(database)->add_int8(0);
pike.git/lib/modules/Sql.pmod/pgsql.pike:1459:
//! The given string, but escapes/quotes all contained magic characters //! according to the quoting rules of the current session for non-binary //! arguments in textual SQL-queries. //! //! @note //! Quoting must not be done for parameters passed in bindings. //! //! @seealso //! @[big_query()], @[quotebinary()], @[create()] string quote(string s) {
+
waitauthready();
string r=_runtimeparameter.standard_conforming_strings; if(r && r=="on") return replace(s, "'", "''"); return replace(s, ({ "'", "\\" }), ({ "''", "\\\\" }) ); } //! @returns //! The given string, but escapes/quotes all contained magic characters //! for binary (bytea) arguments in textual SQL-queries. //!
pike.git/lib/modules/Sql.pmod/pgsql.pike:1517:
//! @returns //! A string describing the server we are //! talking to. It has the form @expr{"servername/serverversion"@} //! (like the HTTP protocol description) and is most useful in //! conjunction with the generic SQL-server module. //! //! @seealso //! @[host_info()] string server_info () {
+
waitauthready();
return DRIVERNAME"/"+(_runtimeparameter.server_version||"unknown"); } //! @returns //! An array of the databases available on the server. //! //! @param glob //! If specified, list only those databases matching it. array(string) list_dbs (void|string glob) { array row,ret=({});
pike.git/lib/modules/Sql.pmod/pgsql.pike:1778:
//! //! @seealso //! @[big_typed_query()], @[Sql.Sql], @[Sql.sql_result], //! @[Sql.Sql()->query()], @[Sql.pgsql_util.pgsql_result] object big_query(string q,void|mapping(string|int:mixed) bindings, void|int _alltyped) { throwdelayederror(this); string preparedname=""; int forcecache=-1; int forcetext=options.text_query;
+
if(waitforauthready)
+
waitauthready();
string cenc=_runtimeparameter[CLIENT_ENCODING]; switch(cenc) { case UTF8CHARSET: q=string_to_utf8(q); break; default: if(String.width(q)>8) ERROR("Don't know how to convert %O to %s encoding\n",q,cenc); } array(string|int) paramValues;
pike.git/lib/modules/Sql.pmod/pgsql.pike:1837:
paramValues= pi ? paramValues[..pi-1] : ({}); from=({from,to,paramValues}); } } else paramValues=({}); if(String.width(q)>8) ERROR("Wide string literals in %O not supported\n",q); if(has_value(q,"\0")) ERROR("Querystring %O contains invalid literal nul-characters\n",q); mapping(string:mixed) tp;
-
if(waitforauthready) {
-
Thread.MutexKey lock=waitforauth->lock();
-
catch(waitforauthready->wait(lock));
-
lock=0;
-
}
+
int tstart; if(!forcetext && forcecache==1 || forcecache!=0 && (sizeof(q)>=MINPREPARELENGTH || .pgsql_util.cachealways[q])) { object plugbuffer=c->start(); if(tp=_prepareds[q]) { if(tp.preparedname) { #ifdef PG_STATS prepstmtused++; #endif