/* PSPP - a program for statistical analysis.
- Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "libpspp/misc.h"
#include "libpspp/str.h"
-#include "gl/xalloc.h"
+#include "gl/c-strcase.h"
#include "gl/minmax.h"
+#include "gl/xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
}
{
- int ver_num;
+ int ver_num = 0;
const char *vers = PQparameterStatus (r->conn, "server_version");
sscanf (vers, "%d", &ver_num);
{
const char *dt = PQparameterStatus (r->conn, "integer_datetimes");
- r->integer_datetimes = ( 0 == strcasecmp (dt, "on"));
+ r->integer_datetimes = ( 0 == c_strcasecmp (dt, "on"));
}
#if USE_SSL
*dict = r->dict = dict_create (encoding);
}
+ const int version = PQserverVersion (r->conn);
+ ds_init_empty (&query);
/*
- select count (*) from (select * from medium) stupid_sql_standard;
- */
- ds_init_cstr (&query,
- "BEGIN READ ONLY ISOLATION LEVEL SERIALIZABLE; "
- "DECLARE pspp BINARY CURSOR FOR ");
+ Versions before 9.1 don't have the REPEATABLE READ isolation level.
+ However according to <a12321aabb@gmail.com> if the server is in the
+ "hot standby" mode then SERIALIZABLE won't work.
+ */
+ ds_put_c_format (&query,
+ "BEGIN READ ONLY ISOLATION LEVEL %s; "
+ "DECLARE pspp BINARY CURSOR FOR ",
+ (version < 90100) ? "SERIALIZABLE" : "REPEATABLE READ");
ds_put_substring (&query, info->sql.ss);
int width = 0;
int length ;
- /* If there are no data then make a finger in the air
+ /* If there are no data then make a finger in the air
guess at the contents */
if ( n_tuples > 0 )
length = PQgetlength (qres, 0, i);
- else
+ else
length = PSQL_DEFAULT_WIDTH;
switch (type)