/[radius]/radius/sql/odbc.c
ViewVC logotype

Diff of /radius/sql/odbc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by gray, Wed Apr 30 08:38:30 2003 UTC revision 1.9 by gray, Fri Jun 13 07:25:32 2003 UTC
# Line 138  rad_odbc_reconnect(int type, struct sql_ Line 138  rad_odbc_reconnect(int type, struct sql_
138  }  }
139    
140  static void  static void
141  rad_odbc_disconnect(struct sql_connection *conn,  rad_odbc_disconnect(struct sql_connection *conn, int drop ARG_UNUSED)
                     int drop /* currently unused */)  
142  {  {
143          ODBCconn *odata;          ODBCconn *odata;
144          if (!conn->data)          if (!conn->data)
# Line 263  rad_odbc_getpwd(struct sql_connection *c Line 262  rad_odbc_getpwd(struct sql_connection *c
262  }  }
263    
264  typedef struct {  typedef struct {
265          void            *stmt;          SQLHSTMT stmt;
266          int             nfields;          int   nfields;
267            int   ntuples;
268  } EXEC_DATA;  } EXEC_DATA;
269    
270    static int
271    rad_odbc_n_columns(struct sql_connection *conn, void *data, size_t *np)
272    {
273            EXEC_DATA *edata = (EXEC_DATA*)data;
274    
275            if (!data)
276                    return -1;
277            *np = edata->nfields;
278            return 0;
279    }
280    
281    static int
282    rad_odbc_n_tuples(struct sql_connection *conn, void *data, size_t *np)
283    {
284            EXEC_DATA *edata = (EXEC_DATA*)data;
285    
286            if (!data)
287                    return -1;
288            *np = edata->ntuples;
289            return 0;
290    }
291    
292  static void *  static void *
293  rad_odbc_exec(struct sql_connection *conn, char *query)  rad_odbc_exec(struct sql_connection *conn, char *query)
294  {  {
# Line 275  rad_odbc_exec(struct sql_connection *con Line 297  rad_odbc_exec(struct sql_connection *con
297          long            result;          long            result;
298          SQLHSTMT        stmt;          SQLHSTMT        stmt;
299          SQLSMALLINT     ccount;          SQLSMALLINT     ccount;
300            SQLINTEGER      rcount;
301          EXEC_DATA      *data;          EXEC_DATA      *data;
302                    
303          if (!conn || !conn->data)          if (!conn || !conn->data)
# Line 282  rad_odbc_exec(struct sql_connection *con Line 305  rad_odbc_exec(struct sql_connection *con
305    
306          debug(1, ("query: %s", query));          debug(1, ("query: %s", query));
307    
308          odata = (ODBCconn*)(conn->data);          odata = (ODBCconn*)conn->data;
309          result = SQLAllocHandle(SQL_HANDLE_STMT,odata->dbc, &stmt);              result = SQLAllocHandle(SQL_HANDLE_STMT,odata->dbc, &stmt);    
310          if (result != SQL_SUCCESS) {          if (result != SQL_SUCCESS) {
311                  rad_odbc_diag(SQL_HANDLE_DBC, odata->dbc,                  rad_odbc_diag(SQL_HANDLE_DBC, odata->dbc,
# Line 298  rad_odbc_exec(struct sql_connection *con Line 321  rad_odbc_exec(struct sql_connection *con
321                  return NULL;                  return NULL;
322          }          }
323                    
324          result = SQLNumResultCols(stmt, &ccount);                if (SQLNumResultCols(stmt, &ccount) != SQL_SUCCESS
325          if (result != SQL_SUCCESS) {              || SQLRowCount(stmt, &rcount) != SQL_SUCCESS) {
326                  rad_odbc_diag(SQL_HANDLE_STMT, stmt,                  rad_odbc_diag(SQL_HANDLE_STMT, stmt,
327                                "SQLNumResultCount");                                "SQLNumResultCount");
328                  SQLFreeHandle(SQL_HANDLE_STMT, stmt);                  SQLFreeHandle(SQL_HANDLE_STMT, stmt);
329                  return NULL;                  return NULL;
330          }          }
331    
332            if (rcount == 0) {
333                    SQLFreeHandle(SQL_HANDLE_STMT, stmt);
334                    return NULL;
335            }
336                    
337            
338          data = emalloc(sizeof(*data));          data = emalloc(sizeof(*data));
339          data->stmt = stmt;          data->stmt = stmt;
340          data->nfields = ccount;          data->nfields = ccount;
341            data->ntuples = rcount;
342          return (void*)data;          return (void*)data;
343  }  }
344    
# Line 359  rad_odbc_next_tuple(struct sql_connectio Line 389  rad_odbc_next_tuple(struct sql_connectio
389          rad_odbc_diag(SQL_HANDLE_STMT, edata->stmt,          rad_odbc_diag(SQL_HANDLE_STMT, edata->stmt,
390                        "SQLFetch");                        "SQLFetch");
391          return 1;          return 1;
   
   
392  }  }
393    
394  /*ARGSUSED*/  /*ARGSUSED*/
# Line 386  SQL_DISPATCH_TAB odbc_dispatch_tab[] = { Line 414  SQL_DISPATCH_TAB odbc_dispatch_tab[] = {
414          rad_odbc_exec,          rad_odbc_exec,
415          rad_odbc_column,          rad_odbc_column,
416          rad_odbc_next_tuple,          rad_odbc_next_tuple,
417          rad_odbc_free          rad_odbc_free,
418            rad_odbc_n_tuples,
419            rad_odbc_n_columns,
420  };  };
421    
422  #endif  #endif

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26