]> 91.132.146.200 Git - dolphin.git/commitdiff
a small cleanup
authorBanana <mail@bananas-playground.net>
Sun, 19 Oct 2025 15:40:24 +0000 (17:40 +0200)
committerBanana <mail@bananas-playground.net>
Sun, 19 Oct 2025 15:40:24 +0000 (17:40 +0200)
Signed-off-by: Banana <mail@bananas-playground.net>
13 files changed:
imdb-dataset-to-mysql/README [deleted file]
imdb-dataset-to-mysql/READMEmd [new file with mode: 0644]
imdb-dataset-to-mysql/api.php
imdb-dataset-to-mysql/import.php
imdb-dataset-to-mysql/lib/NameBasics.class.php
imdb-dataset-to-mysql/lib/TitleAkas.class.php
imdb-dataset-to-mysql/lib/TitleBasics.class.php
imdb-dataset-to-mysql/lib/TitleCrew.class.php
imdb-dataset-to-mysql/lib/TitleEpisode.class.php
imdb-dataset-to-mysql/lib/TitlePrincipals.class.php
imdb-dataset-to-mysql/lib/TitleRatings.class.php
imdb-dataset-to-mysql/lib/helper.class.php
imdb-dataset-to-mysql/lib/import.abstract.class.php

diff --git a/imdb-dataset-to-mysql/README b/imdb-dataset-to-mysql/README
deleted file mode 100644 (file)
index a7d40da..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-https://www.imdb.com/interfaces/
-
-Subsets of IMDb data are available for access to customers for personal and non-commercial use.
-You can hold local copies of this data, and it is subject to our terms and conditions.
-Please refer to the Non-Commercial Licensing
-https://help.imdb.com/article/imdb/general-information/can-i-use-imdb-data-in-my-software/G5JTRESSHJBBHTGX
-and copyright/license and verify compliance.
-https://www.imdb.com/conditions
-
-This will import the imdb dataset tsv into your mysql database for further user.
-Code based on the dataset at feb. 2020
-There will be no relations or whatsoever. Just plain data into tables.
-It also does not create any relation tables yet. Some tables have columns which have
-strings separated by comma in them.
-
-As of march 2020
-Title crew looks strange. The longest line is 16313 (wc -L title.crews.tsv)
-therefore the column directors and writers are defined as text and not
-varchar. Do not know if this is an error or correct...
-
-
-This is not a good example to be written in PHP. But you can use it.
-Don't execute it through a webserver. It is a CLI script
-
-# Usage
-Download and place the tsv files from https://www.imdb.com/interfaces/ into the datasets folder.
-Decide which one do you need. Alter $filesToImport in import.php to match the files.
-Decide if you need a full text search index. Needed if you want to use the api.php.
-Adding the index after the initial import is not a good idea. It takes ages!!
-Using the index will slow down the import. To use change BUILD_INDEX to true in import.php file
diff --git a/imdb-dataset-to-mysql/READMEmd b/imdb-dataset-to-mysql/READMEmd
new file mode 100644 (file)
index 0000000..d1e81dd
--- /dev/null
@@ -0,0 +1,23 @@
+# Source
+
+https://www.imdb.com/interfaces/
+
+# Description
+
+This will import the imdb dataset tsv into your mysql database for further use.
+There will be no relations or whatsoever. Just plain data into tables.
+It also does not create any relation tables yet. Some tables have columns which have strings separated by comma in them.
+
+# As of march 2020
+
+Title crew looks strange. The longest line is 16313 (wc -L title.crews.tsv)
+therefore the column directors and writers are defined as text and not
+varchar. Do not know if this is an error or correct...
+
+This is not a good example to be written in PHP. But you can use it.
+Don't execute it through a webserver. It is a CLI script
+
+# Usage
+
+Download and place the tsv files from https://www.imdb.com/interfaces/ into the datasets folder.
+Decide which one do you need. Alter `$filesToImport` in `import.php` to match the files.
index 3b500d7a67737c241b8792f9ca232d02a09c65f7..f1673aef1dc4b634abc3c6dfb1044c525d3b16c0 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
@@ -40,18 +40,18 @@ ini_set('error_log','./error.log');
 require 'lib/helper.class.php';
 
 ## database settings
-define('DB_HOST','localhost');
-define('DB_USER','user');
-define('DB_PASSWORD','test');
-define('DB_NAME','imdb');
+const DB_HOST = 'localhost';
+const DB_USERNAME = 'user';
+const DB_PASSWORD = 'test';
+const DB_NAME = 'imdbdatasets';
 
 ## DB connection
