Ejemplo n.º 1
0
int main(int argc, char *argv[])
{
  attachsql_connect_t *con= NULL;
  attachsql_error_st *error= NULL;
  const char *query= "SELECT * FROM t1 WHERE name='fred'";
  attachsql_return_t ret= ATTACHSQL_RETURN_NONE;
  attachsql_query_row_st *row;
  uint16_t columns, current_column;

  con= attachsql_connect_create("localhost", 3306, "test", "test", "testdb", NULL);
  error= attachsql_query(con, strlen(query), query, 0, NULL);

  while ((ret != ATTACHSQL_RETURN_EOF) && (error == NULL))
  {
    ret= attachsql_connect_poll(con, &error);
    if (ret != ATTACHSQL_RETURN_ROW_READY)
    {
      continue;
    }
    row= attachsql_query_row_get(con, &error);
    columns= attachsql_query_column_count(con);
    for (current_column= 0; current_column < columns; current_column++)
    {
      printf("%.*s ", (int)row[current_column].length, row[current_column].data);
    }
    printf("\n");
    attachsql_query_row_next(con);
  }
  if (error != NULL)
  {
    printf("Error occurred: %s", error->msg);
  }
  attachsql_query_close(con);
  attachsql_connect_destroy(con);
}
Ejemplo n.º 2
0
int main(void)
{
  attachsql_connect_t *con= NULL;
  attachsql_error_t *error= NULL;
  const char *query= "SELECT * FROM t1 WHERE name = ? AND age > ?";
  attachsql_return_t ret= ATTACHSQL_RETURN_NONE;
  attachsql_query_row_st *row;
  uint16_t columns, current_column;
  attachsql_query_parameter_st param[2];

  con= attachsql_connect_create("localhost", 3306, "test", "test", "testdb", NULL);
  const char *name= "fred";
  uint32_t age= 30;
  param[0].type= ATTACHSQL_ESCAPE_TYPE_CHAR;
  param[0].data= (char*)name;
  param[0].length= strlen(name);
  param[1].type= ATTACHSQL_ESCAPE_TYPE_INT;
  param[1].data= &age;
  param[1].is_unsigned= true;
  attachsql_query(con, strlen(query), query, 2, param, &error);

  while ((ret != ATTACHSQL_RETURN_EOF) && (error == NULL))
  {
    ret= attachsql_connect_poll(con, &error);
    if (ret != ATTACHSQL_RETURN_ROW_READY)
    {
      continue;
    }
    row= attachsql_query_row_get(con, &error);
    columns= attachsql_query_column_count(con);
    for (current_column= 0; current_column < columns; current_column++)
    {
      printf("%.*s ", (int)row[current_column].length, row[current_column].data);
    }
    printf("\n");
    attachsql_query_row_next(con);
  }
  if (error != NULL)
  {
    printf("Error occurred: %s", attachsql_error_message(error));
    attachsql_error_free(error);
  }
  attachsql_query_close(con);
  attachsql_connect_destroy(con);
}
Ejemplo n.º 3
0
int attachsql_drv_query(db_conn_t *sb_conn, const char *query,
                      db_result_set_t *rs)
{
  (void) rs;
  attachsql_connect_t *con = sb_conn->ptr;
  unsigned int rc;
  attachsql_error_t *error= NULL;
  attachsql_return_t aret= ATTACHSQL_RETURN_NONE;

  /* Close any previous query */
  attachsql_query_close(con);

  DEBUG("attachsql_query(%p, \"%s\", %u)",
        con,
        query,
        strlen(query));
  attachsql_query(con, strlen(query), query, 0, NULL, &error);

  while((aret != ATTACHSQL_RETURN_EOF) && (aret != ATTACHSQL_RETURN_ROW_READY))
  {
    aret= attachsql_connect_poll(con, &error);

    if (error)
    {
      rc= attachsql_error_code(error);
      if (rc == 1213 || rc == 1205 || rc == 1020)
      {
        attachsql_error_free(error);
        return SB_DB_ERROR_DEADLOCK;
      }
      log_text(LOG_ALERT, "libAttachSQL Query Failed: %u:%s", attachsql_error_code(error), attachsql_error_message(error));
      attachsql_error_free(error);
      return SB_DB_ERROR_FAILED;
    }
  }
  //rs->connection->ptr= con;
  DEBUG("attachsql_query \"%s\" returned %d", query, aret);

  return SB_DB_ERROR_NONE;
}
Ejemplo n.º 4
0
int _attachsql_QueryObject_Initialize(_attachsql_QueryObject *self, PyObject *args, PyObject *kwargs)
{
  bool ret;
  char *query= NULL;
  int query_length;
  int param_count= 0;
  int i;
  int64_t *tmp_int;
  uint64_t *tmp_uint;
  double *tmp_double;
  attachsql_query_parameter_st *asql_params= NULL;
  PyObject *param_list= NULL;
  PyObject *param_dict= NULL;
  PyObject *type= NULL;
  PyObject *value= NULL;
  PyObject *is_unsigned= NULL;
  attachsql_error_t *error= NULL;
  if (!PyArg_ParseTuple(args, "s#|O!", &query, &query_length, &PyList_Type, &param_list))
  {
    return -1;
  }

  if (!param_list)
  {
    ret= attachsql_query(self->pycon->conn, query_length, query, 0, NULL, &error);
    if (error)
    {
      _attachsql_Exception(error);
      return -1;
    }
    return 0;
  }
  /* For parameters the user should use:
   * .query("SELECT * FROM test WHERE a=? and b=?", [{'type': ESCAPE_TYPE_CHAR, 'data': 'hello'}, {'type': ESCAPE_TYPE_INT, 'data': 1}])
   */
  param_count= PyList_Size(param_list);
  asql_params= (attachsql_query_parameter_st*)malloc(sizeof(attachsql_query_parameter_st) * param_count);
  /* This is ugly, need to find a better way */
  tmp_int= (int64_t*)malloc(sizeof(int64_t) * param_count);
  tmp_uint= (uint64_t*)malloc(sizeof(uint64_t) * param_count);
  tmp_double= (double*)malloc(sizeof(double) * param_count);

  for (i= 0; i < param_count; i++)
  {
    param_dict= PyList_GetItem(param_list, i);
    if (!PyDict_Check(param_dict))
    {
      PyErr_SetString(PyExc_TypeError, "Dict not found in list");
      free(asql_params);
      return -1;
    }
    type= PyDict_GetItemString(param_dict, "type");
    value= PyDict_GetItemString(param_dict, "data");
    is_unsigned= PyDict_GetItemString(param_dict, "is_unsigned");
    if (!type || !value || !PyInt_Check(type))
    {
      PyErr_SetString(PyExc_TypeError, "Bad type or value in dict");
      free(asql_params);
      return -1;
    }
    asql_params[i].type= PyInt_AsLong(type);

    switch (asql_params[i].type)
    {
      case ATTACHSQL_ESCAPE_TYPE_NONE:
        asql_params[i].data= NULL;
        break;
      case ATTACHSQL_ESCAPE_TYPE_CHAR:
      case ATTACHSQL_ESCAPE_TYPE_CHAR_LIKE:
        asql_params[i].data= PyString_AsString(value);
        asql_params[i].length= PyString_Size(value);
        break;
      case ATTACHSQL_ESCAPE_TYPE_INT:
        if (is_unsigned && PyInt_AsLong(is_unsigned))
        {
          if (PyInt_Check(value))
          {
            tmp_uint[i]= PyInt_AsUnsignedLongMask(value);
          }
          else
          {
            tmp_uint[i]= PyLong_AsUnsignedLong(value);
          }
          asql_params[i].data= &tmp_uint[i];
          asql_params[i].is_unsigned= true;
        }
        else
        {
          if (PyInt_Check(value))
          {
            tmp_int[i]= PyInt_AsLong(value);
          }
          else
          {
            tmp_int[i]= PyLong_AsLong(value);
          }
          asql_params[i].data= &tmp_int[i];
          asql_params[i].is_unsigned= false;
        }
        break;
      case ATTACHSQL_ESCAPE_TYPE_BIGINT:
        if (is_unsigned && PyInt_AsLong(is_unsigned))
        {
          if (PyInt_Check(value))
          {
            tmp_uint[i]= PyInt_AsUnsignedLongMask(value);
          }
          else
          {
            tmp_uint[i]= PyLong_AsUnsignedLongLong(value);
          }
          asql_params[i].data= &tmp_uint[i];
          asql_params[i].is_unsigned= true;
        }
        else
        {
          if (PyInt_Check(value))
          {
            tmp_int[i]= PyInt_AsLong(value);
          }
          else
          {
            tmp_int[i]= PyLong_AsLongLong(value);
          }
          asql_params[i].data= &tmp_int[i];
          asql_params[i].is_unsigned= false;
        }
        break;
      case ATTACHSQL_ESCAPE_TYPE_FLOAT:
      case ATTACHSQL_ESCAPE_TYPE_DOUBLE:
        tmp_double[i]= PyFloat_AsDouble(value);
        asql_params[i].data= &tmp_double[i];
        break;
    }
  }
  ret= attachsql_query(self->pycon->conn, query_length, query, param_count, asql_params, &error);
  free(asql_params);
  free(tmp_int);
  free(tmp_uint);
  free(tmp_double);
  if (error)
  {
    _attachsql_Exception(error);
    return -1;
  }
  return 0;
}