~paul-mccullagh/dbt2/fix-for-macosx

« back to all changes in this revision

Viewing changes to src/nonsp/dbc_payment.c

  • Committer: Paul McCullagh
  • Date: 2009-02-11 19:27:08 UTC
  • Revision ID: paul.mccullagh@primebase.org-20090211192708-jh1mosiqsj2axkyt
BetterĀ format

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
 
13
13
int execute_payment(struct db_context_t *dbc, struct payment_t *data)
14
14
{
15
 
        int rc;
16
 
 
17
 
        char * vals[29];
18
 
        int nvals=29;
19
 
 
20
 
        rc=payment(dbc, data, vals, nvals);
21
 
 
22
 
        if (rc == -1 )
23
 
        {
24
 
          LOG_ERROR_MESSAGE("PAYMENT FINISHED WITH ERRORS \n");
25
 
 
26
 
          //should free memory that was allocated for nvals vars
27
 
          dbt2_free_values(vals, nvals);
28
 
 
29
 
          return ERROR;
30
 
        }
 
15
        int rc;
 
16
 
 
17
        char * vals[29];
 
18
        int nvals=29;
 
19
 
 
20
        rc=payment(dbc, data, vals, nvals);
 
21
 
 
22
        if (rc == -1 )
 
23
        {
 
24
                LOG_ERROR_MESSAGE("PAYMENT FINISHED WITH ERRORS \n");
 
25
 
 
26
                //should free memory that was allocated for nvals vars
 
27
                dbt2_free_values(vals, nvals);
 
28
 
 
29
                return ERROR;
 
30
        }
31
31
 
32
32
        return OK;
33
33
}
43
43
        char c_last[C_LAST_LEN+1];
44
44
        float h_amount = data->pay_h_amount;
45
45
 
46
 
        struct sql_result_t result;
 
46
        struct sql_result_t result;
47
47
 
48
 
        int W_NAME=0;
49
 
        int W_STREET_1=1;
50
 
        int W_STREET_2=2;
51
 
        int W_CITY=3;
52
 
        int W_STATE=4;
53
 
        int W_ZIP=5;
54
 
        int D_NAME=6;
55
 
        int D_STREET_1=7;
56
 
        int D_STREET_2=8;
57
 
        int D_CITY=9;
58
 
        int D_STATE=10;
59
 
        int D_ZIP=11;
60
 
        int TMP_C_ID=12;
61
 
        int C_FIRST=13;
62
 
        int C_MIDDLE=14;
63
 
        int MY_C_LAST=15;
64
 
        int C_STREET_1=16;
65
 
        int C_STREET_2=17;
66
 
        int C_CITY=18;
67
 
        int C_STATE=19;
68
 
        int C_ZIP=20;
69
 
        int C_PHONE=21;
70
 
        int C_SINCE=22;
71
 
        int C_CREDIT=23;
72
 
        int C_CREDIT_LIM=24;
73
 
        int C_DISCOUNT=25;
74
 
        int C_BALANCE=26;
75
 
        int C_DATA=27;
76
 
        int C_YTD_PAYMENT=28;
 
48
        int W_NAME=0;
 
49
        int W_STREET_1=1;
 
50
        int W_STREET_2=2;
 
51
        int W_CITY=3;
 
52
        int W_STATE=4;
 
53
        int W_ZIP=5;
 
54
        int D_NAME=6;
 
55
        int D_STREET_1=7;
 
56
        int D_STREET_2=8;
 
57
        int D_CITY=9;
 
58
        int D_STATE=10;
 
59
        int D_ZIP=11;
 
60
        int TMP_C_ID=12;
 
61
        int C_FIRST=13;
 
62
        int C_MIDDLE=14;
 
63
        int MY_C_LAST=15;
 
64
        int C_STREET_1=16;
 
65
        int C_STREET_2=17;
 
66
        int C_CITY=18;
 
67
        int C_STATE=19;
 
68
        int C_ZIP=20;
 
69
        int C_PHONE=21;
 
70
        int C_SINCE=22;
 
71
        int C_CREDIT=23;
 
72
        int C_CREDIT_LIM=24;
 
