__CREATE_QUERY("INSERT INTO co_%s_%s (deleted) VALUES (0)",
par_area, par_class)

__SQL_EXEC

__CREATE_QUERY("SELECT last_value FROM co_%s_%s_sqid",
par_area, par_class)
__SQL_GET_RESULT
new_id= atoi(cor_GetValue(cnx, corec, 0, 0));
__CLEAR_RESULT

puta_classes[0] = (char *) par_class;
puta_ids[0] = new_id;

cou_queueActionX( cnx, par_class, (const char **) puta_classes, puta_ids, CO_OP_CREATE, NULL);

// getting current values

__CREATE_QUERY("SELECT * FROM co_%s_%s WHERE id = %d",
par_area, par_class, new_id)

__SQL_GET_RESULT

puta_classes[0] = (char *) par_class;
puta_ids[0] = new_id;

nFields = cor_GetTupleCount(cnx, corec);
props = ap_palloc(p, 2 * nFields * sizeof(char*) + 1);

for (i = 0; i < nFields; i++)
{
props[2*i] = ap_pstrdup(p, cor_GetFieldName(cnx, corec, i));
props[2*i+1] = ap_pstrdup(p, cor_GetValue(cnx, corec, 0, i));
}
props[2*i]=NULL;

//cou_sendMessage(cnx, "we have props");

__CLEAR_RESULT
cou_queueActionXX( cnx, par_class, (const char **) puta_classes, puta_ids, CO_OP_UPDATE, (const char **) props);
cou_setReturnValue(cnx, &new_id, CO_INTEGER);

//setting ACL for current role
__CREATE_QUERY("INSERT INTO co_sec_acl (id_permission, id_role, area, class_name, id_object)
VALUES ( __PERMISSION_CREATE, %d, '%s', '%s', %d)",
cnx->id_role, par_area, par_class, new_id);