Ejemplo n.º 1
0
SEXP kx_r_execute_with_params(SEXP connection, SEXP query, SEXP param)
{
	K result;
	SEXP s;
	kx_connection = INTEGER_VALUE(connection);
	int i, n = length(param);
	K vector = ktn(KF,n); 
	for (i = 0; i < n; i++) {
      kF(vector)[i] = REAL(param)[i];
    }
    

	result = k(kx_connection, (char*) CHARACTER_VALUE(query), vector, (K)0);
	if (0 == result) {
		error("Error: not connected to kdb+ server\n");
	}
	else if (-128 == result->t) {
		char *e = calloc(strlen(result->s) + 1, 1);
		strcpy(e, result->s);
		r0(result);
		error("Error from kdb+: `%s\n", e);
	}
	s = from_any_kobject(result);
	r0(result);
	return s;
}
Ejemplo n.º 2
0
static
PyObject* from_list_of_kobjects(K x) {
     PyObject* result;
     Py_ssize_t i, length ;
     length = (Py_ssize_t)(x->n);
     result = PyList_New(length);
     for(i = 0; i != length; ++i)
	  PyList_SetItem(result, i, from_any_kobject(xK[i]));
     return result;
}
Ejemplo n.º 3
0
static 
PyObject* from_table_kobject(K x){
     /* 
	the strategy is to create a list of tuples these are then
	passed to OrderedDict to retain the order of the columns for
	example OrderedDict([('pear', 1), ('orange', 2), ('banana',
	3), ('apple', 4)]). OrderedDict does not have a c-api so use a
	callback constructor 
     */
     
     PyObject* result ;
     Py_ssize_t i, length;
     PyObject *keys ;
     PyObject *vals ;

     PyObject *collectionsName, *collectionsMod, *OrderedDict, *pDict,
	  *list, *tple, *args;
     keys = from_any_kobject( kK(x->k)[0] );
     vals = from_columns_kobject( kK(x->k)[1] );

     collectionsName = PyUnicode_FromString((char*)"collections");
     collectionsMod  = PyImport_Import(collectionsName);
     Py_DECREF(collectionsName);
     if(collectionsMod != NULL) {
	  /* printf("creating ordered table\n"); */
	  length = PyList_Size(keys);
	  list = PyList_New(length);
	  for(i = 0; i != length; ++i) {
	       /* tple create new ref, pylist_setitem steals it */
	       tple = PyTuple_Pack(2, PyList_GetItem(keys, i), PyList_GetItem(vals, i));
	       PyList_SetItem(list, i, tple);
	  }
	  pDict = PyModule_GetDict(collectionsMod); // borrowed ref
	  OrderedDict = PyDict_GetItemString(pDict, (char*)"OrderedDict"); // borrowed ref
	  args = PyTuple_Pack(1, list); // new ref
	  result = PyObject_CallObject(OrderedDict, args); // new ref

	  Py_DECREF(args);
	  Py_DECREF(collectionsMod);
	  Py_DECREF(list);
     } else {
	  /* printf("creating unordered table\n"); */
	  result = PyDict_New();
	  if( PyList_CheckExact(keys)) {
	       length = PyList_Size(keys);
	       for(i = 0; i != length; ++i) {
		    PyDict_SetItem(result, PyList_GetItem(keys, i), PyList_GetItem(vals, i));
	       }
	  }
     }
     Py_DECREF(keys);
     Py_DECREF(vals);
     return result;
}
Ejemplo n.º 4
0
static 
PyObject* from_dictionary_kobject(K x){
     PyObject *result;
     PyObject* keys;
     PyObject* vals;
     K table;
     Py_ssize_t i, length ;

     if(98 == xx->t && 98 == xy->t) {
	  r1(x);
	  if(table = ktd(x)) {
	       result = from_table_kobject(table);
	       r0(table);
	       return result;
	  }
     }

     result = PyDict_New();
     length = (Py_ssize_t)(xx->n);
     keys = from_any_kobject(xx);
     vals = from_any_kobject(xy);

     if( PyList_CheckExact(keys)) {
	  for(i=0; i!= length; ++i) {
	       PyDict_SetItem(result, PyList_GetItem(keys, i), PyList_GetItem(vals, i)) ;
	  }
     }
     else {
	  PyDict_SetItem(result, keys, vals);
     }
	
     Py_DECREF(keys);
     Py_DECREF(vals);
	
     return result;
}
Ejemplo n.º 5
0
/*
 * Execute a kdb+ query over the given connection.
 */
SEXP kx_r_execute(SEXP connection, SEXP query)
{
	K result;
	SEXP s;
	kx_connection = INTEGER_VALUE(connection);

	result = k(kx_connection, (char*) CHARACTER_VALUE(query), (K)0);
	if (0 == result) {
		error("Error: not connected to kdb+ server\n");
	}
	else if (-128 == result->t) {
		char *e = calloc(strlen(result->s) + 1, 1);
		strcpy(e, result->s);
		r0(result);
		error("Error from kdb+: `%s\n", e);
	}
	s = from_any_kobject(result);
	r0(result);
	return s;
}
Ejemplo n.º 6
0
static 
PyObject* from_columns_kobject(K x) {
     PyObject *col, *result;
     Py_ssize_t i, length ;
     int type;
     K c;
     length = (Py_ssize_t)(x->n);
     result = PyList_New(length);
     for(i = 0; i != length; ++i) {
	  c = xK[i];
	  type = abs(c->t);
	  if( type == 10) {
	       col = from_string_column_kobject(c);
	  }
	  else {
	       col = from_any_kobject(c);
	  }
	  PyList_SetItem(result, i, col);
     }
     return result;
}
Ejemplo n.º 7
0
static 
PyObject* from_table_kobject(K x){
     PyObject* result ;
     Py_ssize_t i, length;
     PyObject *keys ;
     PyObject *vals ;
	
     keys = from_any_kobject( kK(x->k)[0] );
     vals = from_columns_kobject( kK(x->k)[1] );
     result = PyDict_New();
     if( PyList_CheckExact(keys)) {
	  length = PyList_Size(keys);
	  for(i = 0; i != length; ++i) {
	       PyDict_SetItem(result, PyList_GetItem(keys, i), PyList_GetItem(vals, i));
	  }
     }
	
     Py_DECREF(keys);
     Py_DECREF(vals);
	
     return result;
}