if (NQ_WHITELIST_EXISTENTIAL ? count($whitelist) > 0 : true) { $query->whitelist_columns($whitelist); } } # Blacklisting the locked and partitioned fields $query->blacklist_columns(explode(',', NQ_LOCKED_FIELDS)); $query->blacklist_columns(explode(',', $partition_data['partition_column'])); # Order by if (isset($_CGET['order'])) { $order_sort = isset($_CGET['ordersort']) ? explode(',', $_CGET['ordersort']) : []; $query->add_order_by(explode(',', $_CGET['order']), $order_sort); } # Adding our update columns $query->add_update_columns(PostParser::decode()); # Where columns $query->add_where_columns($_CGET); } # Updating our partition $query->set_table($partition_data['table_name'], false, false, $partition_data['database']); $update_query = $query->get_update_query($limit, false, false); mysqli_sub_query($partition_dblink, $update_query); # Getting our updated info $info = mysqli_info_array($partition_dblink); $limit -= (int) $info['Rows matched']; # Tracking our internal changed numbers $content->affected_rows += (int) $info['Changed']; $content->matched_rows += (int) $info['Rows matched']; # We are done updating if ($limit !== false && $limit <= 0) { break; }
# Checking for whitelisting if (NQ_WHITELIST_COLUMNS) { $whitelist = get_whitelist_columns($G_CONTROLLER_DBLINK, $G_APP_DATA['id'], $G_TABLE_DETAILS['id'], $G_TOKEN_PRIVILEGE_DATA['id']); if (NQ_WHITELIST_EXISTENTIAL ? count($whitelist) > 0 : true) { $query->whitelist_columns($whitelist); } } # Blacklisting the locked fields and the partition columns $query->blacklist_columns(explode(',', NQ_LOCKED_FIELDS)); $query->blacklist_columns(explode(',', $partition->data['partition_column'])); } # Adding our update columns $query->add_update_columns($row); # Adding our global session values if (isset($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->global->{$G_TABLE_DETAILS['alias']})) { $query->add_where_columns($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->global->{$G_TABLE_DETAILS['alias']}); } # Adding our specific session values if (isset($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->update->{$G_TABLE_DETAILS['alias']})) { $query->add_where_columns($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->update->{$G_TABLE_DETAILS['alias']}); } # Where columns $query->add_where_columns(['id' => $row->id]); # Updating the partition $query->set_table($partition->data['table_name'], false, false, $partition->database); $update_query = $query->get_update_query(1); mysqli_sub_query($partition->dblink, $update_query); # Updating the response data $info = mysqli_info_array($partition->dblink); $content->affected_rows += (int) $info['Changed']; $content->matched_rows += (int) $info['Rows matched'];
$whitelist = get_whitelist_columns($G_CONTROLLER_DBLINK, $G_APP_DATA['id'], $table_settings['id'], $G_TOKEN_DATA['id']); if (NQ_WHITELIST_EXISTENTIAL ? count($whitelist) > 0 : true) { $query->whitelist_columns($whitelist); } } # Excluding from the table $query->blacklist_columns($G_COLUMNS_EXCLUDED); # Adding our select columns $select_columns = $G_COLUMNS_SELECTED; if ($select_columns != '*' && !in_array($attached['column'], $select_columns)) { $select_columns[] = $attached['column']; $unset_link_id = true; } $query->add_select_columns($select_columns, false, $table_settings['alias'], true); # Where columns $query->add_where_columns([$attached['column'] => '[]' . implode(',', $column_values)], false, $table_settings['alias']); # Order by if ($G_ORDER_BY !== false) { $query->add_order_by($G_ORDER_BY, $G_ORDER_DESC, false, $table_settings['alias']); } } # Getting our results $query->set_table($partition_data['table_name'], false, false, $partition_data['database']); $select_query = $query->get_select_query($G_APP_DATA['db_attach_multi_limit'], false, COLUMNS_SORTED); $select_result = mysqli_multi_result_query($dblink, $select_query); # Saving the indices before processing (optimization) $acol = $attached['column']; $aname = $attached['name']; # Processing our results while ($attached_data = mysqli_fetch_assoc($select_result)) { # Saving the indices and column name
$from_partition_data['dblink'] = mysqli_shared_connect($from_partition_data['host'], $from_partition_data['username'], $from_partition_data['password'], $G_SHARED_DBLINKS); # We need a new query class on first partition if ($from_query == false) { # Creating our new parser $from_query = new MySQLParser($from_partition_data['dblink'], $from_partition_data['table_name'], $from_partition_data['database']); # Checking for whitelisting if (NQ_WHITELIST_COLUMNS) { $whitelist = get_whitelist_columns($G_CONTROLLER_DBLINK, $G_APP_DATA['id'], $G_FROM_TABLE_SETTINGS['id'], $G_TOKEN_PRIVILEGE_DATA['id']); if (NQ_WHITELIST_EXISTENTIAL ? count($whitelist) > 0 : true) { $from_query->whitelist_columns($whitelist); } } # Adding our select columns $from_query->add_select_columns($G_FROM_TABLE_COLUMNS); # Where columns $from_query->add_where_columns($_CGET); # Order by if (isset($_CGET['order'])) { $order_sort = isset($_CGET['ordersort']) ? explode(',', $_CGET['ordersort']) : []; $from_query->add_order_by(explode(',', $_CGET['order']), $order_sort); } # Group by if (isset($_CGET['group'])) { $from_query->add_group_by(explode(',', $_CGET['group'])); } # Where columns $from_query->add_where_columns($_CGET); # Overwriting with our global session where values if (isset($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->global->{$G_FROM_TABLE_SETTINGS['alias']})) { $from_query->add_where_columns($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->global->{$G_FROM_TABLE_SETTINGS['alias']}); }
$partitions_affected = new stdClass(); while ($partition_data = mysqli_fetch_assoc($partition_results)) { # Connecting to our dblinks $partition_dblink = mysqli_shared_connect($partition_data['host'], $partition_data['username'], $partition_data['password'], $G_SHARED_DBLINKS); $partitions_affected->{$partition_data['id']} = (object) ['data' => $partition_data, 'dblink' => $partition_dblink, 'database' => $partition_data['database'], 'deleted_rows' => 0]; # First partition, new query object if ($query === false) { # Creating our new parser $query = new MySQLParser($partition_dblink, $partition_data['table_name'], $partition_data['database']); # Order by if (isset($_JPOST->order)) { $order_sort = isset($_JPOST->order_sort) ? explode(',', $_JPOST->order_sort) : []; $query->add_order_by(explode(',', $_JPOST->order), $order_sort); } # Where columns $query->add_where_columns($_JPOST); } # Deleting from the partition $query->set_table($partition_data['table_name'], false, false, $partition_data['database']); $delete_query = $query->get_delete_query($limit, false); mysqli_sub_query($partition_dblink, $delete_query); # Getting our deleted info $affected = mysqli_affected_rows($partition_dblink); $limit -= (int) $affected; # Tracking our internal changed numbers $content->affected_rows += $affected; $deleted_count += $affected; $partitions_affected->{$partition_data['id']}->deleted_rows += $affected; # We are done updating if ($limit !== false && $limit <= 0) { break;