1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 dnl GNU General Public License for more details.
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
16 dnl AT_BANNER([GET DATA /TYPE=PSQL])
18 m4_define([INIT_PSQL],
19 [AT_SKIP_IF([test "$PSQL_SUPPORT" = no])
26 socket_dir=`mktemp -d`
29 AT_CHECK([initdb -A trust], [0], [ignore])
30 AT_CHECK([pg_ctl start -w -o "-k $socket_dir -h ''"], [0], [ignore])
32 AT_CHECK([createdb -h "$socket_dir" -p $PG_PORT $PG_DBASE],
33 [0], [ignore], [ignore])
34 AT_DATA([populate.sql],
35 [CREATE TABLE empty (a int, b date, c numeric(23, 4));
37 -- a largeish table to check big queries work ok.
38 CREATE TABLE large (x int);
39 INSERT INTO large (select * from generate_series(1, 1000));
49 numeric numeric(50,6) ,
60 timestamptz timestamptz ,
65 INSERT INTO thing VALUES (
82 'January 8 04:05:06 1999',
83 'January 8 04:05:06 1999 PST',
88 INSERT INTO thing VALUES (
111 INSERT INTO thing VALUES (
128 '10-Jan-1963 23:58:00',
129 '10-Jan-1963 23:58:00 CET',
130 '2 year 1 month 12 days 1 hours 3 minutes 4 seconds',
134 AT_CHECK([psql -h "$socket_dir" -p $PG_PORT $PG_DBASE < populate.sql],
137 m4_define([CLEANUP_PSQL], [pg_ctl stop -W -o "-k $socket_dir -h ''"])
139 AT_SETUP([GET DATA /TYPE=PSQL])
142 dnl Test with an ordinary query.
143 AT_CHECK([cat > ordinary-query.sps <<EOF
145 /CONNECT="host=$socket_dir port=$PGPORT dbname=$PG_DBASE"
147 /SQL="select * from thing".
154 AT_CHECK([pspp -o pspp.csv ordinary-query.sps])
155 AT_CHECK([cat pspp.csv], [0], [dnl
156 Variable,Description,Position
158 bytea,Format: AHEX2,2
163 numeric,Format: E40.6,7
166 float4,Format: F8.2,10
167 float8,Format: F8.2,11
168 money,Format: DOLLAR8.2,12
170 varchar,Format: A8,14
171 date,Format: DATE11,15
172 time,Format: TIME11.0,16
173 timestamp,Format: DATETIME22.0,17
174 timestamptz,Format: DATETIME22.0,18
175 interval,Format: DTIME13.0,19
176 interval_months,Format: F3.0,20
177 timetz,Format: TIME11.0,21
178 timetz_zone,Format: F8.2,22
181 bool,bytea,char,int8,int2,int4,numeric,text,oid,float4,float8,money,pbchar,varchar,date,time,timestamp,timestamptz,interval,interval_months,timetz,timetz_zone
182 .00,30,a ,.00,.00,.00,-2.560980E+002,this-long-text ,.00,.00,.00,$.01,a ,A ,01-JAN-2000,0:00:00,08-JAN-1999 04:05:06,08-JAN-1999 12:05:06,0 00:01:00,0,10:09:00,4.00
183 . ,20,,. ,. ,. ,. ,,. ,. ,. ,. ,,,.,.,.,.,.,.,.,. @&t@
184 1.00,31,b ,1.00,1.00,1.00,6.553500E+004,that-long-text ,.00,1.00,1.00,$1.23,b ,B ,10-JAN-1963,1:05:02,10-JAN-1963 23:58:00,10-JAN-1963 22:58:00,12 01:03:04,25,1:05:02,-7.00
187 dnl Test query with empty result set.
188 AT_CHECK([cat > empty-result.sps <<EOF
190 /CONNECT="host=$socket_dir port=$PGPORT dbname=$PG_DBASE"
192 /SQL="select * from empty".
199 AT_CHECK([pspp -o pspp.csv empty-result.sps])
200 AT_CHECK([cat pspp.csv], [0], [dnl
201 Variable,Description,Position
207 dnl Test query with large result set.
208 AT_CHECK([cat > large-result.sps <<EOF
210 /CONNECT="host=$socket_dir port=$PGPORT dbname=$PG_DBASE"
212 /SQL="select * from large".
215 COMPUTE diff = x - lag (x).
218 SELECT IF (diff <> 1).
232 AT_CHECK([pspp -o pspp.csv large-result.sps])
233 AT_CHECK([cat pspp.csv], [0], [dnl
253 dnl Check for a bug caused by having string variables in the database,
254 dnl all of which are null.
255 AT_DATA([all-null-string.sql],
256 [-- a table which has a text field containing only null, or zero
259 CREATE TABLE foo (int4 int4, text text);
261 INSERT INTO foo VALUES ('12', '');
263 INSERT INTO foo VALUES (null, '');
265 AT_CHECK([psql -h "$socket_dir" -p $PG_PORT $PG_DBASE < all-null-string.sql],
267 AT_CAPTURE_FILE([get-data.sps])
268 AT_CHECK([cat > get-data.sps <<EOF
270 /CONNECT="host=$socket_dir port=$PGPORT dbname=$PG_DBASE"
272 /SQL="select * from foo".
279 AT_CHECK([pspp -o pspp.csv get-data.sps])
280 AT_CAPTURE_FILE([pspp.csv])