/**
  * run select query by generated text query
  *
  * @param $query_text
  */
 public function run_select($query_text)
 {
     //$times = (int) \testing_config::$select ['times'];
     $times = $_GET['times'];
     $db = \hlkiller_core::db();
     $start_time = microtime(2);
     for ($i = 0; $i < $times; $i++) {
         try {
             $result = $db->query($query_text);
             if ($db->errno) {
                 throw new \Exceptions\MySQLQuery('Mysqli died. ' . $db->errno . ' : ' . $db->error);
             }
             $result_array = array();
             while ($tmp_array = $result->fetch_assoc()) {
                 $result_array[] = $tmp_array;
             }
         } catch (\Exceptions\MySQLQuery $e) {
             die($e->getMessage());
         }
     }
     $end_time = microtime(2);
     echo $end_time - $start_time, '<br>';
     \annex::showArray($result_array);
 }
 /**
  * generate random data for base
  */
 public function generate_fish()
 {
     $config = \testing_config::$gen_fish;
     $start = microtime(TRUE);
     $tables = \config::getModel();
     $startPostsEach = $config['startPostsEach'];
     $endPostsEach = $config['endPostsEach'];
     $startCategoriesEach = $config['startCategoriesEach'];
     $endCategoriesEach = $config['endCategoriesEach'];
     $startCommentsEach = $config['startCommentsEach'];
     $endCommentsEach = $config['endCommentsEach'];
     $startLikesEach = $config['startLikesEach'];
     $endLikesEach = $config['endLikesEach'];
     $startFriendsEach = $config['startFriendsEach'];
     $endFriendsEach = $config['endFriendsEach'];
     $partCount = $config['partCount'];
     $categoriesCount = $config['categoriesCount'];
     $user_insert_values_arr = array();
     $following_insert_values_arr = array();
     $posts_insert_values_arr = array();
     $rel_categories_posts_insert_arr = array();
     $add_comments_rel_count = array();
     $rel_comments_posts_insert_arr = array();
     $rel_like_posts_insert_arr = array();
     $categories_insert_arr = array();
     $startUsers = 1;
     if (isset($_SESSION['exist']) && $_SESSION['exist'] == '1') {
         $post_id = $_SESSION['post_id'];
         $startUsers = $_SESSION['user_start'];
         $categories_insert_arr = json_decode($_SESSION['categories_arr'], true);
         //var_dump($categories_insert_arr);
         //return ;
     } else {
         $post_id = 1;
         for ($i = 1; $i <= $categoriesCount; $i++) {
             $categories_insert_arr[] = \annex::set_fields($tables['categories'], $i);
         }
         $_SESSION['categories_arr'] = json_encode($categories_insert_arr);
         \hlkiller_core::sql_gen('insert', array('table' => 'categories', 'values' => $categories_insert_arr));
     }
     $finalUsersCount = $startUsers + $partCount * $config['finalUsersCount'] - 1;
     for ($user_part_first_id = $startUsers; $user_part_first_id <= $finalUsersCount; $user_part_first_id += $partCount) {
         $user_insert_values_arr = array();
         $users_temp_ids = array();
         $following_insert_values_arr = array();
         $user_part_last = $user_part_first_id + $partCount;
         // Add Users
         for ($user_id = $user_part_first_id; $user_id < $user_part_last; $user_id++) {
             $user_insert_values_arr[] = \annex::set_fields($tables['users'], $user_id);
             $users_temp_ids[] = $user_id;
         }
         \hlkiller_core::sql_gen('insert', array('table' => 'users', 'values' => $user_insert_values_arr));
         $new_tenp_ids = $users_temp_ids;
         for ($user_id = $user_part_first_id; $user_id < $user_part_last; $user_id++) {
             $add_friend_count = rand($startFriendsEach, $endFriendsEach);
             for ($friendsEach = $startFriendsEach; $friendsEach <= $add_friend_count; $friendsEach++) {
                 $friedSupplier = get_primary_value('users_id', $user_insert_values_arr);
                 if (in_array($friedSupplier, $new_tenp_ids)) {
                     $following_insert_values_arr[] = \annex::set_fields($tables['rel_users_following'], $user_id, $friedSupplier);
                     if (($key = array_search($friedSupplier, $new_tenp_ids)) !== false) {
                         unset($new_tenp_ids[$key]);
                     }
                 }
             }
             $new_tenp_ids = $users_temp_ids;
         }
         \hlkiller_core::sql_gen('insert', array('table' => 'rel_users_following', 'values' => $following_insert_values_arr));
         $counter = 1;
         $posts_insert_values_arr = array();
         $rel_categories_posts_insert_arr = array();
         $add_comments_rel_count = array();
         $rel_comments_posts_insert_arr = array();
         $rel_like_posts_insert_arr = array();
         // Add user posts
         for ($user_id = $user_part_first_id; $user_id < $user_part_last; $user_id++) {
             $add_post_count = rand($startPostsEach, $endPostsEach);
             for ($i = $startPostsEach; $i <= $add_post_count; $i++) {
                 // Add Post
                 $posts_insert_values_arr[] = \annex::set_fields($tables['posts'], $post_id, get_primary_value('users_id', $user_insert_values_arr));
                 // Add Categories Relations
                 $add_categories_rel_count = rand($startCategoriesEach, $endCategoriesEach);
                 for ($rel_count = $startCategoriesEach; $rel_count <= $endCategoriesEach; $rel_count++) {
                     $rel_categories_posts_insert_arr[] = \annex::set_fields($tables['rel_posts_categories'], $post_id, get_primary_value('categories_id', $categories_insert_arr));
                     //Array(post_id, rand_from_array(category_id))
                 }
                 // Add Post Comments
                 $add_comments_rel_count = rand($startCommentsEach, $endCommentsEach);
                 for ($rel_count = $startCategoriesEach; $rel_count <= $endCategoriesEach; $rel_count++) {
                     $rel_comments_posts_insert_arr[] = \annex::set_fields($tables['rel_users_posts_comments'], get_primary_value('users_id', $user_insert_values_arr), $post_id);
                     //Array(post_id, user_insert_values_arr[rand_this()], comment_text)
                 }
                 // Add Post Likes
                 $add_like_rel_count = rand($startLikesEach, $endLikesEach);
                 for ($rel_count = $startCategoriesEach; $rel_count <= $endCategoriesEach; $rel_count++) {
                     $rel_like_posts_insert_arr[] = \annex::set_fields($tables['users_posts_like'], get_primary_value('users_id', $user_insert_values_arr), $post_id);
                     //Array(post_id, user_insert_values_arr[rand_this()], like_time)
                 }
                 $post_id++;
             }
             if ($counter % 25 == 0) {
                 //var_dump(count($posts_insert_values_arr));
                 //var_dump(count($rel_categories_posts_insert_arr));
                 //var_dump(count($rel_comments_posts_insert_arr));
                 //var_dump(count($rel_like_posts_insert_arr));
                 //echo '<br><br>';
                 \hlkiller_core::sql_gen('insert', array('table' => 'posts', 'delayed' => TRUE, 'values' => $posts_insert_values_arr), true);
                 \hlkiller_core::sql_gen('insert', array('table' => 'rel_posts_categories', 'values' => $rel_categories_posts_insert_arr), true);
                 \hlkiller_core::sql_gen('insert', array('table' => 'rel_users_posts_comments', 'values' => $rel_comments_posts_insert_arr), true);
                 \hlkiller_core::sql_gen('insert', array('table' => 'users_posts_like', 'values' => $rel_like_posts_insert_arr), true);
                 $posts_insert_values_arr = array();
                 $rel_categories_posts_insert_arr = array();
                 $add_comments_rel_count = array();
                 $rel_comments_posts_insert_arr = array();
                 $rel_like_posts_insert_arr = array();
                 $counter = 0;
             }
             $counter++;
         }
         if (!empty($posts_insert_values_arr)) {
             \hlkiller_core::sql_gen('insert', array('table' => 'posts', 'delayed' => TRUE, 'values' => $posts_insert_values_arr), true);
         }
         if (!empty($rel_categories_posts_insert_arr)) {
             \hlkiller_core::sql_gen('insert', array('table' => 'rel_posts_categories', 'values' => $rel_categories_posts_insert_arr), true);
         }
         if (!empty($rel_comments_posts_insert_arr)) {
             \hlkiller_core::sql_gen('insert', array('table' => 'rel_users_posts_comments', 'values' => $rel_comments_posts_insert_arr), true);
         }
         if (!empty($rel_like_posts_insert_arr)) {
             \hlkiller_core::sql_gen('insert', array('table' => 'users_posts_like', 'values' => $rel_like_posts_insert_arr), true);
         }
         $posts_insert_values_arr = array();
         $rel_categories_posts_insert_arr = array();
         $add_comments_rel_count = array();
         $rel_comments_posts_insert_arr = array();
         $rel_like_posts_insert_arr = array();
         $counter = 0;
     }
     $_SESSION['post_id'] = $post_id;
     $_SESSION['user_start'] = $finalUsersCount + 1;
     $_SESSION['exist'] = '1';
     $finish = microtime(TRUE);
     $totaltime = $finish - $start;
     echo json_encode(array('script' => $totaltime, 'userID' => $finalUsersCount + 1, 'post_id' => $post_id));
 }
 public static function queries_array($index = null)
 {
     $arr = array(function () {
         $users_q = \hlkiller_core::db()->query("SELECT `users_id` FROM `users` ORDER BY RAND() LIMIT 1");
         $users = $users_q->fetch_array(MYSQLI_ASSOC);
         $posts_q = \hlkiller_core::db()->query("SELECT `posts_id` FROM `posts` ORDER BY RAND() LIMIT 1");
         $posts = $posts_q->fetch_array(MYSQLI_ASSOC);
         $likes_q = \hlkiller_core::db()->query("SELECT COUNT(*) FROM `users_posts_like` WHERE `users_id`='{$users['users_id']}' AND `posts_id`='{$posts['posts_id']}'");
         $likes = $likes_q->fetch_array(MYSQLI_NUM);
         if ($likes[0]) {
             $result = \hlkiller_core::db()->query("DELETE FROM `users_posts_like` WHERE `users_id`='{$users['users_id']}' AND `posts_id`='{$posts['posts_id']}'");
         } else {
             $result = \hlkiller_core::db()->query("INSERT INTO `users_posts_like` (`users_id`,`posts_id`,`rel_users_posts_like_time`) VALUES ('{$users['users_id']}','{$posts['posts_id']}',UNIX_TIMESTAMP())");
         }
         return $result;
     }, function () {
         $users_q = \hlkiller_core::db()->query("SELECT `users_id` FROM `users` ORDER BY RAND() LIMIT 1");
         $users = $users_q->fetch_array(MYSQLI_ASSOC);
         $users2_q = \hlkiller_core::db()->query("SELECT `users_id` FROM `users` ORDER BY RAND() LIMIT 1");
         $users2 = $users2_q->fetch_array(MYSQLI_ASSOC);
         $likes_q = \hlkiller_core::db()->query("SELECT `following_id` FROM `rel_users_following` WHERE `users_follower_id`='{$users['users_id']}' AND `users_supplier_id`='{$users2['users_id']}'");
         $likes = $likes_q->fetch_array(MYSQLI_NUM);
         if ($likes[0]) {
             $result = \hlkiller_core::db()->query("DELETE FROM `rel_users_following` WHERE `following_id`='{$likes['0']}'");
         } else {
             $result = \hlkiller_core::db()->query("INSERT INTO `rel_users_following` (`users_follower_id`,`users_supplier_id`,`following_time`) VALUES ('{$users['users_id']}','{$users2['users_id']}',UNIX_TIMESTAMP())");
         }
         return $result;
     }, function () {
         $users_q = \hlkiller_core::db()->query("SELECT `users_id` FROM `users` ORDER BY RAND() LIMIT 1");
         $users = $users_q->fetch_array(MYSQLI_ASSOC);
         $posts_q = \hlkiller_core::db()->query("SELECT `posts_id` FROM `posts` ORDER BY RAND() LIMIT 1");
         $posts = $posts_q->fetch_array(MYSQLI_ASSOC);
         $text = \annex::gen_rnd_text();
         $result = \hlkiller_core::db()->query("INSERT INTO `rel_users_posts_comments` (`users_id`,`posts_id`,`rel_users_posts_comments_time`,`comments_text`) VALUES ('{$users['users_id']}','{$posts['posts_id']}',UNIX_TIMESTAMP(),'{$text}')");
         return $result;
     }, function () {
         $posts_q = \hlkiller_core::db()->query("SELECT `posts_id` FROM `posts` ORDER BY RAND() LIMIT 1");
         $posts = $posts_q->fetch_array(MYSQLI_ASSOC);
         $categories_q = \hlkiller_core::db()->query("SELECT `categories_id` FROM `categories` ORDER BY RAND() LIMIT 1");
         $categories = $categories_q->fetch_array(MYSQLI_ASSOC);
         $pc_q = \hlkiller_core::db()->query("SELECT `posts_categories_id` FROM `rel_posts_categories` WHERE `posts_id`='{$posts['posts_id']}' AND `categories_id`='{$categories['categories_id']}'");
         if ($pc_q->num_rows) {
             $result = \hlkiller_core::db()->query("DELETE FROM `rel_posts_categories` WHERE `posts_id`='{$posts['posts_id']}' AND `categories_id`='{$categories['categories_id']}'");
         } else {
             $result = \hlkiller_core::db()->query("INSERT INTO `rel_posts_categories` (`posts_id`,`categories_id`) VALUES ('{$posts['posts_id']}','{$categories['categories_id']}')");
         }
         return $result;
     }, function () {
         $name = \annex::gen_rnd_str(20);
         $pass = \annex::gen_rnd_str(25);
         $time = time();
         $result = \hlkiller_core::db()->query("INSERT INTO `users` (`users_username`,`users_password`,`users_created_on`) VALUES ('{$name}','{$pass}','{$time}')");
         return $result;
     });
     if (!is_null($index)) {
         return $arr[$index]();
     } else {
         return count($arr);
     }
 }