137 lines
1.1 KiB
Go
137 lines
1.1 KiB
Go
package oracle
|
|
|
|
import (
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
var setupReserved sync.Once
|
|
var reservedWords map[string]struct{}
|
|
|
|
func isReserved(w string) bool {
|
|
setupReserved.Do(
|
|
func() {
|
|
words := strings.Split(reserved, "\n")
|
|
reservedWords = make(map[string]struct{}, len(words))
|
|
for _, s := range words {
|
|
reservedWords[s] = struct{}{}
|
|
}
|
|
},
|
|
)
|
|
_, ok := reservedWords[strings.ToUpper(w)]
|
|
return ok
|
|
}
|
|
|
|
const reserved = `AGGREGATE
|
|
ACCESS
|
|
ADD
|
|
ALL
|
|
ALTER
|
|
AND
|
|
ANY
|
|
AS
|
|
ASC
|
|
AT
|
|
AUDIT
|
|
BETWEEN
|
|
BY
|
|
CHAR
|
|
CHECK
|
|
CLUSTER
|
|
COLUMN
|
|
COLUMN_VALUE
|
|
COMMENT
|
|
COMPRESS
|
|
CONNECT
|
|
CREATE
|
|
CURRENT
|
|
DATE
|
|
DECIMAL
|
|
DEFAULT
|
|
DELETE
|
|
DESC
|
|
DISTINCT
|
|
DROP
|
|
ELSE
|
|
EXCLUSIVE
|
|
EXISTS
|
|
FILE
|
|
FLOAT
|
|
FOR
|
|
FROM
|
|
GRANT
|
|
GROUP
|
|
HAVING
|
|
IDENTIFIED
|
|
IMMEDIATE
|
|
IN
|
|
INCREMENT
|
|
INDEX
|
|
INITIAL
|
|
INSERT
|
|
INTEGER
|
|
INTERSECT
|
|
INTO
|
|
IS
|
|
LEVEL
|
|
LIKE
|
|
LOCK
|
|
LONG
|
|
MAXEXTENTS
|
|
MINUS
|
|
MLSLABEL
|
|
MODE
|
|
MODIFY
|
|
NESTED_TABLE_ID
|
|
NOAUDIT
|
|
NOCOMPRESS
|
|
NOT
|
|
NOWAIT
|
|
NULL
|
|
NUMBER
|
|
OF
|
|
OFFLINE
|
|
ON
|
|
ONLINE
|
|
OPTION
|
|
OR
|
|
ORDER
|
|
PCTFREE
|
|
PRIOR
|
|
PUBLIC
|
|
RAW
|
|
RENAME
|
|
RESOURCE
|
|
REVOKE
|
|
ROW
|
|
ROWID
|
|
ROWNUM
|
|
ROWS
|
|
SELECT
|
|
SESSION
|
|
SET
|
|
SHARE
|
|
SIZE
|
|
SMALLINT
|
|
START
|
|
SUCCESSFUL
|
|
SYNONYM
|
|
SYSDATE
|
|
TABLE
|
|
THEN
|
|
TO
|
|
TRIGGER
|
|
UID
|
|
UNION
|
|
UNIQUE
|
|
UPDATE
|
|
USER
|
|
VALIDATE
|
|
VALUES
|
|
VARCHAR
|
|
VARCHAR2
|
|
VIEW
|
|
WHENEVER
|
|
WHERE
|
|
WITH`
|