/* Main components 1. one snapshot schema definition (e.g. V2); 2. version create time (e.g. V1 at T1, V2 at T2, V3 at T3, V4 at T4); 3. smo definition (e.g. (2,1), (2,3), (2,4) ); 4. input query on Vi (SQL with <, <=, >, >=); 5. commands */ //Details //1. snapshot schema definition (transaction time db) Employe DB V1: Schema V(1) := { engineerpersonnel(empno, name, hiredate, title, deptname); otherpersonnel(empno, name, hiredate, title, deptname); job(title, salary); }; //2. version create time (optional, used for optimization); Versionstarttime V(1) := "1985-01-01"; Versionstarttime V(2) := "1989-01-01"; Versionstarttime V(3) := "1993-01-01"; Versionstarttime V(4) := "1997-01-01"; Versionstarttime V(5) := "2000-01-01"; Versionstarttime V(6) := "2005-01-01"; //3. smo definition Smo V(1,2) := { MERGE TABLE engineerpersonnel, otherpersonnel INTO empacct; }; Smo V(2,3) := { CREATE TABLE dept; COPY COLUMN deptname FROM empacct INTO dept; //RENAME COLUMN deptname IN dept TO name; ADD COLUMN deptno AS gen_id(deptname) INTO dept; //COPY COLUMN deptno FROM dept INTO empacct WHERE empacct.deptname = dept.name; COPY COLUMN deptno FROM dept INTO empacct WHERE empacct.deptname = dept.deptname; DROP COLUMN deptname FROM empacct; //COPY COLUMN empno FROM empacct INTO dept WHERE empacct.deptno = dept.deptno ; // AND empacct.title = "Manager" //RENAME COLUMN empno IN dept TO managerno; ADD COLUMN managerno INTO dept; }; Smo V(3,4) := { //CREATE TABLE empbio(sex,birthdate); CREATE TABLE empbio; COPY COLUMN empno FROM empacct INTO empbio; ADD COLUMN sex into empbio; ADD COLUMN birthdate into empbio; //MOVE COLUMN name FROM empacct INTO empbio WHERE empbio.empno = empacct.empno; COPY COLUMN name FROM empacct INTO empbio WHERE empbio.empno = empacct.empno; DROP COLUMN name FROM empacct; }; Smo V(4,5) := { ADD COLUMN firstname AS getFirstName(name) INTO empbio; ADD COLUMN lastname AS getLastName(name) INTO empbio; DROP COLUMN name FROM empbio; COPY COLUMN salary FROM job INTO empacct WHERE empacct.title = job.title; DROP TABLE job; }; Smo V(5,6) := { //MOVE COLUMN firstname FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; //MOVE COLUMN lastname FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; //MOVE COLUMN sex FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; //MOVE COLUMN birthdate FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; COPY COLUMN firstname FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; COPY COLUMN lastname FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; COPY COLUMN sex FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; COPY COLUMN birthdate FROM empbio INTO empacct WHERE empbio.empno = empacct.empno; DROP TABLE empbio; RENAME TABLE empacct INTO emp; };