73
        int C_DISCOUNT=25;
 
74
        int C_BALANCE=26;
 
75
        int C_DATA=27;
 
76
        int C_YTD_PAYMENT=28;
77
77
 
78
78
        char query[4096];
79
79
 
81
81
        char my_w_name[20];
82
82
        char my_d_name[20];
83
83
 
84
 
        dbt2_init_values(vals, nvals);
 
84
        dbt2_init_values(vals, nvals);
85
85
 
86
 
        snprintf(c_last, C_LAST_LEN+1, "%s", data->pay_c_last);
 
86
        snprintf(c_last, C_LAST_LEN+1, "%s", data->pay_c_last);
87
87
 
88
88
#ifdef DEBUG_INPUT_DATA
89
 
        LOG_ERROR_MESSAGE("PAYMENT_INPUT: w_id: %d\n         d_id: %d\n         c_id: %d\n         c_w_id: %d\n         c_d_id: %d\n",w_id,d_id,c_id,c_w_id,c_d_id);
 
89
        LOG_ERROR_MESSAGE("PAYMENT_INPUT: w_id: %d\n    d_id: %d\n      c_id: %d\n      c_w_id: %d\n    c_d_id: %d\n",w_id,d_id,c_id,c_w_id,c_d_id);
90
90
#endif
91
91
        sprintf(query, PAYMENT_1, w_id);
92
92
 
93
93
#ifdef DEBUG_QUERY
94
 
        LOG_ERROR_MESSAGE("PAYMENT_1 query: %s\n",query);
 
94
        LOG_ERROR_MESSAGE("PAYMENT_1 query: %s\n",query);
95
95
#endif
96
 
        if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_1") && result.result_set)
97
 
        {
98
 
          dbt2_sql_fetchrow(dbc, &result);
99
 
 
100
 
          vals[W_NAME]= dbt2_sql_getvalue(dbc, &result, 0);
101
 
          vals[W_STREET_1]= dbt2_sql_getvalue(dbc, &result, 1);
102
 
          vals[W_STREET_2]= dbt2_sql_getvalue(dbc, &result, 2);
103
 
          vals[W_CITY]= dbt2_sql_getvalue(dbc, &result, 3);
104
 
          vals[W_STATE]= dbt2_sql_getvalue(dbc, &result, 4);
105
 
          vals[W_ZIP]= dbt2_sql_getvalue(dbc, &result, 5);
106
 
                                                           //W_NAME W_STREET_1 W_STREET_2
107
 
                                                           //W_CITY W_STATE W_ZIP
108
 
 
109
 
          dbt2_sql_close_cursor(dbc, &result);          
110
 
        }
111
 
        else //error
112
 
        {
113
 
          return -1;
114
 
        }
 
96
        if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_1") && result.result_set)
 
97
        {
 
98
                dbt2_sql_fetchrow(dbc, &result);
 
99
 
 
100
                vals[W_NAME]= dbt2_sql_getvalue(dbc, &result, 0);
 
101
                vals[W_STREET_1]= dbt2_sql_getvalue(dbc, &result, 1);
 
102
                vals[W_STREET_2]= dbt2_sql_getvalue(dbc, &result, 2);
 
103
                vals[W_CITY]= dbt2_sql_getvalue(dbc, &result, 3);
 
104
                vals[W_STATE]= dbt2_sql_getvalue(dbc, &result, 4);
 
105
                vals[W_ZIP]= dbt2_sql_getvalue(dbc, &result, 5);
 
106
                                                                //W_NAME W_STREET_1 W_STREET_2
 
107
                                                                //W_CITY W_STATE W_ZIP
 
108
 
 
109
                dbt2_sql_close_cursor(dbc, &result);    
 
110
        }
 
111
        else //error
 
112
        {
 
113
                return -1;
 
114
        }
115
115
 
116
116
        sprintf(query, PAYMENT_2, h_amount, w_id);
117
117
 
118
118
#ifndef NO_CONFLICT_TEST
119
 
                /* This UPDATE locks an entire warehouse, and would normally
120
 
                 * be done at the end of the transaction to reduce conflicts.
121
 
                 * But for the low conflict test we leave it out altogether.
122
 
                 */
 
