File: sci_mysql_fetch_row.c

package info (click to toggle)
scilab-scimysql 0.1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 988 kB
  • ctags: 105
  • sloc: xml: 7,315; ansic: 2,573; sql: 143; makefile: 19; sh: 6
file content (84 lines) | stat: -rw-r--r-- 2,174 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2010 - DIGITEO - Yann Collette
 * 
 * This file must be used under the terms of the CeCILL.
 * This source file is licensed as described in the file COPYING, which
 * you should have received as part of this distribution.  The terms
 * are also available at    
 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 *
 */
#include <sci_mysql.h>

int sci_mysql_fetch_row(char * fname)
{
  int * sql_res_pointer_in = NULL;
  int m_sql_row_pointer_out, n_sql_row_pointer_out;
  MYSQL_RES * mysql_res_ptr = NULL;
  MYSQL_ROW mysql_row_ptr; // It's a char **
  char ** res_copy = NULL;
  unsigned long * lengths = NULL;
  int i;
  void * ptr_in = NULL;
  SciErr _SciErr;

  CheckRhs(1,1);
  CheckLhs(0,1);

  _SciErr = getVarAddressFromPosition(pvApiCtx, 1, &sql_res_pointer_in);
  getPointer(pvApiCtx, sql_res_pointer_in, &ptr_in);
  mysql_res_ptr = (MYSQL_RES *)ptr_in;

  if (mysql_res_ptr==NULL)
    {
      Scierror(999,"%s: problem with the mysql_res pointer\n", fname);
      return 0;
    }

  mysql_row_ptr = mysql_fetch_row(mysql_res_ptr);
  lengths = mysql_fetch_lengths(mysql_res_ptr);

#ifdef DEBUG
  sciprint("DEBUG: mysql_row_ptr = %ld, lengths = %ld\n", mysql_row_ptr, lengths);
#endif

  if (mysql_row_ptr)
    {
      //YC: à vérifier !!
      n_sql_row_pointer_out = 1;
      m_sql_row_pointer_out = mysql_num_fields(mysql_res_ptr);
      
      res_copy = (char **)MALLOC(m_sql_row_pointer_out*sizeof(char *));

#ifdef DEBUG
      sciprint("m_sql_row_pointer_out = %d\n", m_sql_row_pointer_out);
#endif

      for(i=0; i<m_sql_row_pointer_out;i++)
	{
#ifdef DEBUG
	  sciprint("DEBUG: orig = !%s!, length = %d\n", mysql_row_ptr[i],lengths[i]);
#endif

#ifdef _MSC_VER
	  res_copy[i] = strdup(mysql_row_ptr[i]);
#else
	  res_copy[i] = strndup(mysql_row_ptr[i],lengths[i]);
#endif
	}
      
      _SciErr = createMatrixOfString(pvApiCtx, Rhs+1, m_sql_row_pointer_out, n_sql_row_pointer_out, res_copy);

      freeArrayOfString(res_copy, m_sql_row_pointer_out);
    }
  else
    {
      createEmptyMatrix(pvApiCtx, Rhs+1);
    }

  LhsVar(1) = Rhs+1;


  return 0;
}