コード例 #1
0
$partitions = [];
$partitions_affected = new stdClass();
$query = false;
foreach ($_JPOST as $row) {
    # Making sure the primary key is set for the row
    if (isset($row->id)) {
        # Getting our partition
        $partition = get_partition_by_id($G_CONTROLLER_DBLINK, $G_TABLE_DETAILS, $row->id, $bitmask, $partitions, $G_SHARED_DBLINKS);
        # If the parition is valid
        if ($partition !== false) {
            # Saving our affected partitions
            $partitions_affected->{$partition->data['id']} = $partition;
            # First run, need new query object
            if ($query === false) {
                # New query parser
                $query = new MySQLParser($partition->dblink, $partition->data['table_name'], $partition->database);
                # 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']})) {
コード例 #2
0
ファイル: update.php プロジェクト: nuQuery/v1m0-api-all
    $evaluation_query = $partition_evaluation !== false ? " AND `evaluation` ='" . mysqli_escape_string($G_CONTROLLER_DBLINK, $partition_evaluation) . "'" : "";
}
# Which partitions are we going to be working with
$partition_query = "\t\tSELECT\n\t\t\t\t\t\t`p`.*,\n\t\t\t\t\t\t`d`.`host`,\n\t\t\t\t\t\t`d`.`username`,\n\t\t\t\t\t\t`d`.`password`,\n\t\t\t\t\t\t`d`.`database`\n\t\t\t\t\tFROM\n\t\t\t\t\t\t" . NQ_TABLE_PARTITIONS_TABLE . " `p`\n\t\t\t\t\tLEFT JOIN\n\t\t\t\t\t\t" . NQ_SERVERS_TABLE . " `d`\n\t\t\t\t\t\tON\n\t\t\t\t\t\t\t`d`.`id`=`p`.`host_id`\n\t\t\t\t\tWHERE\n\t\t\t\t\t\t`table_id`=" . (int) $G_TABLE_DETAILS['id'] . "\n\t\t\t\t\t\t" . $evaluation_query . "\n\t\t\t\t\tORDER BY\n\t\t\t\t\t\t" . (isset($_CGET['partitionorder']) && $_CGET['partitionorder'] == 'value' ? "`evaluation`" : "`number`") . "\n\t\t\t\t\t\t" . (isset($_CGET['partitionordersort']) && $_CGET['partitionordersort'] == 'DESC' ? "DESC" : "ASC") . "";
$partition_results = mysqli_multi_result_query($G_CONTROLLER_DBLINK, $partition_query);
# Processing each partition
$query = false;
$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']];
    # First partition, new query object
    if ($query === false) {
        # Creating our new parser
        $query = new MySQLParser($partition_dblink, $partition_data['table_name'], $partition_data['database']);
        # 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 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);
        }
コード例 #3
0
ファイル: replicate.php プロジェクト: nuQuery/v1m0-api-all
 } else {
     for ($i = 0; $i < $G_FROM_TABLE_COLUMNS_COUNT; $i++) {
         if (isset($from_data[$G_FROM_TABLE_COLUMNS[$i]])) {
             $entry->{$G_TO_TABLE_COLUMNS[$i]} = $from_data[$G_FROM_TABLE_COLUMNS[$i]];
         }
     }
 }
 # Getting the appropriate to partition
 $to_partition = get_table_partition($G_CONTROLLER_DBLINK, $G_STORAGE_CONTROLLER_DBLINK, $G_APP_DATA, $G_TO_TABLE_DETAILS, $entry, $to_bitmask, $partitions, $G_SHARED_DBLINKS);
 if (!isset($partitions_affected->{$to_partition->data['id']})) {
     $partitions_affected->{$to_partition->data['id']} = (object) ['data' => $to_partition->data, 'database' => $to_partition->database, 'dblink' => $to_partition->dblink, 'table_id' => $G_TO_TABLE_SETTINGS['id'], 'inserted_rows' => 0, 'deleted_rows' => 0];
 }
 # We need to create the to query
 if ($to_query === false) {
     # Creating our new parser
     $to_query = new MySQLParser($to_partition->dblink, $to_partition->data['table_name'], $to_partition->database);
     # Checking for whitelisting
     if (NQ_WHITELIST_COLUMNS) {
         $whitelist = get_whitelist_columns($G_CONTROLLER_DBLINK, $G_APP_DATA['id'], $G_TO_TABLE_SETTINGS['id'], $G_TOKEN_PRIVILEGE_DATA['id']);
         if (NQ_WHITELIST_EXISTENTIAL ? count($whitelist) > 0 : true) {
             $to_query->whitelist_columns($whitelist);
         }
     }
     # Blacklisting the timestamp
     $to_query->blacklist_columns(['timestamp']);
     # Adding our duplicate columns
     if (isset($_CGET['duplicate'])) {
         $to_query->add_insert_duplicate_columns(explode(',', $_CGET['duplicate']));
     }
     # Adding our duplicate ignore columns
     if (isset($_CGET['duplicate_ignore'])) {
コード例 #4
0
ファイル: insert.php プロジェクト: nuQuery/v1m0-api-all
     $partition_queries->{$partition->data['id']}->add_insert_columns($entry);
     # Adding our global session values
     if ($session_global_variables) {
         $partition_queries->{$partition->data['id']}->add_insert_columns($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->global->{$G_TABLE_DETAILS['alias']});
     }
     # Adding our specific session values
     if ($session_insert_variables) {
         $partition_queries->{$partition->data['id']}->add_insert_columns($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->insert->{$G_TABLE_DETAILS['alias']});
     }
     # Pushing columns into stack
     $partition_queries->{$partition->data['id']}->push_insert_columns();
 } else {
     # New query class
     if ($query === false) {
         # Creating our new parser
         $query = new MySQLParser($partition->dblink, $partition->data['table_name'], $partition->database);
         # Checking for whitelisting
         if (NQ_WHITELIST_COLUMNS && (NQ_WHITELIST_EXISTENTIAL ? count($whitelist) > 0 : true)) {
             $query->whitelist_columns($whitelist);
         }
         # Blacklisting the timestamp
         $query->blacklist_columns(['timestamp']);
     }
     # Adding our insert columns
     $query->add_insert_columns($entry);
     # Adding our global session values
     if ($session_global_variables) {
         $query->add_insert_columns($G_TOKEN_SESSION_DATA->{NQ_SESSION_GROUP}->global->{$G_TABLE_DETAILS['alias']});
     }
     # Adding our specific session values
     if ($session_insert_variables) {
コード例 #5
0
ファイル: MainController.php プロジェクト: barricade86/raui
 public function actionGetSlice($num)
 {
     $parser = new MySQLParser();
     $parser->fileName = $this->getFilePath();
     $sql = $parser->getSlice($num);
     if ($sql) {
         $arrReplace = array('{adminName}', '{adminPass}', '{adminSalt}', '{adminEmail}', '{dbPrefix}', '{siteName}', '{siteKeywords}', '{siteDescription}');
         $arrReplaceVal = array(Yii::app()->user->getState('adminName'), Yii::app()->user->getState('adminPass'), Yii::app()->user->getState('adminSalt'), Yii::app()->user->getState('adminEmail'), Yii::app()->user->getState('dbPrefix'), Yii::app()->user->getState('siteName'), Yii::app()->user->getState('siteKeywords'), Yii::app()->user->getState('siteDescription'));
         $sql = str_replace($arrReplace, $arrReplaceVal, $sql);
         $matched = preg_match("/CREATE TABLE IF NOT EXISTS `([^`]+)`/", $sql, $matches);
         if (!$matched) {
             $matched = preg_match("/CREATE TABLE `([^`]+)`/", $sql, $matches);
         }
         if ($matched) {
             echo 'Creating table `' . $matches[1] . '` ... ';
         }
         $command = Yii::app()->db->createCommand($sql);
         $command->execute();
         $command->reset();
         if ($matched) {
             echo 'OK<br/>';
         }
     }
 }
コード例 #6
0
ファイル: fetch.php プロジェクト: nuQuery/v1m0-api-database
 }
 # Which partitions are we going to be working with
 $query = false;
 $unset_link_id = false;
 $evaluation_query = count($partition_evaluations) != 0 ? " AND `evaluation` IN ('" . implode("','", $partition_evaluations) . "')" : "";
 $partition_query = "\tSELECT\n\t\t\t\t\t\t\t\t`p`.*,\n\t\t\t\t\t\t\t\t`d`.`host`,\n\t\t\t\t\t\t\t\t`d`.`username`,\n\t\t\t\t\t\t\t\t`d`.`password`,\n\t\t\t\t\t\t\t\t`d`.`database`\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t" . NQ_TABLE_PARTITIONS_TABLE . " `p`\n\t\t\t\t\t\t\tLEFT JOIN\n\t\t\t\t\t\t\t\t" . NQ_SERVERS_TABLE . " `d`\n\t\t\t\t\t\t\t\tON\n\t\t\t\t\t\t\t\t\t`d`.`id`=`p`.`host_id`\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t`table_id`=" . (int) $table_settings['id'] . "\n\t\t\t\t\t\t\t\t" . $evaluation_query . "\n\t\t\t\t\t\t\tORDER BY\n\t\t\t\t\t\t\t\t`evaluation` ASC";
 $partition_results = mysqli_multi_result_query($G_CONTROLLER_DBLINK, $partition_query);
 while ($partition_data = mysqli_fetch_assoc($partition_results)) {
     # Connecting to the correct database
     $dblink = mysqli_shared_connect($partition_data['host'], $partition_data['username'], $partition_data['password'], $G_SHARED_DBLINKS);
     # Adding our tracking
     $G_READ_PARTITION_IDS[] = $partition_data['id'];
     # We need to create a new query
     if ($query == false) {
         # Creating our new parser
         $query = new MySQLParser($dblink, $partition_data['table_name'], $partition_data['database']);
         # Checking for whitelisting
         if (NQ_WHITELIST_COLUMNS) {
             $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;
         }
コード例 #7
0
ファイル: delete.php プロジェクト: nuQuery/v1m0-api-all
}
# Which partitions are we going to be working with
$partition_query = "\tSELECT\n\t\t\t\t\t`p`.*,\n\t\t\t\t\t`d`.`host`,\n\t\t\t\t\t`d`.`username`,\n\t\t\t\t\t`d`.`password`,\n\t\t\t\t\t`d`.`database`\n\t\t\t\tFROM\n\t\t\t\t\t" . NQ_TABLE_PARTITIONS_TABLE . " `p`\n\t\t\t\tLEFT JOIN\n\t\t\t\t\t" . NQ_SERVERS_TABLE . " `d`\n\t\t\t\t\tON\n\t\t\t\t\t\t`d`.`id`=`p`.`host_id`\n\t\t\t\tWHERE\n\t\t\t\t\t`table_id`=" . (int) $G_TABLE_DETAILS['id'] . "\n\t\t\t\t\t" . $evaluation_query . "\n\t\t\t\tORDER BY\n\t\t\t\t\t" . (isset($_CGET['partitionorder']) && $_CGET['partitionorder'] == 'value' ? "`evaluation`" : "`number`") . "\n\t\t\t\t\t" . (isset($_CGET['partitionordersort']) && $_CGET['partitionordersort'] == 'DESC' ? "DESC" : "ASC") . "";
$partition_results = mysqli_multi_result_query($G_CONTROLLER_DBLINK, $partition_query);
# Processing each partition
$query = false;
$deleted_count = 0;
$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;