119
        /* This UPDATE locks an entire warehouse, and would normally
 
120
         * be done at the end of the transaction to reduce conflicts.
 
121
         * But for the low conflict test we leave it out altogether.
 
122
         */
123
123
#ifdef DEBUG_QUERY
124
 
        LOG_ERROR_MESSAGE("PAYMENT_2 query: %s\n",query);
 
124
        LOG_ERROR_MESSAGE("PAYMENT_2 query: %s\n",query);
125
125
#endif
126
126
 
127
 
        if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_2"))
128
 
        {
129
 
          return -1;
130
 
        }
 
127
        if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_2"))
 
128
        {
 
129
                return -1;
 
130
        }
131
131
#endif
132
132
 
133
133
        sprintf(query, PAYMENT_3, d_id, w_id);
134
134
 
135
135
#ifdef DEBUG_QUERY
136
 
        LOG_ERROR_MESSAGE("PAYMENT_3 query: %s\n",query);
 
136
        LOG_ERROR_MESSAGE("PAYMENT_3 query: %s\n",query);
137
137
#endif
138
138
 
139
 
        if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_3") && result.result_set)
140
 
        {
141
 
          dbt2_sql_fetchrow(dbc, &result);
 
139
        if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_3") && result.result_set)
 
140
        {
 
141
                dbt2_sql_fetchrow(dbc, &result);
142
142
 
143
 
          vals[D_NAME]= dbt2_sql_getvalue(dbc, &result, 0);
144
 
          vals[D_STREET_1]= dbt2_sql_getvalue(dbc, &result, 1);
145
 
          vals[D_STREET_2]= dbt2_sql_getvalue(dbc, &result, 2);
146
 
          vals[D_CITY]= dbt2_sql_getvalue(dbc, &result, 3);
147
 
          vals[D_STATE]= dbt2_sql_getvalue(dbc, &result, 4);
148
 
          vals[D_ZIP]= dbt2_sql_getvalue(dbc, &result, 5);
149
 
                                                           //D_NAME D_STREET_1 D_STREET_2
150
 
                                                           //D_CITY D_STATE D_ZIP
151
 
          
152
 
          dbt2_sql_close_cursor(dbc, &result);
153
 
        }
154
 
        else //error
155
 
        {
156
 
          return -1;
157
 
        }
 
143
                vals[D_NAME]= dbt2_sql_getvalue(dbc, &result, 0);
 
144
                vals[D_STREET_1]= dbt2_sql_getvalue(dbc, &result, 1);
 
145
                vals[D_STREET_2]= dbt2_sql_getvalue(dbc, &result, 2);
 
146
                vals[D_CITY]= dbt2_sql_getvalue(dbc, &result, 3);
 
147
                vals[D_STATE]= dbt2_sql_getvalue(dbc, &result, 4);
 
148
                vals[D_ZIP]= dbt2_sql_getvalue(dbc, &result, 5);
 
149
                                                                //D_NAME D_STREET_1 D_STREET_2
 
150
                                                                //D_CITY D_STATE D_ZIP
 
151
                
 
152
                dbt2_sql_close_cursor(dbc, &result);
 
153
        }
 
154
        else //error
 
155
        {
 
156
                return -1;
 
157
        }
158
158
 
159
159
        sprintf(query, PAYMENT_4, h_amount, d_id, w_id);
160
160
 
161
161
#ifdef DEBUG_QUERY
162
 
        LOG_ERROR_MESSAGE("PAYMENT_4 query: %s\n", query);
 
162
        LOG_ERROR_MESSAGE("PAYMENT_4 query: %s\n", query);
163
163
#endif
164
164
 
165
 
        if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_4"))
166
 
        {
167
 
          LOG_ERROR_MESSAGE("PAYMENT_4 query: %s", query);
168
 
          return -1;
169
 
        }
 
165
        if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_4"))
 
166
        {
 
167
                LOG_ERROR_MESSAGE("PAYMENT_4 query: %s", query);
 
168
                return -1;
 
169
        }
170
170
 
171
171
        if (c_id == 0) 
