From 8e1f9ec9b0b3346d65d20e791391bb3a9594a256 Mon Sep 17 00:00:00 2001
From: Thomas Braun <thomas.braun@byte-physics.de>
Date: Sun, 27 Oct 2024 11:29:44 +0100
Subject: [PATCH] Fix timestamp columns in Mariadb 10.11 and newer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This problem appears in MariaDb 10.11 since default value of
explicit_defaults_for_timestamp changed from OFF to ON, setting it to
OFF (set global explicit_defaults_for_timestamp=OFF;) make the
create_db_tables.sql.in work properly.

Initial patch by Santiago Ruano Rincón with refinements by Graziano
Scalamera.

Upgrade script and tests by the author.

Origin: backport, https://gitlab.com/tango-controls/TangoDatabase/-/merge_requests/95
---
 configure/CMakeLists.txt           |  1 +
 create_db_tables.sql.in            | 14 +++++++-------
 test/test.cpp                      | 27 +++++++++++++++++++++++++++
 update_db_from_5.23_to_5.24.sql.in | 11 +++++++++++
 4 files changed, 46 insertions(+), 7 deletions(-)
 create mode 100644 update_db_from_5.23_to_5.24.sql.in

Index: tango/cppserver/database/create_db_tables.sql.in
===================================================================
--- tango.orig/cppserver/database/create_db_tables.sql.in
+++ tango/cppserver/database/create_db_tables.sql.in
@@ -256,7 +256,7 @@ CREATE TABLE IF NOT EXISTS object_histor
 
 CREATE TABLE IF NOT EXISTS property_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   object varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
   count int(11) NOT NULL default '0',
@@ -268,7 +268,7 @@ CREATE TABLE IF NOT EXISTS property_hist
 
 CREATE TABLE IF NOT EXISTS property_device_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   device varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
   count int(11) NOT NULL default '0',
@@ -280,7 +280,7 @@ CREATE TABLE IF NOT EXISTS property_devi
 
 CREATE TABLE IF NOT EXISTS property_class_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   class varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
   count int(11) NOT NULL default '0',
@@ -292,7 +292,7 @@ CREATE TABLE IF NOT EXISTS property_clas
 
 CREATE TABLE IF NOT EXISTS property_attribute_class_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   class varchar(255) NOT NULL default '',
   attribute varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
@@ -306,7 +306,7 @@ CREATE TABLE IF NOT EXISTS property_attr
 
 CREATE TABLE IF NOT EXISTS property_attribute_device_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   device varchar(255) NOT NULL default '',
   attribute varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
@@ -320,7 +320,7 @@ CREATE TABLE IF NOT EXISTS property_attr
 
 CREATE TABLE IF NOT EXISTS property_pipe_class_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   class varchar(255) NOT NULL default '',
   pipe varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
@@ -334,7 +334,7 @@ CREATE TABLE IF NOT EXISTS property_pipe
 
 CREATE TABLE IF NOT EXISTS property_pipe_device_hist (
   id bigint unsigned NOT NULL default '0',
-  date timestamp NOT NULL,
+  date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   device varchar(255) NOT NULL default '',
   pipe varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
