xref: /openbsd-src/gnu/usr.bin/perl/os2/OS2/OS2-REXX/t/rx_sql.test (revision b39c515898423c8d899e35282f4b395f7cad3298)
1*b39c5158SmillertBEGIN {
2*b39c5158Smillert    chdir 't' if -d 't/lib';
3*b39c5158Smillert    @INC = '../lib';
4*b39c5158Smillert    require Config; import Config;
5*b39c5158Smillert    if ($Config{'extensions'} !~ /\bOS2(::|\/)REXX\b/) {
6*b39c5158Smillert	print "1..0\n";
7*b39c5158Smillert	exit 0;
8*b39c5158Smillert    }
9*b39c5158Smillert}
10*b39c5158Smillert
11*b39c5158Smillertuse OS2::REXX;
12*b39c5158Smillert
13*b39c5158Smillertsub stmt
14*b39c5158Smillert{
15*b39c5158Smillert	my ($s) = @_;
16*b39c5158Smillert	$s =~ s/\s*\n\s*/ /g;
17*b39c5158Smillert	$s =~ s/^\s+//;
18*b39c5158Smillert	$s =~ s/\s+$//;
19*b39c5158Smillert	return $s;
20*b39c5158Smillert}
21*b39c5158Smillert
22*b39c5158Smillertsub sqlcode
23*b39c5158Smillert{
24*b39c5158Smillert	OS2::REXX::_fetch("SQLCA.SQLCODE");
25*b39c5158Smillert}
26*b39c5158Smillert
27*b39c5158Smillertsub sqlstate
28*b39c5158Smillert{
29*b39c5158Smillert	OS2::REXX::_fetch("SQLCA.SQLSTATE");
30*b39c5158Smillert}
31*b39c5158Smillert
32*b39c5158Smillertsub sql
33*b39c5158Smillert{
34*b39c5158Smillert	my ($stmt) = stmt(@_);
35*b39c5158Smillert	return 0 if OS2::REXX::_call("sqlexec", $sqlexec, "", $stmt);
36*b39c5158Smillert	return sqlcode() >= 0;
37*b39c5158Smillert}
38*b39c5158Smillert
39*b39c5158Smillertsub dbs
40*b39c5158Smillert{
41*b39c5158Smillert	my ($stmt) = stmt(@_);
42*b39c5158Smillert	return 0 if OS2::REXX::_call("sqldbs", $sqldbs, "", $stmt);
43*b39c5158Smillert	return sqlcode() >= 0;
44*b39c5158Smillert}
45*b39c5158Smillert
46*b39c5158Smillertsub error
47*b39c5158Smillert{
48*b39c5158Smillert	my ($where) = @_;
49*b39c5158Smillert	print "ERROR in $where: sqlcode=", sqlcode(), " sqlstate=", sqlstate(), "\n";
50*b39c5158Smillert	dbs("GET MESSAGE INTO :MSG LINEWIDTH 75");
51*b39c5158Smillert	my $msg = OS2::REXX::_fetch("MSG");
52*b39c5158Smillert	print "\n", $msg;
53*b39c5158Smillert	exit 1;
54*b39c5158Smillert}
55*b39c5158Smillert
56*b39c5158SmillertREXX_call {
57*b39c5158Smillert
58*b39c5158Smillert  $sqlar   = DynaLoader::dl_load_file("h:/sqllib/dll/sqlar.dll") or die "load";
59*b39c5158Smillert  $sqldbs  = DynaLoader::dl_find_symbol($sqlar, "SQLDBS")  or die "find sqldbs";
60*b39c5158Smillert  $sqlexec = DynaLoader::dl_find_symbol($sqlar, "SQLEXEC") or die "find sqlexec";
61*b39c5158Smillert
62*b39c5158Smillert  sql(<<) or error("connect");
63*b39c5158Smillert     CONNECT TO sample IN SHARE MODE
64*b39c5158Smillert
65*b39c5158Smillert  OS2::REXX::_set("STMT" => stmt(<<));
66*b39c5158Smillert     SELECT name FROM sysibm.systables
67*b39c5158Smillert
68*b39c5158Smillert  sql(<<) or error("prepare");
69*b39c5158Smillert     PREPARE s1 FROM :stmt
70*b39c5158Smillert
71*b39c5158Smillert  sql(<<) or error("declare");
72*b39c5158Smillert     DECLARE c1 CURSOR FOR s1
73*b39c5158Smillert
74*b39c5158Smillert  sql(<<) or error("open");
75*b39c5158Smillert     OPEN c1
76*b39c5158Smillert
77*b39c5158Smillert  while (1) {
78*b39c5158Smillert     sql(<<) or error("fetch");
79*b39c5158Smillert          FETCH c1 INTO :name
80*b39c5158Smillert
81*b39c5158Smillert     last if sqlcode() == 100;
82*b39c5158Smillert
83*b39c5158Smillert     print "Table name is ", OS2::REXX::_fetch("NAME"), "\n";
84*b39c5158Smillert  }
85*b39c5158Smillert
86*b39c5158Smillert  sql(<<) or error("close");
87*b39c5158Smillert     CLOSE c1
88*b39c5158Smillert
89*b39c5158Smillert  sql(<<) or error("rollback");
90*b39c5158Smillert     ROLLBACK
91*b39c5158Smillert
92*b39c5158Smillert  sql(<<) or error("disconnect");
93*b39c5158Smillert     CONNECT RESET
94*b39c5158Smillert
95*b39c5158Smillert};
96*b39c5158Smillert
97*b39c5158Smillertexit 0;
98