-$DB = new mysqli(DB_HOST, DB_USER,DB_PASSWORD, DB_NAME);
-if ($DB->connect_errno) exit("Can not connect to MySQL Server\n");
-$DB->set_charset("utf8mb4");
-$DB->query("SET collation_connection = 'utf8mb4_bin'");
+$DB = new mysqli(DB_HOST, DB_USERNAME,DB_PASSWORD, DB_NAME);
 $driver = new mysqli_driver();
 $driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
+if ($DB->connect_errno) exit('Can not connect to MySQL Server');
+$DB->set_charset("utf8mb4");
+$DB->query("SET collation_connection = 'utf8mb4_0900_ai_ci'");
 
 ## defaults
 $returnData = array();
index 8dc74de2a8f7816247ed5c64be278d793600d8c6..f83a90205b5175205e8f19188447fa8ce37c5c89 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-2020  Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025  Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
@@ -15,8 +15,6 @@
 
 /**
  * read and create mysql tables based on the tsv data from imdb
- * dataset format based of feb. 2020
- * See README for more details
  */
 
 mb_http_output('UTF-8');
@@ -24,34 +22,30 @@ mb_internal_encoding('UTF-8');
 ini_set('error_reporting',-1); // E_ALL & E_STRICT
 date_default_timezone_set('Europe/Berlin');
 
-## files located in dataset/ directory
+## files located in datasets/ directory
 $filesToImport = array(
-    'TitleAkas' => 'title.akas.tsv',
-    'TitleBasics' => 'title.basics.tsv',
+    #'TitleAkas' => 'title.akas.tsv',
+    #'TitleBasics' => 'title.basics.tsv',
     'TitleCrew' => 'title.crew.tsv',
-    'TitleEpisode' => 'title.episode.tsv',
-    'TitlePrincipals' => 'title.principals.tsv',
-    'TitleRatings' => 'title.ratings.tsv',
-    'NameBasics' => 'name.basics.tsv'
+    #'TitleEpisode' => 'title.episode.tsv',
+    #'TitlePrincipals' => 'title.principals.tsv',
+    #'TitleRatings' => 'title.ratings.tsv',
+    #'NameBasics' => 'name.basics.tsv'
 );
 
-## create mysql fulltext index or not.
-## Warning. It takes a very long time!
-define('BUILD_INDEX',false);
-
 ## database settings
-define('DB_HOST','localhost');
-define('DB_USER','user');
-define('DB_PASSWORD','test');
-define('DB_NAME','imdb');
+const DB_HOST = 'localhost';
+const DB_USERNAME = 'user';
+const DB_PASSWORD = 'test';
+const DB_NAME = 'imdbdatasets';
 
 ## DB connection
-$DB = new mysqli(DB_HOST, DB_USER,DB_PASSWORD, DB_NAME);
-if ($DB->connect_errno) exit("Can not connect to MySQL Server\n");
-$DB->set_charset("utf8mb4");
-$DB->query("SET collation_connection = 'utf8mb4_bin'");
+$DB = new mysqli(DB_HOST, DB_USERNAME,DB_PASSWORD, DB_NAME);
 $driver = new mysqli_driver();
 $driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
+if ($DB->connect_errno) exit('Can not connect to MySQL Server');
+$DB->set_charset("utf8mb4");
+$DB->query("SET collation_connection = 'utf8mb4_0900_ai_ci'");
 
 require_once 'lib/import.abstract.class.php';
 
