id_spreadsheet = par_id;
__CREATE_QUERY("
SELECT co_sys_expression_fillV(%d,%d,%d,%d);
", id_spreadsheet, id_column, id_row, id_last_row)
__SQL_GET_RESULT
__CLEAR_RESULT
// always copy references with the same arguments
cou_broker( "sys", "expression_cell", "fillDownCellRef", cnx, struct_in );
cou_broker( "sys", "expression_range", "fillDownRangeRef", cnx, struct_in );
@co_call('"sys"','"expression"','evalRectangle',par_id=>id_spreadsheet,id_column=>id_column,id_row=>id_row,id_last_column=>id_column,id_last_row=>id_last_row);
// TODO: send actions
__SQL_GET_INTEGER(num_first_row,
"SELECT row_number FROM co_sys_spreadsheet_row WHERE id=%d",
id_row )
__ASSERT( (num_first_row>0) , "row with id=%d not found", id_row)
__SQL_GET_INTEGER(num_last_row,
"SELECT row_number FROM co_sys_spreadsheet_row WHERE id=%d",
id_last_row )
__ASSERT( (num_last_row>0) , "row with id=%d not found", id_last_row)
__CREATE_QUERY("
SELECT
id_row,
expression_parsed
FROM co_sys_expression AS EXPR, co_sys_spreadsheet_row AS ROW
WHERE EXPR.id_spreadsheet=%d AND EXPR.id_column=%d AND
EXPR.id_row = ROW.id AND ROW.row_number>%d AND ROW.row_number<=%d
", id_spreadsheet, id_column,
num_first_row, num_last_row)
__SQL_GET_RESULT
ntuples = cor_GetTupleCount(cnx, corec);
{
const char* class_names[] = {"spreadsheet","spreadsheet_column","spreadsheet_row",NULL};
int object_ids[] = {id_spreadsheet,id_column,id_row};
int id_row_current;
for (i=0; i<ntuples; i++) {
id_row_current = atoi(cor_GetValue(cnx, corec, i, 0));
object_ids[2] = id_row_current;
cou_queueActionX( cnx, "expression", class_names, object_ids,CO_OP_UPDATE, "expression_parsed", cor_GetValue(cnx, corec, i, 1), NULL );
}
}
__CLEAR_RESULT