blob: a66377e58e6e9394c651b2df1f04465727fa3dfc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
\c texera_db
SET search_path TO texera_db;
BEGIN;
-- Rename the old table to migrate later
ALTER TABLE user_activity RENAME TO user_action_old;
-- Validate existing values for "activate"
DO $do$
BEGIN
IF EXISTS (
SELECT 1 FROM user_action_old
WHERE lower(activate) NOT IN ('like','unlike','clone','view')
) THEN
RAISE EXCEPTION 'Error.';
END IF;
END
$do$;
-- Create enum type
DO $do$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_type t
JOIN pg_namespace n ON n.oid = t.typnamespace
WHERE t.typname = 'action_enum' AND n.nspname = 'texera_db'
) THEN
EXECUTE 'CREATE TYPE texera_db.action_enum AS ENUM (''like'',''unlike'',''clone'',''view'')';
END IF;
END
$do$;
-- Create the new table
CREATE TABLE user_action (
user_action_id BIGSERIAL PRIMARY KEY,
uid INTEGER,
ip VARCHAR(15),
action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
resource_type VARCHAR(15) NOT NULL,
resource_id INTEGER NOT NULL,
action texera_db.action_enum NOT NULL
);
-- Copy data
INSERT INTO user_action (uid, ip, action_time, resource_type, resource_id, action)
SELECT
CASE WHEN ua.uid = 0 OR u.uid IS NULL THEN NULL ELSE ua.uid END AS uid,
ua.ip,
ua.activity_time AS action_time,
ua."type" AS resource_type,
ua.id AS resource_id,
lower(ua.activate)::texera_db.action_enum AS action
FROM user_action_old ua
LEFT JOIN "user" u ON u.uid = ua.uid;
-- Add FK
ALTER TABLE user_action
ADD CONSTRAINT fk_user_action_uid
FOREIGN KEY (uid) REFERENCES "user"(uid) ON DELETE SET NULL;
-- Drop the old table
DROP TABLE user_action_old;
COMMIT;