import unittest from app.data_platform.schema import ( _column_sql, custom_definition_from_create_sql, ) MYSQL_STYLE_USERS_SQL = """ CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(255) NOT NULL, email VARCHAR(100) UNIQUE, phone VARCHAR(20), age INT, gender VARCHAR(10), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); """ class SqlCreateCompatibilityTests(unittest.TestCase): def test_mysql_style_managed_columns_and_unique_are_supported(self) -> None: definition, rows = custom_definition_from_create_sql( {"sql": MYSQL_STYLE_USERS_SQL} ) self.assertEqual(definition.code, "users") self.assertEqual( [field.code for field in definition.fields], ["username", "password", "email", "phone", "age", "gender"], ) email = next(field for field in definition.fields if field.code == "email") self.assertTrue(email.unique) self.assertTrue(next(row for row in rows if row["code"] == "email")["unique"]) physical_sql = _column_sql(definition).as_string() self.assertIn('"email" VARCHAR(100) UNIQUE', physical_sql) self.assertIn("id UUID PRIMARY KEY", physical_sql) self.assertIn("updated_at TIMESTAMPTZ NOT NULL DEFAULT now()", physical_sql) self.assertNotIn("AUTO_INCREMENT", physical_sql) self.assertNotIn("ON UPDATE", physical_sql) if __name__ == "__main__": unittest.main()