// calculate rowToInsert_num
__CREATE_QUERY("SELECT row_number,spreadsheet_id FROM co_%s_spreadsheet_row WHERE id=%d", par_area, par_id);
__SQL_GET_RESULT
rowToInsert_num = atoi(cor_GetValue(cnx, corec,0,0));
spreadsheet_id = atoi(cor_GetValue(cnx, corec,0,1));
__CLEAR_RESULT
// shift after-rows
__CREATE_QUERY("UPDATE co_%s_spreadsheet_row SET
            row_number=row_number+1 WHERE
            row_number>=%d AND spreadsheet_id=%d", par_area, rowToInsert_num, spreadsheet_id);
__SQL_EXEC
// now insert row
__CREATE_QUERY("INSERT INTO co_%s_spreadsheet_row(row_number,spreadsheet_id)
            VALUES(%d,%d)", par_area, rowToInsert_num, spreadsheet_id);
__SQL_EXEC

// calculate rowInserted_id
__SQL_GET_INTEGER(rowInserted_id,"SELECT id FROM co_%s_spreadsheet_row WHERE
            row_number=%d AND spreadsheet_id=%d", par_area, rowToInsert_num, spreadsheet_id)

sprintf(JSOutBuf,"%d",rowToInsert_num); // the only oportunity to use JSOutBuf
puta_ids[0] = spreadsheet_id; puta_ids[2] = rowInserted_id;
cou_queueActionX( cnx, "spreadsheet_row", puta_classes, puta_ids, CO_OP_INSERT, "number", JSOutBuf, NULL);

@co_call(par_area,'"spreadsheet"',"onEvent",par_id=>spreadsheet_id,column_id=>0,row_id=>par_id,event_name=>'"onaddrow"');