alter table

This commit is contained in:
jackfoxy 2022-09-10 10:02:00 -07:00
parent 3f139a3a1b
commit 7c3d5a724f
4 changed files with 44 additions and 38 deletions

View File

@ -36,15 +36,15 @@ TBD
```
ALTER TABLE [ <db-qualifer> ]{ <table-name> }
{ ALTER COLUMN { <column-name> <aura> } [ ,... n
| ADD COLUMN { <column-name> <aura> } [ ,... n ]
| DROP COLUMN { <column-name> } [ ,... n ]
{ ALTER COLUMN ( { <column-name> <aura> } [ ,... n ] )
| ADD COLUMN ( { <column-name> <aura> } [ ,... n ] )
| DROP COLUMN ( { <column-name> } [ ,... n ] )
| ADD FOREIGN KEY <foreign-key-name> (<column-name> [ ,... n ])
REFERENCES [<namespace-name>.]<table-name> ( <column-name> [ ,... n ])
[ ON DELETE { NO ACTION | CASCADE } ]
[ ON UPDATE { NO ACTION | CASCADE } ]
[ ,... n ]
| DROP FOREIGN KEY <foreign-key-name> [ ,... n ] }
| DROP FOREIGN KEY ( <foreign-key-name> [ ,... n ] } )
```
Example:

View File

@ -582,7 +582,7 @@
script q.q.u.+3.q:table-nail
script-position next-cursor
commands
[`command-ast`(alter-table:ast %alter-table -.parsed ~ ~ ~ ~ ~) commands]
[`command-ast`(alter-table:ast %alter-table -.parsed ~ ~ ~ ~ +>.parsed) commands]
==
!!
%create-database

View File

@ -54,6 +54,19 @@
column=@t
alias=@t
==
+$ foreign-key
$:
%foreign-key
name=@t
table=qualified-object
columns=(list ordered-column) :: the source columns
reference-table=qualified-object :: reference (target) table
reference-columns=(list @t) :: and columns
referential-integrity=(list referential-integrity-action) :: what to do when referenced item deletes or updates
==
::
:: expressions
::
:: { = | <> | != | > | >= | !> | < | <= | !< }
+$ binary-operator @tas
+$ binary-predicate $:(* binary-operator *)
@ -236,17 +249,6 @@
columns=(list ordered-column)
==
+$ create-namespace $:([%create-namespace database-name=@t name=@t])
+$ foreign-key
$:
%foreign-key
name=@t
table=qualified-object
columns=(list ordered-column) :: the source columns
reference-table=qualified-object :: reference (target) table
reference-columns=(list @t) :: and columns
referential-integrity=(list referential-integrity-action) :: what to do when referenced item deletes or updates
==
+$ create-table
$:
%create-table

View File

@ -136,27 +136,31 @@
!> ~[expected]
!> (parse:parse(current-database 'db1') urql)
::
::
::++ test-alter-table-
:: =/ expected
:: %+ expect-eq
:: !> ~[expected]
:: !> (parse:parse(current-database 'db1') "")
:: drop 2 foreign keys, extra spaces
++ test-alter-table-7
=/ expected [%alter-table table=[%qualified-object ship=~ database='db1' namespace='dbo' name='mytable'] alter-columns=~ add-columns=~ drop-columns=~ add-foreign-keys=~ drop-foreign-keys=['fk1' 'fk2' ~]]
%+ expect-eq
!> ~[expected]
!> (parse:parse(current-database 'db1') " ALTER TABLE mytable DROP FOREIGN KEY ( fk1, fk2 )")
::
::
::++ test-alter-table-
:: =/ expected
:: %+ expect-eq
:: !> ~[expected]
:: !> (parse:parse(current-database 'db1') "")
:: drop 2 foreign keys, no extra spaces
++ test-alter-table-8
=/ expected [%alter-table table=[%qualified-object ship=~ database='db' namespace='dbo' name='mytable'] alter-columns=~ add-columns=~ drop-columns=~ add-foreign-keys=~ drop-foreign-keys=['fk1' 'fk2' ~]]
%+ expect-eq
!> ~[expected]
!> (parse:parse(current-database 'db1') "ALTER TABLE db..mytable DROP FOREIGN KEY (fk1,fk2)")
::
::
::++ test-alter-table-
:: =/ expected
:: %+ expect-eq
:: !> ~[expected]
:: !> (parse:parse(current-database 'db1') "")
:: drop 1 foreign key
++ test-alter-table-9
=/ expected [%alter-table table=[%qualified-object ship=~ database='db1' namespace='ns' name='mytable'] alter-columns=~ add-columns=~ drop-columns=~ add-foreign-keys=~ drop-foreign-keys=['fk1' ~]]
%+ expect-eq
!> ~[expected]
!> (parse:parse(current-database 'db1') "ALTER TABLE ns.mytable DROP FOREIGN KEY (fk1)")
::
:: fail when table name not a term
++ test-fail-alter-table-10
%- expect-fail
|. (parse:parse(current-database 'db1') "ALTER TABLE ns.myTable DROP FOREIGN KEY (fk1)")
::
:: create database
::
@ -173,12 +177,12 @@
!> (parse:parse(current-database 'dummy') "cReate datAbase \0a my-database; cReate namesPace my-db.another-namespace")
::
:: fail when database name is not a term
++ test-create-database-3
++ test-fail-create-database-3
%- expect-fail
|. (parse:parse(current-database 'dummy') "cReate datAbase My-database")
::
:: fail when commands are prior to create database
++ test-create-database-4
++ test-fail-create-database-4
%- expect-fail
|. (parse:parse(current-database 'dummy') "create namespace my-namespace ; cReate datAbase my-database")
::
@ -487,7 +491,7 @@
|. (parse:parse(current-database 'other-db') "DROP table Db.ns.name")
::
:: fail when namespace qualifier is not a term
++ test-drop-table-9
++ test-fail-drop-table-9
%- expect-fail
|. (parse:parse(current-database 'other-db') "DROP table db.nS.name")
::