1 /********************************************************************/
2 /*                                                                  */
3 /*  s7   Seed7 interpreter                                          */
4 /*  Copyright (C) 1990 - 2020  Thomas Mertes                        */
5 /*                                                                  */
6 /*  This program is free software; you can redistribute it and/or   */
7 /*  modify it under the terms of the GNU General Public License as  */
8 /*  published by the Free Software Foundation; either version 2 of  */
9 /*  the License, or (at your option) any later version.             */
10 /*                                                                  */
11 /*  This program is distributed in the hope that it will be useful, */
12 /*  but WITHOUT ANY WARRANTY; without even the implied warranty of  */
13 /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   */
14 /*  GNU General Public License for more details.                    */
15 /*                                                                  */
16 /*  You should have received a copy of the GNU General Public       */
17 /*  License along with this program; if not, write to the           */
18 /*  Free Software Foundation, Inc., 51 Franklin Street,             */
19 /*  Fifth Floor, Boston, MA  02110-1301, USA.                       */
20 /*                                                                  */
21 /*  Module: Library                                                 */
22 /*  File: seed7/src/sqllib.c                                        */
23 /*  Changes: 2013, 2014, 2017 - 2020  Thomas Mertes                 */
24 /*  Content: All primitive actions for database access.             */
25 /*                                                                  */
26 /********************************************************************/
27 
28 #include "version.h"
29 
30 #include "stdio.h"
31 
32 #include "common.h"
33 #include "data.h"
34 #include "syvarutl.h"
35 #include "objutl.h"
36 #include "runerr.h"
37 #include "sql_rtl.h"
38 #include "sql_drv.h"
39 
40 
41 
sql_bind_bigint(listType arguments)42 objectType sql_bind_bigint (listType arguments)
43 
44   { /* sql_bind_bigint */
45     isit_sqlstmt(arg_1(arguments));
46     isit_int(arg_2(arguments));
47     isit_bigint(arg_3(arguments));
48     sqlBindBigInt(take_sqlstmt(arg_1(arguments)),
49                   take_int(arg_2(arguments)),
50                   take_bigint(arg_3(arguments)));
51     return SYS_EMPTY_OBJECT;
52   } /* sql_bind_bigint */
53 
54 
55 
sql_bind_bigrat(listType arguments)56 objectType sql_bind_bigrat (listType arguments)
57 
58   { /* sql_bind_bigrat */
59     isit_sqlstmt(arg_1(arguments));
60     isit_int(arg_2(arguments));
61     isit_bigint(arg_3(arguments));
62     isit_bigint(arg_4(arguments));
63     sqlBindBigRat(take_sqlstmt(arg_1(arguments)),
64                   take_int(arg_2(arguments)),
65                   take_bigint(arg_3(arguments)),
66                   take_bigint(arg_4(arguments)));
67     return SYS_EMPTY_OBJECT;
68   } /* sql_bind_bigrat */
69 
70 
71 
sql_bind_bool(listType arguments)72 objectType sql_bind_bool (listType arguments)
73 
74   { /* sql_bind_bool */
75     isit_sqlstmt(arg_1(arguments));
76     isit_int(arg_2(arguments));
77     isit_bool(arg_3(arguments));
78     sqlBindBool(take_sqlstmt(arg_1(arguments)),
79                 take_int(arg_2(arguments)),
80                 take_bool(arg_3(arguments)) == SYS_TRUE_OBJECT);
81     return SYS_EMPTY_OBJECT;
82   } /* sql_bind_bool */
83 
84 
85 
sql_bind_bstri(listType arguments)86 objectType sql_bind_bstri (listType arguments)
87 
88   { /* sql_bind_bstri */
89     isit_sqlstmt(arg_1(arguments));
90     isit_int(arg_2(arguments));
91     isit_bstri(arg_3(arguments));
92     sqlBindBStri(take_sqlstmt(arg_1(arguments)),
93                  take_int(arg_2(arguments)),
94                  take_bstri(arg_3(arguments)));
95     return SYS_EMPTY_OBJECT;
96   } /* sql_bind_bstri */
97 
98 
99 
sql_bind_duration(listType arguments)100 objectType sql_bind_duration (listType arguments)
101 
102   { /* sql_bind_duration */
103     isit_sqlstmt(arg_1(arguments));
104     isit_int(arg_2(arguments));
105     isit_int(arg_3(arguments));
106     isit_int(arg_4(arguments));
107     isit_int(arg_5(arguments));
108     isit_int(arg_6(arguments));
109     isit_int(arg_7(arguments));
110     isit_int(arg_8(arguments));
111     isit_int(arg_9(arguments));
112     sqlBindDuration(take_sqlstmt(arg_1(arguments)),
113                     take_int(arg_2(arguments)),
114                     take_int(arg_3(arguments)),
115                     take_int(arg_4(arguments)),
116                     take_int(arg_5(arguments)),
117                     take_int(arg_6(arguments)),
118                     take_int(arg_7(arguments)),
119                     take_int(arg_8(arguments)),
120                     take_int(arg_9(arguments)));
121     return SYS_EMPTY_OBJECT;
122   } /* sql_bind_duration */
123 
124 
125 
sql_bind_float(listType arguments)126 objectType sql_bind_float (listType arguments)
127 
128   { /* sql_bind_float */
129     isit_sqlstmt(arg_1(arguments));
130     isit_int(arg_2(arguments));
131     isit_float(arg_3(arguments));
132     sqlBindFloat(take_sqlstmt(arg_1(arguments)),
133                take_int(arg_2(arguments)),
134                take_float(arg_3(arguments)));
135     return SYS_EMPTY_OBJECT;
136   } /* sql_bind_float */
137 
138 
139 
sql_bind_int(listType arguments)140 objectType sql_bind_int (listType arguments)
141 
142   { /* sql_bind_int */
143     isit_sqlstmt(arg_1(arguments));
144     isit_int(arg_2(arguments));
145     isit_int(arg_3(arguments));
146     sqlBindInt(take_sqlstmt(arg_1(arguments)),
147                take_int(arg_2(arguments)),
148                take_int(arg_3(arguments)));
149     return SYS_EMPTY_OBJECT;
150   } /* sql_bind_int */
151 
152 
153 
sql_bind_null(listType arguments)154 objectType sql_bind_null (listType arguments)
155 
156   { /* sql_bind_null */
157     isit_sqlstmt(arg_1(arguments));
158     isit_int(arg_2(arguments));
159     sqlBindNull(take_sqlstmt(arg_1(arguments)),
160                 take_int(arg_2(arguments)));
161     return SYS_EMPTY_OBJECT;
162   } /* sql_bind_null */
163 
164 
165 
sql_bind_stri(listType arguments)166 objectType sql_bind_stri (listType arguments)
167 
168   { /* sql_bind_stri */
169     isit_sqlstmt(arg_1(arguments));
170     isit_int(arg_2(arguments));
171     isit_stri(arg_3(arguments));
172     sqlBindStri(take_sqlstmt(arg_1(arguments)),
173                 take_int(arg_2(arguments)),
174                 take_stri(arg_3(arguments)));
175     return SYS_EMPTY_OBJECT;
176   } /* sql_bind_stri */
177 
178 
179 
sql_bind_time(listType arguments)180 objectType sql_bind_time (listType arguments)
181 
182   { /* sql_bind_time */
183     isit_sqlstmt(arg_1(arguments));
184     isit_int(arg_2(arguments));
185     isit_int(arg_3(arguments));
186     isit_int(arg_4(arguments));
187     isit_int(arg_5(arguments));
188     isit_int(arg_6(arguments));
189     isit_int(arg_7(arguments));
190     isit_int(arg_8(arguments));
191     isit_int(arg_9(arguments));
192     isit_int(arg_10(arguments));
193     sqlBindTime(take_sqlstmt(arg_1(arguments)),
194                 take_int(arg_2(arguments)),
195                 take_int(arg_3(arguments)),
196                 take_int(arg_4(arguments)),
197                 take_int(arg_5(arguments)),
198                 take_int(arg_6(arguments)),
199                 take_int(arg_7(arguments)),
200                 take_int(arg_8(arguments)),
201                 take_int(arg_9(arguments)),
202                 take_int(arg_10(arguments)));
203     return SYS_EMPTY_OBJECT;
204   } /* sql_bind_time */
205 
206 
207 
sql_column_bigint(listType arguments)208 objectType sql_column_bigint (listType arguments)
209 
210   {
211     bigIntType number;
212 
213   /* sql_column_bigint */
214     isit_sqlstmt(arg_1(arguments));
215     isit_int(arg_2(arguments));
216     number = sqlColumnBigInt(take_sqlstmt(arg_1(arguments)),
217                              take_int(arg_2(arguments)));
218     return bld_bigint_temp(number);
219   } /* sql_column_bigint */
220 
221 
222 
sql_column_bigrat(listType arguments)223 objectType sql_column_bigrat (listType arguments)
224 
225   { /* sql_column_bigrat */
226     isit_sqlstmt(arg_1(arguments));
227     isit_int(arg_2(arguments));
228     isit_bigint(arg_3(arguments));
229     isit_bigint(arg_4(arguments));
230     sqlColumnBigRat(take_sqlstmt(arg_1(arguments)),
231                     take_int(arg_2(arguments)),
232                     &arg_3(arguments)->value.bigIntValue,
233                     &arg_4(arguments)->value.bigIntValue);
234     return SYS_EMPTY_OBJECT;
235   } /* sql_column_bigrat */
236 
237 
238 
sql_close(listType arguments)239 objectType sql_close (listType arguments)
240 
241   { /* sql_close */
242     isit_database(arg_1(arguments));
243     sqlClose(take_database(arg_1(arguments)));
244     return SYS_EMPTY_OBJECT;
245   } /* sql_close */
246 
247 
248 
sql_cmp_db(listType arguments)249 objectType sql_cmp_db (listType arguments)
250 
251   {
252     memSizeType ref1;
253     memSizeType ref2;
254     intType signumValue;
255 
256   /* sql_cmp_db */
257     isit_database(arg_1(arguments));
258     isit_database(arg_2(arguments));
259     ref1 = (memSizeType) take_database(arg_1(arguments));
260     ref2 = (memSizeType) take_database(arg_2(arguments));
261     if (ref1 < ref2) {
262       signumValue = -1;
263     } else if (ref1 > ref2) {
264       signumValue = 1;
265     } else {
266       signumValue = 0;
267     } /* if */
268     return bld_int_temp(signumValue);
269   } /* sql_cmp_db */
270 
271 
272 
sql_cmp_stmt(listType arguments)273 objectType sql_cmp_stmt (listType arguments)
274 
275   {
276     memSizeType ref1;
277     memSizeType ref2;
278     intType signumValue;
279 
280   /* sql_cmp_stmt */
281     isit_sqlstmt(arg_1(arguments));
282     isit_sqlstmt(arg_2(arguments));
283     ref1 = (memSizeType) take_sqlstmt(arg_1(arguments));
284     ref2 = (memSizeType) take_sqlstmt(arg_2(arguments));
285     if (ref1 < ref2) {
286       signumValue = -1;
287     } else if (ref1 > ref2) {
288       signumValue = 1;
289     } else {
290       signumValue = 0;
291     } /* if */
292     return bld_int_temp(signumValue);
293   } /* sql_cmp_stmt */
294 
295 
296 
sql_column_bool(listType arguments)297 objectType sql_column_bool (listType arguments)
298 
299   { /* sql_column_bool */
300     isit_sqlstmt(arg_1(arguments));
301     isit_int(arg_2(arguments));
302     if (sqlColumnBool(take_sqlstmt(arg_1(arguments)),
303                       take_int(arg_2(arguments)))) {
304       return SYS_TRUE_OBJECT;
305     } else {
306       return SYS_FALSE_OBJECT;
307     } /* if */
308   } /* sql_column_bool */
309 
310 
311 
sql_column_bstri(listType arguments)312 objectType sql_column_bstri (listType arguments)
313 
314   {
315     bstriType bstri;
316 
317   /* sql_column_bstri */
318     isit_sqlstmt(arg_1(arguments));
319     isit_int(arg_2(arguments));
320     bstri = sqlColumnBStri(take_sqlstmt(arg_1(arguments)),
321                            take_int(arg_2(arguments)));
322     return bld_bstri_temp(bstri);
323   } /* sql_column_bstri */
324 
325 
326 
sql_column_duration(listType arguments)327 objectType sql_column_duration (listType arguments)
328 
329   { /* sql_column_duration */
330     isit_sqlstmt(arg_1(arguments));
331     isit_int(arg_2(arguments));
332     isit_int(arg_3(arguments));
333     isit_int(arg_4(arguments));
334     isit_int(arg_5(arguments));
335     isit_int(arg_6(arguments));
336     isit_int(arg_7(arguments));
337     isit_int(arg_8(arguments));
338     isit_int(arg_9(arguments));
339     sqlColumnDuration(take_sqlstmt(arg_1(arguments)),
340                       take_int(arg_2(arguments)),
341                       &arg_3(arguments)->value.intValue,
342                       &arg_4(arguments)->value.intValue,
343                       &arg_5(arguments)->value.intValue,
344                       &arg_6(arguments)->value.intValue,
345                       &arg_7(arguments)->value.intValue,
346                       &arg_8(arguments)->value.intValue,
347                       &arg_9(arguments)->value.intValue);
348     return SYS_EMPTY_OBJECT;
349   } /* sql_column_duration */
350 
351 
352 
sql_column_float(listType arguments)353 objectType sql_column_float (listType arguments)
354 
355   {
356     floatType number;
357 
358   /* sql_column_float */
359     isit_sqlstmt(arg_1(arguments));
360     isit_int(arg_2(arguments));
361     number = sqlColumnFloat(take_sqlstmt(arg_1(arguments)),
362                           take_int(arg_2(arguments)));
363     return bld_float_temp(number);
364   } /* sql_column_float */
365 
366 
367 
sql_column_int(listType arguments)368 objectType sql_column_int (listType arguments)
369 
370   {
371     intType number;
372 
373   /* sql_column_int */
374     isit_sqlstmt(arg_1(arguments));
375     isit_int(arg_2(arguments));
376     number = sqlColumnInt(take_sqlstmt(arg_1(arguments)),
377                           take_int(arg_2(arguments)));
378     return bld_int_temp(number);
379   } /* sql_column_int */
380 
381 
382 
sql_column_stri(listType arguments)383 objectType sql_column_stri (listType arguments)
384 
385   {
386     striType stri;
387 
388   /* sql_column_stri */
389     isit_sqlstmt(arg_1(arguments));
390     isit_int(arg_2(arguments));
391     stri = sqlColumnStri(take_sqlstmt(arg_1(arguments)),
392                          take_int(arg_2(arguments)));
393     return bld_stri_temp(stri);
394   } /* sql_column_stri */
395 
396 
397 
sql_column_time(listType arguments)398 objectType sql_column_time (listType arguments)
399 
400   {
401     boolType is_dst;
402 
403   /* sql_column_time */
404     isit_sqlstmt(arg_1(arguments));
405     isit_int(arg_2(arguments));
406     isit_int(arg_3(arguments));
407     isit_int(arg_4(arguments));
408     isit_int(arg_5(arguments));
409     isit_int(arg_6(arguments));
410     isit_int(arg_7(arguments));
411     isit_int(arg_8(arguments));
412     isit_int(arg_9(arguments));
413     isit_int(arg_10(arguments));
414     isit_bool(arg_11(arguments));
415     sqlColumnTime(take_sqlstmt(arg_1(arguments)),
416                   take_int(arg_2(arguments)),
417                   &arg_3(arguments)->value.intValue,
418                   &arg_4(arguments)->value.intValue,
419                   &arg_5(arguments)->value.intValue,
420                   &arg_6(arguments)->value.intValue,
421                   &arg_7(arguments)->value.intValue,
422                   &arg_8(arguments)->value.intValue,
423                   &arg_9(arguments)->value.intValue,
424                   &arg_10(arguments)->value.intValue,
425                   &is_dst);
426     if (is_dst) {
427       arg_11(arguments)->value.objValue = SYS_TRUE_OBJECT;
428     } else {
429       arg_11(arguments)->value.objValue = SYS_FALSE_OBJECT;
430     } /* if */
431     return SYS_EMPTY_OBJECT;
432   } /* sql_column_time */
433 
434 
435 
436 /**
437  *  Execute a commit statement for the database/arg_1.
438  */
sql_commit(listType arguments)439 objectType sql_commit (listType arguments)
440 
441   { /* sql_commit */
442     isit_database(arg_1(arguments));
443     sqlCommit(take_database(arg_1(arguments)));
444     return SYS_EMPTY_OBJECT;
445   } /* sql_commit */
446 
447 
448 
449 /**
450  *  Assign source/arg_3 to dest/arg_1.
451  *  A copy function assumes that dest/arg_1 contains a legal value.
452  */
sql_cpy_db(listType arguments)453 objectType sql_cpy_db (listType arguments)
454 
455   {
456     objectType dest;
457 
458   /* sql_cpy_db */
459     dest = arg_1(arguments);
460     isit_database(dest);
461     is_variable(dest);
462     isit_database(arg_3(arguments));
463     sqlCpyDb(&dest->value.databaseValue, take_database(arg_3(arguments)));
464     return SYS_EMPTY_OBJECT;
465   } /* sql_cpy_db */
466 
467 
468 
469 /**
470  *  Assign source/arg_3 to dest/arg_1.
471  *  A copy function assumes that dest/arg_1 contains a legal value.
472  */
sql_cpy_stmt(listType arguments)473 objectType sql_cpy_stmt (listType arguments)
474 
475   {
476     objectType dest;
477 
478   /* sql_cpy_stmt */
479     dest = arg_1(arguments);
480     isit_sqlstmt(dest);
481     is_variable(dest);
482     isit_sqlstmt(arg_3(arguments));
483     sqlCpyStmt(&dest->value.sqlStmtValue, take_sqlstmt(arg_3(arguments)));
484     return SYS_EMPTY_OBJECT;
485   } /* sql_cpy_stmt */
486 
487 
488 
489 /**
490  *  Initialize dest/arg_1 and assign source/arg_3 to it.
491  *  A create function assumes that the contents of dest/arg_1
492  *  is undefined. Create functions can be used to initialize
493  *  constants.
494  */
sql_create_db(listType arguments)495 objectType sql_create_db (listType arguments)
496 
497   { /* sql_create_db */
498     isit_database(arg_3(arguments));
499     SET_CATEGORY_OF_OBJ(arg_1(arguments), DATABASEOBJECT);
500     arg_1(arguments)->value.databaseValue = sqlCreateDb(take_database(arg_3(arguments)));
501     return SYS_EMPTY_OBJECT;
502   } /* sql_create_db */
503 
504 
505 
506 /**
507  *  Initialize dest/arg_1 and assign source/arg_3 to it.
508  *  A create function assumes that the contents of dest/arg_1
509  *  is undefined. Create functions can be used to initialize
510  *  constants.
511  */
sql_create_stmt(listType arguments)512 objectType sql_create_stmt (listType arguments)
513 
514   { /* sql_create_stmt */
515     isit_sqlstmt(arg_3(arguments));
516     SET_CATEGORY_OF_OBJ(arg_1(arguments), SQLSTMTOBJECT);
517     arg_1(arguments)->value.sqlStmtValue = sqlCreateStmt(take_sqlstmt(arg_3(arguments)));
518     return SYS_EMPTY_OBJECT;
519   } /* sql_create_stmt */
520 
521 
522 
sql_destr_db(listType arguments)523 objectType sql_destr_db (listType arguments)
524 
525   { /* sql_destr_db */
526     isit_database(arg_1(arguments));
527     sqlDestrDb(take_database(arg_1(arguments)));
528     arg_1(arguments)->value.databaseValue = NULL;
529     SET_UNUSED_FLAG(arg_1(arguments));
530     return SYS_EMPTY_OBJECT;
531   } /* sql_destr_db */
532 
533 
534 
sql_destr_stmt(listType arguments)535 objectType sql_destr_stmt (listType arguments)
536 
537   { /* sql_destr_stmt */
538     isit_sqlstmt(arg_1(arguments));
539     sqlDestrStmt(take_sqlstmt(arg_1(arguments)));
540     arg_1(arguments)->value.sqlStmtValue = NULL;
541     SET_UNUSED_FLAG(arg_1(arguments));
542     return SYS_EMPTY_OBJECT;
543   } /* sql_destr_stmt */
544 
545 
546 
sql_driver(listType arguments)547 objectType sql_driver (listType arguments)
548 
549   { /* sql_driver */
550     isit_database(arg_1(arguments));
551     return bld_int_temp(sqlDriver(take_database(arg_1(arguments))));
552   } /* sql_driver */
553 
554 
555 
sql_empty_db(listType arguments)556 objectType sql_empty_db (listType arguments)
557 
558   { /* sql_empty_db */
559     return bld_database_temp(NULL);
560   } /* sql_empty_db */
561 
562 
563 
sql_empty_stmt(listType arguments)564 objectType sql_empty_stmt (listType arguments)
565 
566   { /* sql_empty_stmt */
567     return bld_sqlstmt_temp(NULL);
568   } /* sql_empty_stmt */
569 
570 
571 
sql_eq_db(listType arguments)572 objectType sql_eq_db (listType arguments)
573 
574   { /* sql_eq_db */
575     isit_database(arg_1(arguments));
576     isit_database(arg_3(arguments));
577     if (take_database(arg_1(arguments)) ==
578         take_database(arg_3(arguments))) {
579       return SYS_TRUE_OBJECT;
580     } else {
581       return SYS_FALSE_OBJECT;
582     } /* if */
583   } /* sql_eq_db */
584 
585 
586 
sql_eq_stmt(listType arguments)587 objectType sql_eq_stmt (listType arguments)
588 
589   { /* sql_eq_stmt */
590     isit_sqlstmt(arg_1(arguments));
591     isit_sqlstmt(arg_3(arguments));
592     if (take_sqlstmt(arg_1(arguments)) ==
593         take_sqlstmt(arg_3(arguments))) {
594       return SYS_TRUE_OBJECT;
595     } else {
596       return SYS_FALSE_OBJECT;
597     } /* if */
598   } /* sql_eq_stmt */
599 
600 
601 
sql_err_code(listType arguments)602 objectType sql_err_code (listType arguments)
603 
604   { /* sql_err_code */
605     return bld_int_temp(sqlErrCode());
606   } /* sql_err_code */
607 
608 
609 
sql_err_db_func(listType arguments)610 objectType sql_err_db_func (listType arguments)
611 
612   { /* sql_err_db_func */
613     return bld_stri_temp(sqlErrDbFunc());
614   } /* sql_err_db_func */
615 
616 
617 
sql_err_lib_func(listType arguments)618 objectType sql_err_lib_func (listType arguments)
619 
620   { /* sql_err_lib_func */
621     return bld_stri_temp(sqlErrLibFunc());
622   } /* sql_err_lib_func */
623 
624 
625 
sql_err_message(listType arguments)626 objectType sql_err_message (listType arguments)
627 
628   { /* sql_err_message */
629     return bld_stri_temp(sqlErrMessage());
630   } /* sql_err_message */
631 
632 
633 
sql_execute(listType arguments)634 objectType sql_execute (listType arguments)
635 
636   { /* sql_execute */
637     isit_sqlstmt(arg_1(arguments));
638     sqlExecute(take_sqlstmt(arg_1(arguments)));
639     return SYS_EMPTY_OBJECT;
640   } /* sql_execute */
641 
642 
643 
sql_fetch(listType arguments)644 objectType sql_fetch (listType arguments)
645 
646   {
647     boolType success;
648 
649   /* sql_fetch */
650     isit_sqlstmt(arg_1(arguments));
651     success = sqlFetch(take_sqlstmt(arg_1(arguments)));
652     if (success) {
653       return SYS_TRUE_OBJECT;
654     } else {
655       return SYS_FALSE_OBJECT;
656     } /* if */
657   } /* sql_fetch */
658 
659 
660 
661 /**
662  *  Get the current auto-commit mode for database/arg_1.
663  */
sql_get_auto_commit(listType arguments)664 objectType sql_get_auto_commit (listType arguments)
665 
666   {
667     boolType autoCommit;
668 
669   /* sql_get_auto_commit */
670     isit_database(arg_1(arguments));
671     autoCommit = sqlGetAutoCommit(take_database(arg_1(arguments)));
672     if (autoCommit) {
673       return SYS_TRUE_OBJECT;
674     } else {
675       return SYS_FALSE_OBJECT;
676     } /* if */
677   } /* sql_get_auto_commit */
678 
679 
680 
sql_is_null(listType arguments)681 objectType sql_is_null (listType arguments)
682 
683   { /* sql_is_null */
684     isit_sqlstmt(arg_1(arguments));
685     isit_int(arg_2(arguments));
686     if (sqlIsNull(take_sqlstmt(arg_1(arguments)),
687                   take_int(arg_2(arguments)))) {
688       return SYS_TRUE_OBJECT;
689     } else {
690       return SYS_FALSE_OBJECT;
691     } /* if */
692   } /* sql_is_null */
693 
694 
695 
sql_ne_db(listType arguments)696 objectType sql_ne_db (listType arguments)
697 
698   { /* sql_ne_db */
699     isit_database(arg_1(arguments));
700     isit_database(arg_3(arguments));
701     if (take_database(arg_1(arguments)) !=
702         take_database(arg_3(arguments))) {
703       return SYS_TRUE_OBJECT;
704     } else {
705       return SYS_FALSE_OBJECT;
706     } /* if */
707   } /* sql_ne_db */
708 
709 
710 
sql_ne_stmt(listType arguments)711 objectType sql_ne_stmt (listType arguments)
712 
713   { /* sql_ne_stmt */
714     isit_sqlstmt(arg_1(arguments));
715     isit_sqlstmt(arg_3(arguments));
716     if (take_sqlstmt(arg_1(arguments)) !=
717         take_sqlstmt(arg_3(arguments))) {
718       return SYS_TRUE_OBJECT;
719     } else {
720       return SYS_FALSE_OBJECT;
721     } /* if */
722   } /* sql_ne_stmt */
723 
724 
725 
sql_open_db2(listType arguments)726 objectType sql_open_db2 (listType arguments)
727 
728   {
729     databaseType database;
730 
731   /* sql_open_db2 */
732     isit_stri(arg_2(arguments));
733     isit_int(arg_3(arguments));
734     isit_stri(arg_4(arguments));
735     isit_stri(arg_5(arguments));
736     isit_stri(arg_6(arguments));
737     database = sqlOpenDb2(take_stri(arg_2(arguments)),
738                           take_int(arg_3(arguments)),
739                           take_stri(arg_4(arguments)),
740                           take_stri(arg_5(arguments)),
741                           take_stri(arg_6(arguments)));
742     return bld_database_temp(database);
743   } /* sql_open_db2 */
744 
745 
746 
sql_open_fire(listType arguments)747 objectType sql_open_fire (listType arguments)
748 
749   {
750     databaseType database;
751 
752   /* sql_open_fire */
753     isit_stri(arg_2(arguments));
754     isit_int(arg_3(arguments));
755     isit_stri(arg_4(arguments));
756     isit_stri(arg_5(arguments));
757     isit_stri(arg_6(arguments));
758     database = sqlOpenFire(take_stri(arg_2(arguments)),
759                            take_int(arg_3(arguments)),
760                            take_stri(arg_4(arguments)),
761                            take_stri(arg_5(arguments)),
762                            take_stri(arg_6(arguments)));
763     return bld_database_temp(database);
764   } /* sql_open_fire */
765 
766 
767 
sql_open_lite(listType arguments)768 objectType sql_open_lite (listType arguments)
769 
770   {
771     databaseType database;
772 
773   /* sql_open_lite */
774     isit_stri(arg_2(arguments));
775     isit_int(arg_3(arguments));
776     isit_stri(arg_4(arguments));
777     isit_stri(arg_5(arguments));
778     isit_stri(arg_6(arguments));
779     database = sqlOpenLite(take_stri(arg_2(arguments)),
780                            take_int(arg_3(arguments)),
781                            take_stri(arg_4(arguments)),
782                            take_stri(arg_5(arguments)),
783                            take_stri(arg_6(arguments)));
784     return bld_database_temp(database);
785   } /* sql_open_lite */
786 
787 
788 
sql_open_my(listType arguments)789 objectType sql_open_my (listType arguments)
790 
791   {
792     databaseType database;
793 
794   /* sql_open_my */
795     isit_stri(arg_2(arguments));
796     isit_int(arg_3(arguments));
797     isit_stri(arg_4(arguments));
798     isit_stri(arg_5(arguments));
799     isit_stri(arg_6(arguments));
800     database = sqlOpenMy(take_stri(arg_2(arguments)),
801                          take_int(arg_3(arguments)),
802                          take_stri(arg_4(arguments)),
803                          take_stri(arg_5(arguments)),
804                          take_stri(arg_6(arguments)));
805     return bld_database_temp(database);
806   } /* sql_open_my */
807 
808 
809 
sql_open_oci(listType arguments)810 objectType sql_open_oci (listType arguments)
811 
812   {
813     databaseType database;
814 
815   /* sql_open_oci */
816     isit_stri(arg_2(arguments));
817     isit_int(arg_3(arguments));
818     isit_stri(arg_4(arguments));
819     isit_stri(arg_5(arguments));
820     isit_stri(arg_6(arguments));
821     database = sqlOpenOci(take_stri(arg_2(arguments)),
822                           take_int(arg_3(arguments)),
823                           take_stri(arg_4(arguments)),
824                           take_stri(arg_5(arguments)),
825                           take_stri(arg_6(arguments)));
826     return bld_database_temp(database);
827   } /* sql_open_oci */
828 
829 
830 
sql_open_odbc(listType arguments)831 objectType sql_open_odbc (listType arguments)
832 
833   {
834     databaseType database;
835 
836   /* sql_open_odbc */
837     isit_stri(arg_2(arguments));
838     isit_stri(arg_3(arguments));
839     isit_stri(arg_4(arguments));
840     isit_stri(arg_5(arguments));
841     isit_stri(arg_6(arguments));
842     database = sqlOpenOdbc(take_stri(arg_2(arguments)),
843                            take_stri(arg_3(arguments)),
844                            take_stri(arg_4(arguments)),
845                            take_stri(arg_5(arguments)),
846                            take_stri(arg_6(arguments)));
847     return bld_database_temp(database);
848   } /* sql_open_odbc */
849 
850 
851 
sql_open_post(listType arguments)852 objectType sql_open_post (listType arguments)
853 
854   {
855     databaseType database;
856 
857   /* sql_open_post */
858     isit_stri(arg_2(arguments));
859     isit_int(arg_3(arguments));
860     isit_stri(arg_4(arguments));
861     isit_stri(arg_5(arguments));
862     isit_stri(arg_6(arguments));
863     database = sqlOpenPost(take_stri(arg_2(arguments)),
864                            take_int(arg_3(arguments)),
865                            take_stri(arg_4(arguments)),
866                            take_stri(arg_5(arguments)),
867                            take_stri(arg_6(arguments)));
868     return bld_database_temp(database);
869   } /* sql_open_post */
870 
871 
872 
sql_open_sqlsrv(listType arguments)873 objectType sql_open_sqlsrv (listType arguments)
874 
875   {
876     databaseType database;
877 
878   /* sql_open_sqlsrv */
879     isit_stri(arg_2(arguments));
880     isit_int(arg_3(arguments));
881     isit_stri(arg_4(arguments));
882     isit_stri(arg_5(arguments));
883     isit_stri(arg_6(arguments));
884     database = sqlOpenSqlServer(take_stri(arg_2(arguments)),
885                                 take_int(arg_3(arguments)),
886                                 take_stri(arg_4(arguments)),
887                                 take_stri(arg_5(arguments)),
888                                 take_stri(arg_6(arguments)));
889     return bld_database_temp(database);
890   } /* sql_open_sqlsrv */
891 
892 
893 
sql_open_tds(listType arguments)894 objectType sql_open_tds (listType arguments)
895 
896   {
897     databaseType database;
898 
899   /* sql_open_tds */
900     isit_stri(arg_2(arguments));
901     isit_int(arg_3(arguments));
902     isit_stri(arg_4(arguments));
903     isit_stri(arg_5(arguments));
904     isit_stri(arg_6(arguments));
905     database = sqlOpenTds(take_stri(arg_2(arguments)),
906                           take_int(arg_3(arguments)),
907                           take_stri(arg_4(arguments)),
908                           take_stri(arg_5(arguments)),
909                           take_stri(arg_6(arguments)));
910     return bld_database_temp(database);
911   } /* sql_open_tds */
912 
913 
914 
sql_prepare(listType arguments)915 objectType sql_prepare (listType arguments)
916 
917   {
918     sqlStmtType sqlStatement;
919 
920   /* sql_prepare */
921     isit_database(arg_1(arguments));
922     isit_stri(arg_2(arguments));
923     sqlStatement = sqlPrepare(take_database(arg_1(arguments)),
924                               take_stri(arg_2(arguments)));
925     return bld_sqlstmt_temp(sqlStatement);
926   } /* sql_prepare */
927 
928 
929 
930 /**
931  *  Execute a rollback statement for the database/arg_1.
932  */
sql_rollback(listType arguments)933 objectType sql_rollback (listType arguments)
934 
935   { /* sql_rollback */
936     isit_database(arg_1(arguments));
937     sqlRollback(take_database(arg_1(arguments)));
938     return SYS_EMPTY_OBJECT;
939   } /* sql_rollback */
940 
941 
942 
943 /**
944  *  Set the auto-commit mode for database/arg_1.
945  */
sql_set_auto_commit(listType arguments)946 objectType sql_set_auto_commit (listType arguments)
947 
948   { /* sql_set_auto_commit */
949     isit_database(arg_1(arguments));
950     isit_bool(arg_2(arguments));
951     sqlSetAutoCommit(take_database(arg_1(arguments)),
952                      take_bool(arg_3(arguments)) == SYS_TRUE_OBJECT);
953     return SYS_EMPTY_OBJECT;
954   } /* sql_set_auto_commit */
955 
956 
957 
sql_stmt_column_count(listType arguments)958 objectType sql_stmt_column_count (listType arguments)
959 
960   {
961     intType column_count;
962 
963   /* sql_stmt_column_count */
964     isit_sqlstmt(arg_1(arguments));
965     column_count = sqlStmtColumnCount(take_sqlstmt(arg_1(arguments)));
966     return bld_int_temp(column_count);
967   } /* sql_stmt_column_count */
968 
969 
970 
sql_stmt_column_name(listType arguments)971 objectType sql_stmt_column_name (listType arguments)
972 
973   {
974     striType name;
975 
976   /* sql_stmt_column_name */
977     isit_sqlstmt(arg_1(arguments));
978     isit_int(arg_2(arguments));
979     name = sqlStmtColumnName(take_sqlstmt(arg_1(arguments)),
980                              take_int(arg_2(arguments)));
981     return bld_stri_temp(name);
982   } /* sql_stmt_column_name */
983