index 0834c1b3e6e8cf8f6e692a7631087563522ca77b..58b7535047aa126f8506575cb203108aa61dec60 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
  * Import the data from imdb dataset name.basics.tsv
  */
 class NameBasics extends TSVImport {
+
     /**
      * @inheritDoc
      */
-    public function setup() {
+    public function setup(): void {
         $this->_db_table_name = 'name_basics';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`nconst` varchar(16) COLLATE utf8mb4_bin NOT NULL,
-`primaryName` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`nconst` char(10) COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`primaryName` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `birthYear` year NOT NULL,
 `deathYear` year NOT NULL,
-`primaryProfession` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`knownForTitles` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`primaryProfession` varchar(254) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`knownForTitles` varchar(254) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 UNIQUE KEY `nconst` (`nconst`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
-
-        if($this->_createFulltext) {
-            $this->_db_table_after_import_query[] = "ALTER TABLE `" . $this->_db_table_name . "` ADD FULLTEXT (`primaryName`)";
-            $this->_db_table_after_import_query[] = "OPTIMIZE TABLE `" . $this->_db_table_name . "`";
-        }
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
     /**
      * @inheritDoc
      */
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data): string {
         $ret = '';
 
         if(!empty($data)) {
index 575b9ff712ea5bd286c0d11994b1b04199785165..fa813f4b923c801b3de13c61defa2f53cfac45af 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
  */
 class TitleAkas extends TSVImport {
 
-    public function setup() {
+    public function setup(): void {
         $this->_db_table_name = 'title_akas';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`titleId` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`titleId` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `ordering` int NOT NULL,
-`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`region` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`language` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`types` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`attributes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`region` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`language` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`types` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`attributes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `isOriginalTitle` tinyint(1) NOT NULL,
 UNIQUE KEY `titleId` (`titleId`,`ordering`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
-
-        if($this->_createFulltext) {
-            $this->_db_table_after_import_query[] = "ALTER TABLE `" . $this->_db_table_name . "` ADD FULLTEXT (`title`)";
-            $this->_db_table_after_import_query[] = "OPTIMIZE TABLE `" . $this->_db_table_name . "`";
-        }
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data): string {
         $ret = '';
 
         if(!empty($data)) {
index 3af631c94bae421c29fc7350f46337b19599e931..9f0c8e77c978f8bec36a4413b1099af98ed848db 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
@@ -22,32 +22,26 @@ class TitleBasics extends TSVImport {
     /**
      * @inheritDoc
      */
-    public function setup() {
+    public function setup(): void {
         $this->_db_table_name = 'title_basics';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`tconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`titleType` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`primaryTitle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`originalTitle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`tconst` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`titleType` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`primaryTitle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`originalTitle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `isAdult` tinyint(1) NOT NULL,
-`startYear` char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`endYear` char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`startYear` year NOT NULL,
+`endYear` year NOT NULL,
 `runtimeMinutes` int NOT NULL,
-`genres` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`genres` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 UNIQUE KEY `tconst` (`tconst`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
-
-        if($this->_createFulltext) {
-            $this->_db_table_after_import_query[] = "ALTER TABLE `" . $this->_db_table_name . "` ADD FULLTEXT (`primaryTitle`)";
-            $this->_db_table_after_import_query[] = "ALTER TABLE `" . $this->_db_table_name . "` ADD FULLTEXT (`originalTitle`)";
-            $this->_db_table_after_import_query[] = "OPTIMIZE TABLE `" . $this->_db_table_name . "`";
-        }
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
     /**
      * @inheritDoc
      */
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data): string {
         $ret = '';
 
         if(!empty($data)) {
index 58e8571a7d20f6d5e74a80fc808f2193ed047b42..aa22b731e0a6dd6f9f8f7fc43fd8e2dfc38852f2 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
@@ -21,20 +21,20 @@ class TitleCrew extends TSVImport {
     /**
      * @inheritDoc
      */
-    public function setup() {
+    public function setup(): void {
         $this->_db_table_name = 'title_crew';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`tconst` varchar(16) COLLATE utf8mb4_bin NOT NULL,
-`directors` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`writers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`tconst` char(10) COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`directors` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`writers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 UNIQUE KEY `tconst` (`tconst`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
     /**
      * @inheritDoc
      */
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data): string {
         $ret = '';
 
         if(!empty($data)) {
@@ -51,4 +51,4 @@ UNIQUE KEY `tconst` (`tconst`)
 
         return $ret;
     }
-}
\ No newline at end of file
+}
index 2987dc4425cea0e94b852b39cd98d88d4c729e78..00c9c2ad9d4c1cedefd90278696f124bd2015745 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
 * dolphin. Collection of useful PHP skeletons.
-* Copyright (C) 2013-202 Johannes 'Banana' Keßler
+* Copyright (C) 2013-2025 Johannes 'Banana' Keßler
 *
 * https://www.bananas-playground.net
 *
@@ -21,21 +21,21 @@ class TitleEpisode extends TSVImport {
     /**
      * @inheritDoc
      */
-    public function setup() {
+    public function setup(): void {
         $this->_db_table_name = 'title_episode';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`tconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`parentTconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`tconst` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`parentTconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `seasonNumber` int NOT NULL,
 `episodeNumber` int NOT NULL,
 UNIQUE KEY `tconst` (`tconst`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
     /**
      * @inheritDoc
      */
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data): string {
         $ret = '';
 
         if(!empty($data)) {
index 9e434f25d1ff24774f09791b08ce9b3db8b886e0..7a4baaa2780c4ec5a4af073c53bd439995f6ab2d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
 * dolphin. Collection of useful PHP skeletons.
-* Copyright (C) 2013-202 Johannes 'Banana' Keßler
+* Copyright (C) 2013-2025 Johannes 'Banana' Keßler
 *
 * https://www.bananas-playground.net
 *
@@ -21,23 +21,23 @@ class TitlePrincipals extends TSVImport {
     /**
     * @inheritDoc
     */
-    public function setup() {
+    public function setup(): void {
         $this->_db_table_name = 'title_principals';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`tconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`tconst` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `ordering` int NOT NULL,
-`nconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`category` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`job` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`characters` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`nconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`category` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`job` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`characters` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 UNIQUE KEY `tconst` (`tconst`,`ordering`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
     /**
     * @inheritDoc
     */
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data): string {
         $ret = '';
 
         if(!empty($data)) {
index 3c59de3b5a059caef7c4e3c1de978366a28702f4..7228d1ac75819f56da2ab7d9f605f87179d2d8f5 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
@@ -21,20 +21,20 @@ class TitleRatings extends TSVImport {
     /**
      * @inheritDoc
      */
-    public function setup() {
+    public function setup():void {
         $this->_db_table_name = 'title_ratings';
         $this->_db_table_crate_str = "CREATE TABLE `".$this->_db_table_name."` (
-`tconst` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-`averageRating` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+`tconst` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+`averageRating` decimal(10,1) NOT NULL,
 `numVotes` int NOT NULL,
 UNIQUE KEY `tconst` (`tconst`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin";
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
     }
 
     /**
      * @inheritDoc
      */
-    public function queryValuePart($data) {
+    public function queryValuePart(array $data):string {
         $ret = '';
 
         if(!empty($data)) {
index 564c75571fec49a617b3d4b4ca7439f9c4f339e5..a3e39482a8afe58fad4e5914bf832cb58bcdee47 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-202 Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025 Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
@@ -32,11 +32,11 @@ class Helper {
      *
      * @param string $input The string to check
      * @param string $mode How the string should be checked
-     * @param mixed $limit If int given the string is checked for length
+     * @param false|mixed $limit If int given the string is checked for length
      *
      * @return bool
      */
-    static function validate($input,$mode='text',$limit=false) {
+    static function validate(string $input, string $mode='text', mixed $limit=false): bool {
         // check if we have input
         $input = trim($input);
 
index cd6f5ec987d03cf6a5e5f7d3ceba92a92c201c6b..789a1abe95e3ec7b71ddee3e4d8466f5f3a392b4 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * dolphin. Collection of useful PHP skeletons.
- * Copyright (C) 2013-2020  Johannes 'Banana' Keßler
+ * Copyright (C) 2013-2025  Johannes 'Banana' Keßler
  *
  * https://www.bananas-playground.net
  *
 abstract class TSVImport {
 
     /**
-     * @var $_DB object database
+     * @var Mysqli database
      */
-    protected $_DB;
+    protected Mysqli $_DB;
 
     /**
-     * @var $_db_table_name string Tablename
+     * @var string The tablename
      */
-    protected $_db_table_name;
+    protected string $_db_table_name;
 
     /**
-     * @var $_db_table_crate_str string Creation SQL for this table
+     * @var string Creation SQL for this table
      */
-    protected $_db_table_crate_str;
-
-    /**
-     * @var bool Create fulltext index or not
-     */
-    protected $_createFulltext = BUILD_INDEX;
+    protected string $_db_table_crate_str;
 
     /**
      * @var array Queries to be run after the import
      */
-    protected $_db_table_after_import_query = array();
+    protected array $_db_table_after_import_query = array();
 
     /**
      * TSVImport constructor.
      *
      * @param $db Mysqli database object
      */
-    public function __construct($db) {
+    public function __construct(Mysqli $db) {
         $this->_DB = $db;
         $this->setup();
     }
@@ -62,7 +57,7 @@ abstract class TSVImport {
      * set $_db_table_name $_db_table_crate_str
      * @return void
      */
-    abstract public function setup();
+    abstract public function setup(): void;
 
     /**
      * Creates the values port of the insert query
@@ -73,19 +68,26 @@ abstract class TSVImport {
      *        for the values insert query
      * @return string
      */
-    abstract public function queryValuePart($data);
+    abstract public function queryValuePart(array $data): string;
 
     /**
-     * @param $file The TSV file to import
+     * @param $file string The TSV file to import
      * @return bool
      */
-    public function import($file) {
+    public function import(string $file): bool {
         $ret = false;
 
         echo "Starting to import $file with ".get_class($this)." class\n";
 
+        // set some settings for better import
+        $this->_DB->query("SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0");
+        $this->_DB->query("SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0");
+        $this->_DB->query("SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0");
+        $this->_DB->query('SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"');
+        $this->_DB->begin_transaction();
+
         $check = $this->_checkTable();
-        if($check == false) {
+        if(!$check) {
             echo "Creating needed database table: $this->_db_table_name \n";
             $this->_createTable();
         }
@@ -104,14 +106,15 @@ abstract class TSVImport {
                 $queryStrStart = "INSERT IGNORE INTO `".$this->_db_table_name."` VALUES ";
                 $queryStr = '';
                 $total=0;
+                $nf = new NumberFormatter("en", NumberFormatter::PERCENT);
                 // some files have very long lines... otherwise a length value would be perfect
                 while (($data = fgetcsv($handle, 0, "\t")) !== FALSE) {
-                    // invalid lines.
                     $_p = $this->queryValuePart($data);
                     if(!empty($_p)) {
                         $queryStr .= $this->queryValuePart($data).",";
                         $total++;
 
+                        // execute if long enough
                         if(isset($queryStr[1000000])) {
                             try {
                                 $this->_DB->query($queryStrStart . trim($queryStr, ","));
@@ -119,21 +122,30 @@ abstract class TSVImport {
                             } catch(Exception $e) {
                                 echo "Failure in executing the query. ".$e->getMessage()."\n";
                                 var_dump($queryStr);
+                                $this->_DB->rollback();
                                 exit();
-                                return false;
                             }
                         }
-
-                        echo "Inserting: $total/$linesInFile\r";
+                        echo "Inserting: $total/$linesInFile ",$nf->format(($total / $linesInFile)),"\r";
                     }
                 }
+                // make sure the last query is also executed.
                 if(!empty($queryStr)) {
-                    $this->_DB->query($queryStrStart.trim($queryStr,","));
-                    echo "\n";
+                    try {
+                        $this->_DB->query($queryStrStart.trim($queryStr,","));
+                        echo "\n";
+                    } catch(Exception $e) {
+                        echo "Failure in executing the query. ".$e->getMessage()."\n";
+                        var_dump($queryStr);
+                        $this->_DB->rollback();
+                        exit();
+                    }
                 }
 
                 fclose($handle);
-                echo "Import complete. Inserted $total rows\n";
+
+                echo "Inserted $total rows\n";
+
                 if(!empty($this->_db_table_after_import_query)) {
                     echo "Executing after import stuff\n";
                     foreach ($this->_db_table_after_import_query as $k=>$v) {
@@ -144,11 +156,22 @@ abstract class TSVImport {
                     echo "Done\n";
                 }
                 $ret = true;
+            } else {
+                echo "Can not open file $file\n";
             }
         } else {
             echo "Filename empty\n";
         }
 
+        // end import queries and reset to original values
+        echo "Reset import changed settings...\n";
+        $this->_DB->query('SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS');
+        $this->_DB->query('SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS');
+        $this->_DB->query('SET AUTOCOMMIT = @OLD_AUTOCOMMIT');
+        $this->_DB->commit();
+
+        echo "Import complete.\n";
+
         return $ret;
     }
 
@@ -158,7 +181,7 @@ abstract class TSVImport {
      *
      * @return bool
      */
-    protected function _checkTable() {
+    protected function _checkTable(): bool {
         $ret = false;
 
         $queryStr = "SELECT count(*) AS amount
@@ -185,7 +208,7 @@ abstract class TSVImport {
      *
      * @return bool
      */
-    protected function _createTable() {
+    protected function _createTable(): bool {
         $ret = false;
 
         try {
@@ -205,13 +228,12 @@ abstract class TSVImport {
      * Count the file lines.
      * Used for user info
      *
-     * @param $file
+     * @param $file string
      * @return int
      */
-    protected function _linesInFile($file) {
+    protected function _linesInFile(string $file): int {
         $file = new \SplFileObject($file, 'r');
         $file->seek(PHP_INT_MAX);
         return $file->key();
     }
-
 }