(t *testing.T)
| 654 | } |
| 655 | |
| 656 | func TestParseConstraintSQL(t *testing.T) { |
| 657 | |
| 658 | tests := []struct { |
| 659 | name string |
| 660 | sql string |
| 661 | want string |
| 662 | }{ |
| 663 | { |
| 664 | name: "createTableSQLCharRelation", |
| 665 | sql: `create table TEST.userInfo ( |
| 666 | id number(6) primary key,--主键 |
| 667 | name varchar2(20) not null,--非空 |
| 668 | sex number(1), |
| 669 | age number(3) default 18, |
| 670 | birthday date, |
| 671 | address varchar2(50), |
| 672 | email varchar2(25) unique,--唯一 |
| 673 | tel number(11) |
| 674 | -- deptno number(2) references dept(deptno) -- 外键 |
| 675 | )`, |
| 676 | want: "CREATE TABLE `TEST`.`USERINFO` (`ID` INT PRIMARY KEY,`NAME` VARCHAR(20) NOT NULL,`SEX` TINYINT,`AGE` SMALLINT,`BIRTHDAY` DATETIME,`ADDRESS` VARCHAR(50),`EMAIL` VARCHAR(25) UNIQUE KEY,`TEL` BIGINT) DEFAULT CHARACTER SET = UTF8MB4"}, |
| 677 | |
| 678 | { |
| 679 | name: "createOutOfLineConstraint", |
| 680 | sql: `CREATE TABLE TEST.employees_demo |
| 681 | ( employee_id NUMBER(6) |
| 682 | , first_name VARCHAR2(20) |
| 683 | , last_name VARCHAR2(25) |
| 684 | CONSTRAINT emp_last_name_nn_demo NOT NULL |
| 685 | , email VARCHAR2(25) |
| 686 | CONSTRAINT emp_email_nn_demo NOT NULL |
| 687 | , phone_number VARCHAR2(20) |
| 688 | , hire_date DATE |
| 689 | CONSTRAINT emp_hire_date_nn_demo NOT NULL |
| 690 | , job_id VARCHAR2(10) |
| 691 | CONSTRAINT emp_job_nn_demo NOT NULL |
| 692 | , salary NUMBER(8,2) |
| 693 | CONSTRAINT emp_salary_nn_demo NOT NULL |
| 694 | , commission_pct NUMBER(2,2) |
| 695 | , manager_id NUMBER(6) |
| 696 | , department_id NUMBER(4) |
| 697 | , dn VARCHAR2(300) |
| 698 | , CONSTRAINT emp_email_uk_demo |
| 699 | UNIQUE (email) |
| 700 | )`, |
| 701 | want: "CREATE TABLE `TEST`.`EMPLOYEES_DEMO` (`EMPLOYEE_ID` INT,`FIRST_NAME` VARCHAR(20),`LAST_NAME` VARCHAR(25) NOT NULL,`EMAIL` VARCHAR(25) NOT NULL,`PHONE_NUMBER` VARCHAR(20),`HIRE_DATE` DATETIME NOT NULL,`JOB_ID` VARCHAR(10) NOT NULL,`SALARY` DECIMAL(8,2) NOT NULL,`COMMISSION_PCT` DECIMAL(2,2),`MANAGER_ID` INT,`DEPARTMENT_ID` SMALLINT,`DN` VARCHAR(300),UNIQUE `EMP_EMAIL_UK_DEMO`(`email`)) DEFAULT CHARACTER SET = UTF8MB4", |
| 702 | }, |
| 703 | } |
| 704 | logger := hclog.NewNullLogger() |
| 705 | extractor := &ExtractorOracle{logger: logger, replicateDoDb: []*common.DataSource{}} |
| 706 | for _, tt := range tests { |
| 707 | t.Run(tt.name, func(t *testing.T) { |
| 708 | dataEvent, err := extractor.parseDDLSQL(tt.sql, "") |
| 709 | if err != nil { |
| 710 | t.Error(err) |
| 711 | return |
| 712 | } |
| 713 | if dataEvent.Query != tt.want { |
nothing calls this directly
no test coverage detected