172
 
        {
173
 
          sprintf(query, PAYMENT_5, w_id, d_id, c_last);
 
172
        {
 
173
                sprintf(query, PAYMENT_5, w_id, d_id, c_last);
174
174
 
175
175
#ifdef DEBUG_QUERY
176
 
          LOG_ERROR_MESSAGE("PAYMENT_5 query: %s\n", query);
 
176
                LOG_ERROR_MESSAGE("PAYMENT_5 query: %s\n", query);
177
177
#endif
178
178
 
179
 
          if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_5") && result.result_set)
180
 
          {
181
 
            dbt2_sql_fetchrow(dbc, &result);
182
 
            vals[TMP_C_ID]= dbt2_sql_getvalue(dbc, &result, 0);
183
 
            dbt2_sql_close_cursor(dbc, &result);
 
179
                if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_5") && result.result_set)
 
180
                {
 
181
                        dbt2_sql_fetchrow(dbc, &result);
 
182
                        vals[TMP_C_ID]= dbt2_sql_getvalue(dbc, &result, 0);
 
183
                        dbt2_sql_close_cursor(dbc, &result);
184
184
 
185
 
            if (!vals[TMP_C_ID])
186
 
            { 
187
 
              LOG_ERROR_MESSAGE("ERROR: TMP_C_ID=NULL for query PAYMENT_5:\n%s\n", query);
188
 
              return -1;
189
 
            }                                                                  
190
 
            my_c_id = atoi(vals[TMP_C_ID]);
191
 
          }
192
 
          else //error
193
 
          {
194
 
            return -1;
195
 
          }
196
 
        }
197
 
        else
198
 
        {
199
 
          my_c_id = c_id;
200
 
          vals[TMP_C_ID]=NULL;
 
185
                        if (!vals[TMP_C_ID])
 
186
                        { 
 
187
                        LOG_ERROR_MESSAGE("ERROR: TMP_C_ID=NULL for query PAYMENT_5:\n%s\n", query);
 
188
                        return -1;
 
189
                        }                                                               
 
190
                        my_c_id = atoi(vals[TMP_C_ID]);
 
191
                }
 
192
                else //error
 
193
                {
 
194
                        return -1;
 
195
                }
 
196
        }
 
197
        else
 
198
        {
 
199
                my_c_id = c_id;
 
200
                vals[TMP_C_ID]=NULL;
201
201
        }
202
202
 
203
203
        sprintf(query, PAYMENT_6, c_w_id, c_d_id, my_c_id);
204
204
 
205
205
#ifdef DEBUG_QUERY
206
 
        LOG_ERROR_MESSAGE("PAYMENT_6 query: %s\n",query);
 
206
        LOG_ERROR_MESSAGE("PAYMENT_6 query: %s\n",query);
207
207
#endif
208
 
        if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_6") && result.result_set)
209
 
        {
210
 
          dbt2_sql_fetchrow(dbc, &result);
211
 
                                                            //C_FIRST C_MIDDLE MY_C_LAST
212
 
                                                            //C_STREET_1 C_STREET_2 C_CITY
213
 
                                                            //C_STATE C_ZIP C_PHONE C_SINCE
214
 
                                                            //C_CREDIT C_CREDIT_LIM C_DISCOUNT
215
 
                                                            //C_BALANCE C_DATA C_YTD_PAYMENT
216
 
                                                            //C_BALANCE and C_YTD_PAYMENT can be NULL
217
 
          vals[C_FIRST]= dbt2_sql_getvalue(dbc, &result, 0);
218
 
          vals[C_MIDDLE]= dbt2_sql_getvalue(dbc, &result, 1);
219
 
          vals[MY_C_LAST]= dbt2_sql_getvalue(dbc, &result, 2);
220
 
          vals[C_STREET_1]= dbt2_sql_getvalue(dbc, &result, 3);
221
 
          vals[C_STREET_2]= dbt2_sql_getvalue(dbc, &result, 4);
222
 
          vals[C_CITY]= dbt2_sql_getvalue(dbc, &result, 5);
223
 
          vals[C_STATE]= dbt2_sql_getvalue(dbc, &result, 6);
224
 
          vals[C_ZIP]= dbt2_sql_getvalue(dbc, &result, 7);
225
 
          vals[C_PHONE]= dbt2_sql_getvalue(dbc, &result, 8);
226
 
          vals[C_SINCE]= dbt2_sql_getvalue(dbc, &result, 9);
227
 
          vals[C_CREDIT]= dbt2_sql_getvalue(dbc, &result, 10);
228
 
          vals[C_CREDIT_LIM]= dbt2_sql_getvalue(dbc, &result, 11);
229
 
          vals[C_DISCOUNT]= dbt2_sql_getvalue(dbc, &result, 12);
230
 
          vals[C_BALANCE]= dbt2_sql_getvalue(dbc, &result, 13);
231
 
          vals[C_DATA]= dbt2_sql_getvalue(dbc, &result, 14);
232
 
          vals[C_YTD_PAYMENT]= dbt2_sql_getvalue(dbc, &result, 15);
233
 
          
234
 
          dbt2_sql_close_cursor(dbc, &result);
 
208
        if (dbt2_sql_execute(dbc, query, &result, "PAYMENT_6") && result.result_set)
 
209
        {
 
210
                dbt2_sql_fetchrow(dbc, &result);
 
211
                //C_FIRST C_MIDDLE MY_C_LAST
 
212
                //C_STREET_1 C_STREET_2 C_CITY
 
213
                //C_STATE C_ZIP C_PHONE C_SINCE
 
214
                //C_CREDIT C_CREDIT_LIM C_DISCOUNT
 
215
                //C_BALANCE C_DATA C_YTD_PAYMENT
 
216
                //C_BALANCE and C_YTD_PAYMENT can be NULL
 
217
                vals[C_FIRST]= dbt2_sql_getvalue(dbc, &result, 0);
 
218
                vals[C_MIDDLE]= dbt2_sql_getvalue(dbc, &result, 1);
 
219
                vals[MY_C_LAST]= dbt2_sql_getvalue(dbc, &result, 2);
 
220
                vals[C_STREET_1]= dbt2_sql_getvalue(dbc, &result, 3);
 
221
                vals[C_STREET_2]= dbt2_sql_getvalue(dbc, &result, 4);
 
222
                vals[C_CITY]= dbt2_sql_getvalue(dbc, &result, 5);
 
223
                vals[C_STATE]= dbt2_sql_getvalue(dbc, &result, 6);
 
224
                vals[C_ZIP]= dbt2_sql_getvalue(dbc, &result, 7);
 
225
                vals[C_PHONE]= dbt2_sql_getvalue(dbc, &result, 8);
 
226
                vals[C_SINCE]= dbt2_sql_getvalue(dbc, &result, 9);
 
227
                vals[C_CREDIT]= dbt2_sql_getvalue(dbc, &result, 10);
 
228
                vals[C_CREDIT_LIM]= dbt2_sql_getvalue(dbc, &result, 11);
 
229
                vals[C_DISCOUNT]= dbt2_sql_getvalue(dbc, &result, 12);
 
230
                vals[C_BALANCE]= dbt2_sql_getvalue(dbc, &result, 13);
 
231
                vals[C_DATA]= dbt2_sql_getvalue(dbc, &result, 14);
 
232
                vals[C_YTD_PAYMENT]= dbt2_sql_getvalue(dbc, &result, 15);
 
233
                
 
234
                dbt2_sql_close_cursor(dbc, &result);
235
235
 
236
 
          if (!vals[C_CREDIT])
237
 
          {
238
 
            LOG_ERROR_MESSAGE("ERROR: C_CREDIT=NULL for query PAYMENT_6:\n%s\n", query);
239
 
            return -1;
240
 
          }
241
 
        }
242
 
        else //error
243
 
        {
244
 
          return -1;
245
 
        }
 
236
                if (!vals[C_CREDIT])
 
237
                {
 
238
                        LOG_ERROR_MESSAGE("ERROR: C_CREDIT=NULL for query PAYMENT_6:\n%s\n", query);
 
239
                        return -1;
 
240
                }
 
241
        }
 
242
        else //error
 
243
        {
 
244
                return -1;
 
245
        }
246
246
      
247
247
        /* It's either "BC" or "GC". */
248
248
        if (vals[C_CREDIT][0] == 'G') 
249
 
        {
250
 
          sprintf(query, PAYMENT_7_GC, h_amount, my_c_id, c_w_id, c_d_id);
251
 
 
252
 
#ifdef DEBUG_QUERY
253
 
          LOG_ERROR_MESSAGE("PAYMENT_7_GC query: %s\n",query);
254
 
#endif
255
 
          if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_7_GC"))
256
 
          {
257
 
            return -1;
258
 
          }
259
 
        }
260
 
        else
261
 
        {
262
 
          char my_c_data[1000];
263
 
          sprintf(my_c_data, "%d %d %d %d %d %f ", my_c_id, c_d_id,
264
 
                        c_w_id, d_id, w_id, h_amount);
265
 
          /* Copy and escape all at once! */
266
 
          dbt2_escape_str(vals[C_DATA], my_c_data);
267
 
          sprintf(query, PAYMENT_7_BC, h_amount, my_c_data, my_c_id, c_w_id, c_d_id);
268
 
 
269
 
#ifdef DEBUG_QUERY
270
 
          LOG_ERROR_MESSAGE("PAYMENT_7_BC query: %s\n",query);
271
 
#endif
272
 
 
273
 
          if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_7_BC"))
274
 
          {
275
 
            return -1;
276
 
          }
 
249
        {
 
250
                sprintf(query, PAYMENT_7_GC, h_amount, my_c_id, c_w_id, c_d_id);
 
251
 
 
252
#ifdef DEBUG_QUERY
 
253
                LOG_ERROR_MESSAGE("PAYMENT_7_GC query: %s\n",query);
 
254
#endif
 
255
                if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_7_GC"))
 
256
                {
 
257
                        return -1;
 
258
                }
 
259
        }
 
260
        else
 
261
        {
 
262
                char my_c_data[1000];
 
263
                sprintf(my_c_data, "%d %d %d %d %d %f ", my_c_id, c_d_id,
 
264
                                c_w_id, d_id, w_id, h_amount);
 
265
                  /* Copy and escape all at once! */
 
266
                  dbt2_escape_str(vals[C_DATA], my_c_data);
 
267
                sprintf(query, PAYMENT_7_BC, h_amount, my_c_data, my_c_id, c_w_id, c_d_id);
 
268
 
 
269
#ifdef DEBUG_QUERY
 
270
                LOG_ERROR_MESSAGE("PAYMENT_7_BC query: %s\n",query);
 
271
#endif
 
272
 
 
273
                if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_7_BC"))
 
274
                {
 
275
                        return -1;
 
276
                }
277
277
        }
278
278
 
279
279
        /* Escape special characters. */
280
280
        dbt2_escape_str(vals[W_NAME], my_w_name);
281
281
        dbt2_escape_str(vals[D_NAME], my_d_name);
282
282
 
283
 
        sprintf(query, PAYMENT_8, my_c_id, c_d_id, c_w_id, d_id, w_id,
284
 
                h_amount, my_w_name, my_d_name);
 
283
        sprintf(query, PAYMENT_8, my_c_id, c_d_id, c_w_id, d_id, w_id, h_amount, my_w_name, my_d_name);
285
284
 
286
285
#ifdef DEBUG_QUERY
287
 
        LOG_ERROR_MESSAGE("PAYMENT_8 query: %s\n",query);
 
286
        LOG_ERROR_MESSAGE("PAYMENT_8 query: %s\n",query);
288
287
#endif
289
288
 
290
 
        if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_8"))
291
 
        {
292
 
          return -1;
293
 
        }
294
 
 
295
 
        dbt2_free_values(vals, nvals);
296
 
 
297
 
        return 1;
 
289
        if (!dbt2_sql_execute(dbc, query, &result, "PAYMENT_8"))
 
290
        {
 
291
                return -1;
 
292
        }
 
293
 
 
294
        dbt2_free_values(vals, nvals);
 
295
 
 
296
        return 1;
298
297
}
299
298