{------------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: SynHighlighterSQL.pas, released 2000-04-21. The Original Code is based on the wmSQLSyn.pas and wmSybaseSyn.pas files from the mwEdit component suite by Martin Waldenburg and other developers, the Initial Author of these files is Willo van der Merwe. Initial Author of SynHighlighterSQL.pas is Michael Hieke. Portions created by Willo van der Merwe are Copyright 1999 Willo van der Merwe. Portions created by Michael Hieke are Copyright 2000 Michael Hieke. Unicode translation by Maël Hörz. All Rights Reserved. Contributors to the SynEdit and mwEdit projects are listed in the Contributors.txt file. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. $Id: SynHighlighterSQL.pas,v 1.39.2.14 2008/09/14 16:25:03 maelh Exp $ You may retrieve the latest version of this file at the SynEdit home page, located at http://SynEdit.SourceForge.net Known Issues: -------------------------------------------------------------------------------} { @abstract(SQL highlighter for SynEdit with support for different dialects.) @author(Michael Hieke) @created(2000-04-21) @lastmod(2000-11-16) The SynHighlighterSQL implements a highlighter for SQL for the SynEdit projects. Different SQL dialects can be selected via the Dialect property. } unit SynHighlighterSQL; {$I SynEdit.inc} interface {$IFDEF SYN_COMPILER_12_UP} {$DEFINE USE_TABLE_DICTIONARY} {$ENDIF} uses Graphics, Registry, SynEditTypes, SynEditHighlighter, SynHighlighterHashEntries, SynUnicode, {$IFDEF USE_TABLE_DICTIONARY} Generics.Collections, {$ENDIF} SysUtils, Classes; type TtkTokenKind = (tkComment, tkDatatype, tkDefaultPackage, tkException, tkFunction, tkIdentifier, tkKey, tkNull, tkNumber, tkSpace, tkPLSQL, tkSQLPlus, tkString, tkSymbol, tkTableName, tkUnknown, tkVariable, tkConditionalComment, tkDelimitedIdentifier, tkProcName, tkConsoleOutput); TRangeState = (rsUnknown, rsComment, rsString, rsConditionalComment, rsConsoleOutput); TSQLDialect = (sqlStandard, sqlInterbase6, sqlMSSQL7, sqlMySQL, sqlOracle, sqlSybase, sqlIngres, sqlMSSQL2K, sqlPostgres, sqlNexus, sqlInformix); type TSynSQLSyn = class(TSynCustomHighlighter) private FRange: TRangeState; FTokenID: TtkTokenKind; FKeywords: TSynHashEntryList; FProcNames: TUnicodeStrings; FTableNames: TUnicodeStrings; {$IFDEF USE_TABLE_DICTIONARY} FTableDict: TDictionary; {$ENDIF} FFunctionNames: TUniCodeStrings; FDialect: TSQLDialect; FCommentAttri: TSynHighlighterAttributes; FConditionalCommentAttri: TSynHighlighterAttributes; FConsoleOutputAttri: TSynHighlighterAttributes; FDataTypeAttri: TSynHighlighterAttributes; FDefaultPackageAttri: TSynHighlighterAttributes; FDelimitedIdentifierAttri: TSynHighlighterAttributes; FExceptionAttri: TSynHighlighterAttributes; FFunctionAttri: TSynHighlighterAttributes; FIdentifierAttri: TSynHighlighterAttributes; FKeyAttri: TSynHighlighterAttributes; FNumberAttri: TSynHighlighterAttributes; FPLSQLAttri: TSynHighlighterAttributes; FSpaceAttri: TSynHighlighterAttributes; FSQLPlusAttri: TSynHighlighterAttributes; FStringAttri: TSynHighlighterAttributes; FSymbolAttri: TSynHighlighterAttributes; FTableNameAttri: TSynHighlighterAttributes; FProcNameAttri: TSynHighlighterAttributes; FVariableAttri: TSynHighlighterAttributes; function HashKey(Str: PWideChar): Integer; function IdentKind(MayBe: PWideChar): TtkTokenKind; procedure DoAddKeyword(AKeyword: UnicodeString; AKind: Integer); procedure SetDialect(Value: TSQLDialect); procedure SetTableNames(const Value: TUnicodeStrings); procedure SetFunctionNames(const Value: TUnicodeStrings); procedure PutFunctionNamesInKeywordList; procedure FunctionNamesChanged(Sender: TObject); procedure ProcNamesChanged(Sender: TObject); procedure TableNamesChanged(Sender: TObject); procedure InitializeKeywordLists; procedure PutProcNamesInKeywordList; procedure PutTableNamesInKeywordList; procedure AndSymbolProc; procedure AsciiCharProc; procedure CRProc; procedure EqualProc; procedure GreaterProc; procedure IdentProc; procedure LFProc; procedure LowerProc; procedure MinusProc; procedure HashProc; procedure NullProc; procedure NumberProc; procedure OrSymbolProc; procedure PlusProc; procedure SlashProc; procedure SpaceProc; procedure QuoteProc; procedure BacktickProc; procedure BracketProc; procedure SymbolProc; procedure SymbolAssignProc; procedure VariableProc; procedure UnknownProc; procedure AnsiCProc; procedure SetProcNames(const Value: TUnicodeStrings); protected function GetSampleSource: UnicodeString; override; function IsFilterStored: Boolean; override; public class function GetLanguageName: string; override; class function GetFriendlyLanguageName: UnicodeString; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; function GetDefaultAttribute(Index: Integer): TSynHighlighterAttributes; override; function GetEol: Boolean; override; function GetKeyWords(TokenKind: Integer): UnicodeString; override; function GetRange: Pointer; override; function GetTokenAttribute: TSynHighlighterAttributes; override; function GetTokenID: TtkTokenKind; function GetTokenKind: Integer; override; function IsIdentChar(AChar: WideChar): Boolean; override; function IsKeyword(const AKeyword: UnicodeString): Boolean; override; procedure Next; override; procedure ResetRange; override; procedure SetRange(Value: Pointer); override; published property CommentAttri: TSynHighlighterAttributes read FCommentAttri write FCommentAttri; property ConditionalCommentAttri: TSynHighlighterAttributes read FConditionalCommentAttri write FConditionalCommentAttri; property ConsoleOutputAttri: TSynHighlighterAttributes read FConsoleOutputAttri write FConsoleOutputAttri; property DataTypeAttri: TSynHighlighterAttributes read FDataTypeAttri write FDataTypeAttri; property DefaultPackageAttri: TSynHighlighterAttributes read FDefaultPackageAttri write FDefaultPackageAttri; property DelimitedIdentifierAttri: TSynHighlighterAttributes read FDelimitedIdentifierAttri write FDelimitedIdentifierAttri; property ExceptionAttri: TSynHighlighterAttributes read FExceptionAttri write FExceptionAttri; property FunctionAttri: TSynHighlighterAttributes read FFunctionAttri write FFunctionAttri; property IdentifierAttri: TSynHighlighterAttributes read FIdentifierAttri write FIdentifierAttri; property KeyAttri: TSynHighlighterAttributes read FKeyAttri write FKeyAttri; property NumberAttri: TSynHighlighterAttributes read FNumberAttri write FNumberAttri; property PLSQLAttri: TSynHighlighterAttributes read FPLSQLAttri write FPLSQLAttri; property SpaceAttri: TSynHighlighterAttributes read FSpaceAttri write FSpaceAttri; property SQLPlusAttri: TSynHighlighterAttributes read FSQLPlusAttri write FSQLPlusAttri; property StringAttri: TSynHighlighterAttributes read FStringAttri write FStringAttri; property SymbolAttri: TSynHighlighterAttributes read FSymbolAttri write FSymbolAttri; property ProcNameAttri: TSynHighlighterAttributes read FProcNameAttri write FProcNameAttri; property TableNameAttri: TSynHighlighterAttributes read FTableNameAttri write FTableNameAttri; property ProcNames: TUnicodeStrings read FProcNames write SetProcNames; property TableNames: TUnicodeStrings read FTableNames write SetTableNames; property FunctionNames: TUnicodeStrings read FFunctionNames write SetFunctionNames; property VariableAttri: TSynHighlighterAttributes read FVariableAttri write FVariableAttri; property SQLDialect: TSQLDialect read FDialect write SetDialect default sqlStandard; end; implementation uses SynEditStrConst; const //---"Standard" (ANSI SQL keywords (Version 1, 2 and 3) (www.sql.org)----------- StandardKW: UnicodeString = 'absolute,action,active,actor,add,after,alias,all,allocate,alter,' + 'and,any,are,as,asc,ascending,assertion,async,at,attributes,auto,' + 'base_name,before,begin,between,bit,bit_length,boolean,both,breadth,by,' + 'cache,call,cascade,cascaded,case,cast,catalog,char_length,' + 'character_length,check,coalesce,collate,collation,column,commit,' + 'committed,completion,computed,conditional,connect,connection,constraint,' + 'constraints,containing,convert,corresponding,count,create,cross,current,' + 'current_date,current_path,current_time,current_timestamp,current_user,' + 'cursor,cycle,data,database,date,day,deallocate,debug,declare,default,' + 'deferrable,deferred,delete,depth,desc,descending,describe,descriptor,' + 'destroy,diagnostics,dictionary,disconnect,distinct,do,domain,' + 'drop,each,element,else,elseif,end,end-exec,entry_point,equals,escape,' + 'except,exception,execute,exists,exit,external,extract,factor,false,' + 'filter,first,for,foreign,from,full,function,general,generator,get,' + 'global,grant,group,having,hold,hour,identity,if,ignore,immediate,in,' + 'inactive,index,initially,inner,input,insensitive,insert,instead,' + 'intersect,interval,into,is,isolation,join,key,last,leading,leave,left,' + 'less,level,like,limit,list,local,loop,lower,match,merge,minute,modify,' + 'month,names,national,natural,nchar,new,new_table,next,no,none,not,null,' + 'nullif,object,octet_length,of,off,old,old_table,on,only,operation,' + 'operator,operators,or,order,others,outer,output,overlaps,pad,' + 'parameter,parameters,partial,password,path,pendant,plan,position,' + 'postfix,prefix,preorder,prepare,preserve,primary,prior,private,' + 'privileges,procedure,protected,read,recursive,ref,referencing,relative,' + 'replace,resignal,restrict,retain,return,returns,revoke,right,role,' + 'rollback,routine,row,rows,savepoint,schema,scroll,search,second,select,' + 'sensitive,sequence,session,session_user,set,shadow,shared,signal,' + 'similar,size,snapshot,some,space,sqlexception,sqlstate,sqlwarning,start,' + 'state,structure,substring,suspend,symbol,system_user,table,temporary,' + 'term,test,then,there,time,timestamp,timezone_hour,timezone_minute,to,' + 'trailing,transaction,translate,translation,trigger,trim,true,tuple,type,' + 'uncommitted,under,union,unique,unknown,update,upper,usage,user,using,' + 'value,varchar,variable,varying,view,virtual,visible,wait,when,where,' + 'while,with,without,work,write,year,zone'; //---Sybase keywords------------------------------------------------------------ SybaseKW: UnicodeString = 'absolute,action,add,after,alias,all,allocate,alter,and,any,are,' + 'arith_overflow,as,asc,assertion,async,at,authorization,avg,before,begin,' + 'between,bit,bit_length,boolean,both,breadth,break,browse,bulk,by,call,' + 'cascade,cascaded,case,cast,catalog,char,char_convert,char_length,' + 'character,character_length,check,checkpoint,close,clustered,coalesce,' + 'collate,collation,column,commit,completion,compute,confirm,' + 'connect,connection,constraint,constraints,continue,controlrow,convert,' + 'corresponding,count,create,cross,current,current_date,current_time,' + 'current_timestamp,current_user,cursor,cycle,data,database,date,day,dbcc,' + 'deallocate,dec,decimal,declare,default,deferrable,deferred,delete,depth,' + 'desc,describe,descriptor,diagnostics,dictionary,dis,disconnect,distinct,' + 'domain,double,drop,dummy,dump,each,else,elseif,en,end,endtran,equals,' + 'errlvl,errordata,errorexit,escape,except,exception,exclusive,exec,' + 'execute,exists,exit,exp_row_size,external,extract,false,fetch,' + 'fillfactor,first,float,for,foreign,found,from,full,general,get,global,' + 'go,goto,grant,group,having,holdlock,hour,identity,identity_gap,' + 'identity_insert,identity_start,if,ignore,immediate,in,index,indicator,' + 'initially,inner,input,insensitive,insert,install,int,integer,intersect,' + 'interval,into,is,isolation,jar,join,key,kill,language,last,leading,' + 'leave,left,less,level,like,limit,lineno,load,local,lock,loop,lower,' + 'match,max,max_rows_per_page,min,minute,mirror,mirrorexit,modify,module,' + 'month,names,national,natural,nchar,new,next,no,noholdlock,nonclustered,' + 'none,not,null,nullif,numeric,numeric_truncation,object,' + 'octet_length,of,off,offsets,oid,old,on,once,online,only,open,operation,' + 'operators,option,or,order,others,outer,output,over,overlaps,pad,' + 'parameters,partial,partition,pendant,perm,permanent,plan,position,' + 'precision,preorder,prepare,preserve,primary,print,prior,private,' + 'privileges,proc,procedure,processexit,protected,proxy_table,public,' + 'quiesce,raiserror,read,readpast,readtext,real,reconfigure,recursive,' + 'ref,reference,referencing,relative,remove,reorg,replace,replication,' + 'reservepagegap,resignal,restrict,return,returns,revoke,right,role,' + 'rollback,routine,row,rowcount,rows,rule,save,savepoint,schema,scroll,' + 'search,second,section,select,sensitive,sequence,session_user,set,' + 'setuser,shared,shutdown,signal,similar,size,smallint,some,space,sql,' + 'sqlcode,sqlerror,sqlexception,sqlstate,statistics,stripe,structure,' + 'substring,sum,syb_identity,syb_restree,system_user,table,temp,temporary,' + 'test,textsize,then,there,time,timestamp,timezone_hour,timezone_minute,' + 'to,trailing,tran,transaction,translate,translation,trigger,trim,true,' + 'truncate,tsequal,type,under,union,unique,unknown,unpartition,update,' + 'upper,usage,use,user,user_option,using,value,values,varchar,variable,' + 'varying,view,virtual,visible,wait,waitfor,when,whenever,where,while,' + 'with,without,work,write,writetext,year,zone'; //---Oracle--------------------------------------------------------------------- // Oracle SQL keywords OracleKW: UnicodeString = 'ACCESS,ACCESSED,ACCOUNT,ACTIVATE,ACTIVE_INSTANCE_COUNT,ADD,ADMIN,ADVISE,' + 'AGENT,ALL,ALLOCATE,ALTER,ANALYZE,ANCILLARY,AND,ANY,AQ_TM_PROCESSES,' + 'ARCHIVE_LAG_TARGET,ARCHIVELOG,AS,ASC,ASSOCIATE,ATTRIBUTES,AUDIT,' + 'AUDIT_FILE_DEST,AUDIT_SYS_OPERATIONS,AUDIT_TRAIL,AUTHENTICATED,AUTHID,' + 'AUTOALLOCATE,AUTOEXTEND,AUTOMATIC,BACKGROUND_CORE_DUMP,' + 'BACKGROUND_DUMP_DEST,BACKUP,BACKUP_TAPE_IO_SLAVES,BECOME,BEFORE,' + 'BEHALF,BETWEEN,BINDING,BITMAP,BITMAP_MERGE_AREA_SIZE,BLANK_TRIMMING,' + 'BLOCK,BLOCKSIZE,BUFFER_POOL,BUFFER_POOL_KEEP,BUFFER_POOL_RECYCLE,BY,' + 'CACHE,CANCEL,CASCADE,CAST,CATEGORY,CHAINED,CHANGE,CHARACTER,CHECK,' + 'CHECKPOINT,CHILD,CHUNK,CIRCUITS,CLASS,CLONE,CLUSTER,CLUSTER_DATABASE,' + 'CLUSTER_DATABASE_INSTANCES,CLUSTER_INTERCONNECTS,COALESCE,COBOL,' + 'COLUMN,COLUMNS,COMMENT,COMMIT_POINT_STRENGTH,COMPATIBLE,COMPILE,' + 'COMPLETE,COMPOSITE_LIMIT,COMPRESS,COMPUTE,CONNECT,' + 'CONNECT_TIME,CONSIDER,CONSTRAINT,CONSTRAINTS,CONTENTS,CONTEXT,CONTINUE,' + 'CONTROL,CONTROL_FILE_RECORD_KEEP_TIME,CONTROL_FILES,CONTROLFILE,' + 'CORE_DUMP_DEST,COST,CPU_COUNT,CPU_PER_CALL,CPU_PER_SESSION,CREATE,' + 'CREATE_BITMAP_AREA_SIZE,CREATE_STORED_OUTLINES,CURRENT,CURRENT_USER,' + 'CURSOR_SHARING,CURSOR_SPACE_FOR_TIME,CYCLE,DANGLING,DATAFILE,' + 'DB_BLOCK_BUFFERS,DB_BLOCK_CHECKING,DB_BLOCK_CHECKSUM,DB_BLOCK_SIZE,' + 'DB_CACHE_ADVICE,DB_CACHE_SIZE,DB_CREATE_FILE_DEST,DB_DOMAIN,' + 'DB_FILE_MULTIBLOCK_READ_COUNT,DB_FILE_NAME_CONVERT,DB_FILES,' + 'DB_KEEP_CACHE_SIZE,DB_NAME,DB_RECYCLE_CACHE_SIZE,DB_WRITER_PROCESSES,' + 'DBLINK_ENCRYPT_LOGIN,DBWR_IO_SLAVES,DEALLOCATE,DEBUG,DEFAULT,DEFERRED,' + 'DEFINER,DELETE,DEMAND,DETERMINES,DG_BROKER_START,DICTIONARY,DIMENSION,' + 'DIRECTORY,DISABLE,DISASSOCIATE,DISK_ASYNCH_IO,DISMOUNT,DISPATCHERS,' + 'DISTINCT,DISTRIBUTED,DISTRIBUTED_LOCK_TIMEOUT,DML,DML_LOCKS,DOCUMENT,' + 'DROP,DRS_START,ELSE,ENABLE,ENQUEUE_RESOURCES,ESCAPE,ESTIMATE,EVENT,' + 'EVENTS,EXCEPT,EXCEPTIONS,EXCHANGE,EXCLUDING,EXCLUSIVE,EXISTS,EXPIRE,' + 'EXPLAIN,EXTENT,EXTERNALLY,FAILED_LOGIN_ATTEMPTS,FAL_CLIENT,FAL_SERVER,' + 'FAST,FAST_START_IO_TARGET,FAST_START_MTTR_TARGET,' + 'FAST_START_PARALLEL_ROLLBACK,FILE,FILE_MAPPING,FILESYSTEMIO_OPTIONS,' + 'FIXED_DATE,FLUSH,FOR,FORCE,FOREIGN,FORTRAN,FREELIST,FREELISTS,FRESH,' + 'FROM,FROM_TZ,FUNCTIONS,FULL,GC_FILES_TO_LOCKS,GENERATED,GLOBAL,' + 'GLOBAL_CONTEXT_POOL_SIZE,GLOBAL_NAME,GLOBAL_NAMES,GLOBALLY,GO,GRANT,' + 'GROUP,GROUPS,HASH,HASH_AREA_SIZE,HASH_JOIN_ENABLED,HASHKEYS,HAVING,HEAP,' + 'HI_SHARED_MEMORY_ADDRESS,HIERARCHY,HS_AUTOREGISTER,IDENTIFIED,IDLE_TIME,' + 'IFILE,IMMEDIATE,IN,INCLUDING,INCREMENT,INDEX,INDEXTYPE,INDEXTYPES,' + 'INFILE,INITIAL,INITIALIZED,INITIALLY,INITRANS,INSERT,INSTANCE,' + 'INSTANCE_GROUPS,INSTANCE_NAME,INSTANCE_NUMBER,INT,INTERSECT,INTO,' + 'INVALIDATE,IS,ISOLATION,JAVA,JAVA_MAX_SESSIONSPACE_SIZE,JAVA_POOL_SIZE,' + 'JAVA_SOFT_SESSIONSPACE_LIMIT,JOB_QUEUE_PROCESSES,JOIN,KEEP,KEY,KILL,' + 'LARGE_POOL_SIZE,LAYERLISTS,LEFT,LEVEL,LIBRARY,LICENSE_MAX_SESSIONS,' + 'LICENSE_MAX_USERS,LICENSE_SESSIONS_WARNING,LIKE,LIMIT,LINK,LIST,LOB,' + 'LOCAL,LOCAL_LISTENER,LOCATOR,LOCK,LOCK_NAME_SPACE,LOCK_SGA,' + 'LOG_ARCHIVE_DEST,LOG_ARCHIVE_DUPLEX_DEST,LOG_ARCHIVE_FORMAT,' + 'LOG_ARCHIVE_MAX_PROCESSES,LOG_ARCHIVE_MIN_SUCCEED_DEST,' + 'LOG_ARCHIVE_START,LOG_ARCHIVE_TRACE,LOG_BUFFER,LOG_CHECKPOINT_INTERVAL,' + 'LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINTS_TO_ALERT,LOG_FILE_NAME_CONVERT,' + 'LOG_PARALLELISM,LOGFILE,LOGGING,LOGICAL_READS_PER_CALL,' + 'LOGICAL_READS_PER_SESSION,LOGMNR_MAX_PERSISTENT_SESSIONS,MANAGE,MANAGED,' + 'MANAGEMENT,MANUAL,MAP,MASTER,MATCHED,MATERIALIZED,MAX_COMMIT_PROPAGATION_DELAY,' + 'MAX_DISPATCHERS,MAX_DUMP_FILE_SIZE,MAX_ENABLED_ROLES,' + 'MAX_ROLLBACK_SEGMENTS,MAX_SHARED_SERVERS,MAXDATAFILES,MAXEXTENTS,' + 'MAXINSTANCES,MAXLOGFILES,MAXLOGHISTORY,MAXLOGMEMBERS,MAXSIZE,MAXTRANS,' + 'MAXVALUE,MEMBER,MERGE,MINEXTENTS,MINIMIZE,MINIMUM,MINUS,MINVALUE,MODE,' + 'MODIFY,MODULE,MONITORING,MOUNT,MOVE,MOVEMENT,MULTISET,NAMED,NATIONAL,' + 'NESTED,NEVER,NEXT,NLS_CALENDAR,NLS_COMP,NLS_CURRENCY,NLS_DATE_FORMAT,' + 'NLS_DATE_LANGUAGE,NLS_DUAL_CURRENCY,NLS_ISO_CURRENCY,NLS_LANGUAGE,' + 'NLS_LENGTH_SEMANTICS,NLS_NCHAR_CONV_EXCP,NLS_NUMERIC_CHARACTERS,' + 'NLS_TERRITORY,NLS_TIMESTAMP_FORMAT,NLS_TIMESTAMP_TZ_FORMAT,NO,' + 'NOARCHIVELOG,NOAUDIT,NOCACHE,NOCOMPRESS,NOCOPY,NOCYCLE,NOFORCE,' + 'NOLOGGING,NOMAXVALUE,NOMINIMIZE,NOMINVALUE,NOMONITORING,NOMOUNT,NONE,' + 'NOORDER,NORELY,NORESETLOGS,NOREVERSE,NORMAL,NOROWDEPENDENCIES,NOSORT,' + 'NOT,NOTHING,NOVALIDATE,NOWAIT,NULL,O7_DICTIONARY_ACCESSIBILITY,' + 'OBJECT_CACHE_MAX_SIZE_PERCENT,OBJECT_CACHE_OPTIMAL_SIZE,OF,OFFLINE,OID,' + 'OLAP_PAGE_POOL_SIZE,ON,ONLINE,ONLY,OPEN_CURSORS,OPEN_LINKS,' + 'OPEN_LINKS_PER_INSTANCE,OPERATOR,OPTIMAL,OPTIMIZER_DYNAMIC_SAMPLING,' + 'OPTIMIZER_FEATURES_ENABLE,OPTIMIZER_INDEX_CACHING,' + 'OPTIMIZER_INDEX_COST_ADJ,OPTIMIZER_MAX_PERMUTATIONS,OPTIMIZER_MODE,' + 'OPTION,OR,ORACLE_TRACE_COLLECTION_NAME,ORACLE_TRACE_COLLECTION_PATH,' + 'ORACLE_TRACE_COLLECTION_SIZE,ORACLE_TRACE_ENABLE,' + 'ORACLE_TRACE_FACILITY_NAME,ORACLE_TRACE_FACILITY_PATH,ORDER,' + 'OS_AUTHENT_PREFIX,OS_ROLES,OUTER,OUTLINE,OVERFLOW,OWN,PACKAGES,PARALLEL,' + 'PARALLEL_ADAPTIVE_MULTI_USER,PARALLEL_AUTOMATIC_TUNING,' + 'PARALLEL_EXECUTION_MESSAGE_SIZE,PARALLEL_INSTANCE_GROUP,' + 'PARALLEL_MAX_SERVERS,PARALLEL_MIN_PERCENT,PARALLEL_MIN_SERVERS,' + 'PARALLEL_THREADS_PER_CPU,PARAMETERS,PARTITION_VIEW_ENABLED,PARTITIONS,' + 'PASSWORD,PASSWORD_GRACE_TIME,PASSWORD_LIFE_TIME,PASSWORD_LOCK_TIME,' + 'PASSWORD_REUSE_MAX,PASSWORD_REUSE_TIME,PASSWORD_VERIFY_FUNCTION,' + 'PCTFREE,PCTINCREASE,PCTTHRESHOLD,PCTUSED,PCTVERSION,PERCENT,PERMANENT,' + 'PGA_AGGREGATE_TARGET,PIPELINED,PLAN,PLI,PLSQL_COMPILER_FLAGS,' + 'PLSQL_NATIVE_C_COMPILER,PLSQL_NATIVE_LIBRARY_DIR,' + 'PLSQL_NATIVE_LIBRARY_SUBDIR_COUNT,PLSQL_NATIVE_LINKER,' + 'PLSQL_NATIVE_MAKE_FILE_NAME,PLSQL_NATIVE_MAKE_UTILITY,' + 'PLSQL_V2_COMPATIBILITY,POST_TRANSACTION,PRE_PAGE_SGA,PREBUILD,PRECISION,' + 'PRIMARY,PRIOR,PRIVATE_SGA,PRIVILEGES,PROCESSES,PROFILE,PUBLIC,QUERY,' + 'QUERY_REWRITE_ENABLED,QUERY_REWRITE_INTEGRITY,QUIESCE,QUOTA,' + 'RDBMS_SERVER_DN,READ,READ_ONLY_OPEN_DELAYED,REBUILD,RECORDS_PER_BLOCK,' + 'RECOVER,RECOVERABLE,RECOVERY,RECOVERY_PARALLELISM,RECYCLE,RECYCLEBIN,REDUCED,' + 'REFERENCES,REFRESH,REGISTER,RELY,REMOTE_ARCHIVE_ENABLE,' + 'REMOTE_DEPENDENCIES_MODE,REMOTE_LISTENER,REMOTE_LOGIN_PASSWORDFILE,' + 'REMOTE_OS_AUTHENT,REMOTE_OS_ROLES,RENAME,' + 'REPLICATION_DEPENDENCY_TRACKING,RESET,RESETLOGS,RESIZE,RESOLVE,RESOLVER,' + 'RESOURCE,RESOURCE_LIMIT,RESOURCE_MANAGER_PLAN,RESTRICT,RESTRICTED,' + 'RESUMABLE,RESUME,REUSE,REVOKE,REWRITE,RIGHT,RNDS,RNPS,ROLE,ROLES,' + 'ROLLBACK_SEGMENTS,ROW,ROW_LOCKING,ROWDEPENDENCIES,ROWLABEL,ROWNUM,' + 'ROWS,SAMPLE,SCN,SCOPE,SECTION,SEGMENT,SELECT,SELECTIVITY,SEQUENCE,' + 'SERIAL_REUSE,SERVICE_NAMES,SESSION,SESSION_CACHED_CURSORS,' + 'SESSION_MAX_OPEN_FILES,SESSIONS,SESSIONS_PER_USER,SGA_MAX_SIZE,' + 'SHADOW_CORE_DUMP,SHARE,SHARED,SHARED_MEMORY_ADDRESS,SHARED_POOL,' + 'SHARED_POOL_RESERVED_SIZE,SHARED_POOL_SIZE,SHARED_SERVER_SESSIONS,' + 'SHARED_SERVERS,SHRINK,SIZE,SNAPSHOT,SOME,SORT,SORT_AREA_RETAINED_SIZE,' + 'SORT_AREA_SIZE,SOURCE,SPECIFICATION,SPECIFIED,SPFILE,SPLIT,SQL_TRACE,' + 'SQL92_SECURITY,STANDBY,STANDBY_ARCHIVE_DEST,STANDBY_FILE_MANAGEMENT,' + 'STAR_TRANSFORMATION_ENABLED,START,START_DATE,STATIC,STATISTICS,' + 'STATISTICS_LEVEL,STOP,STORAGE,STRUCTURE,SUBPARTITION,SUBPARTITIONS,' + 'SUCCESSFUL,SUSPEND,SWITCH,SYNONYM,SYSTEM,TABLE,TABLESPACE,' + 'TAPE_ASYNCH_IO,TEMPFILE,TEMPORARY,THE,THEN,THREAD,THROUGH,TIME,' + 'TIMED_OS_STATISTICS,TIMED_STATISTICS,TIMEOUT,TO,TRACE_ENABLED,' + 'TRACEFILE_IDENTIFIER,TRACING,TRANSACTION,TRANSACTION_AUDITING,' + 'TRANSACTIONS,TRANSACTIONS_PER_ROLLBACK_SEGMENT,TRIGGER,TRUNCATE,TRUST,' + 'TYPES,UNARCHIVED,UNDER,UNDO,UNDO_MANAGEMENT,UNDO_RETENTION,' + 'UNDO_SUPPRESS_ERRORS,UNDO_TABLESPACE,UNIFORM,UNION,UNIQUE,UNLIMITED,' + 'UNLOCK,UNQUIESCE,UNRECOVERABLE,UNTIL,UNUSABLE,UNUSED,UPDATE,USAGE,' + 'USE_INDIRECT_DATA_BUFFERS,USER_DUMP_DEST,VALIDATE,VALIDATION,VALUES,' + 'VARGRAPHIC,VARRAY,VIEW,WHERE,WITH,WITHOUT,WNDS,WNPS,' + 'WORKAREA_SIZE_POLICY'; //---Postgresql----------------------------------------------------------------- //Postgresql Keywords PostgresKW: UnicodeString = 'IF,LOOP,ABORT,ABSOLUTE,ACCESS,ACTION,ADA,ADD,ADMIN,AFTER,AGGREGATE,ALIAS' + ',ALLOCATE,ALTER,ANALYSE,ANALYZE,AND,ARE,AS,ASC,ASENSITIVE' + ',ASSERTION,ASSIGNMENT,ASYMMETRIC,AT,ATOMIC,AUTHORIZATION,BACKWARD' + ',BEFORE,BEGIN,BETWEEN' + ',BOTH,BREADTH,BY,C,CACHE,CALL,CALLED,CARDINALITY,CASCADE,CASCADED,CASE' + ',CAST,CATALOG,CATALOG_NAME,CHAIN,CHARACTERISTICS' + ',CHARACTER_SET_CATALOG,CHARACTER_SET_NAME,CHARACTER_SET_SCHEMA' + ',CHECK,CHECKED,CHECKPOINT,CLASS,CLASS_ORIGIN,CLOB,CLOSE,CLUSTER,COBOL,COLLATE' + ',COLLATION,COLLATION_CATALOG,COLLATION_NAME,COLLATION_SCHEMA,COLUMN,COLUMN_NAME' + ',COMMAND_Function,COMMAND_Function_CODE,COMMENT,COMMIT,COMMITTED,COMPLETION' + ',CONDITION_NUMBER,CONNECT,CONNECTION,CONNECTION_NAME,CONSTRAINT,CONSTRAINTS' + ',CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONSTRUCTOR,CONTAINS' + ',CONTINUE,CONVERSION,COPY,CORRESPONDING,CREATE,CREATEDB,CREATEUSER' + ',CROSS,CUBE,CURRENT,CURRENT_PATH,CURRENT_ROLE' + ',CURSOR,CURSOR_NAME,CYCLE,DATA,DATABASE,DATETIME_INTERVAL_CODE' + ',DATETIME_INTERVAL_PRECISION,DAY,DEALLOCATE,DEC,DECLARE,DEFAULT,DEFERRABLE' + ',DEFERRED,DEFINED,DEFINER,DELETE,DELIMITER,DELIMITERS,DEPTH,DEREF,DESC,DESCRIBE' + ',DESCRIPTOR,DESTROY,DESTRUCTOR,DETERMINISTIC,DIAGNOSTICS,DICTIONARY,DISCONNECT' + ',DISPATCH,DISTINCT,DO,DOMAIN,DROP,DYNAMIC,DYNAMIC_Function,DYNAMIC_Function_CODE' + ',EACH,ELSE,ELSIF,ELSEIF,ENCODING,ENCRYPTED,END,EQUALS,ESCAPE,EXCEPT,EXCEPTION' + ',EXCLUSIVE,EXEC,EXECUTE,EXISTING,EXPLAIN,EXTERNAL,FALSE,FETCH' + ',FINAL,FIRST,FOR,FORCE,FOREIGN,FORTRAN,FORWARD,FOUND,FREE,FREEZE,FROM' + ',FULL,Function,G,GENERAL,GENERATED,GET,GLOBAL,GO,GOTO,GRANT,GRANTED,GROUP' + ',GROUPING,HANDLER,HAVING,HIERARCHY,HOLD,HOUR,IDENTITY,IGNORE,ILIKE' + ',IMMEDIATE,IMMUTABLE,IMPLEMENTATION,IMPLICIT,INCREMENT,INDEX,INDICATOR' + ',INFIX,INHERITS,INITIALIZE,INITIALLY,INNER,INOUT,INPUT,INSENSITIVE,INSERT' + ',INSTANCE,INSTANTIABLE,INSTEAD,INT,INTERSECT,INTO,INVOKER' + ',IS,ISNULL,ISOLATION,ITERATE,JOIN,K,KEY,KEY_MEMBER,KEY_TYPE,LANCOMPILER,LANGUAGE' + ',LARGE,LAST,LATERAL,LEADING,LEFT,LESS,LEVEL,LIKE,LIMIT,LISTEN,LOAD,LOCAL' + ' LOCATION,LOCATOR,LOCK,M,MAP,MATCH,MAXVALUE,MESSAGE_LENGTH' + ',MESSAGE_OCTET_LENGTH,MESSAGE_TEXT,METHOD,MINUTE,MINVALUE,MODE,MODIFIES' + ',MODIFY,MODULE,MONTH,MORE,MOVE,MUMPS,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NCLOB' + ',NEW,NEXT,NO,NOCREATEDB,NOCREATEUSER,NONE,NOT,NOTHING,NOTIFY,NOTNULL,NULL,NULLABLE' + ',NUMBER,OBJECT,OF,OFF,OFFSET,OIDS,OLD,ON,ONLY,OPEN' + ',OPERATION,Operator,OPTION,OPTIONS,OR,ORDER,ORDINALITY,OUT,OUTER,OUTPUT,OVERLAPS' + ',OVERRIDING,OWNER,PAD,PARAMETER,PARAMETERS,PARAMETER_MODE,PARAMETER_NAME,PARAMETER_ORDINAL_POSITION' + ',PARAMETER_SPECIFIC_CATALOG,PARAMETER_SPECIFIC_NAME,PARAMETER_SPECIFIC_SCHEMA,PARTIAL,PASCAL,PASSWORD' + ',PENDANT,PLACING,PLI,POSTFIX,PRECISION,PREFIX,PREORDER,PREPARE,PRESERVE,PRIMARY' + ',PRIOR,PRIVILEGES,PROCEDURAL,PROCEDURE,PUBLIC,READ,READS,RECHECK,RECURSIVE,REF,REFERENCES' + ',REFERENCING,REINDEX,RELATIVE,RENAME ,REPEATABLE,RESET,RESTRICT,RESULT,RETURN,RETURNED_LENGTH' + ',RETURNED_OCTET_LENGTH,RETURNED_SQLSTATE,RETURNS,REVOKE,RIGHT,ROLE,ROLLBACK,ROLLUP,ROUTINE,ROUTINE_CATALOG' + ',ROUTINE_NAME,ROUTINE_SCHEMA,ROW,ROWS,ROW_COUNT,RULE,SAVEPOINT,SCALE,SCHEMA,SCHEMA_NAME' + ',SCOPE,SCROLL,SEARCH,SECOND,SECTION,SECURITY,SELECT,SELF,SENSITIVE,SEQUENCE,SERIALIZABLE,SERVER_NAME' + ',SESSION,SET,SETOF,SETS,SHARE,SHOW,SIMILAR,SIMPLE,SIZE,SOURCE,SPACE' + ',SPECIFIC,SPECIFICTYPE,SPECIFIC_NAME,SQLCODE,SQLERROR,SQLEXCEPTION,SQLSTATE,SQLWARNING' + ',STABLE,START,STATE,STATEMENT,STATIC,STATISTICS,STDIN,STDOUT,STORAGE,STRICT,STRUCTURE' + ',STYLE,SUBCLASS_ORIGIN,SUBLIST,SYMMETRIC,SYSID,SYSTEM,SYSTEM_USER,TABLE' + ',TABLE_NAME,TEMP,TEMPLATE,TEMPORARY,TERMINATE,THAN,THEN,TIMEZONE_HOUR' + ',TIMEZONE_MINUTE,TO,TOAST,TRAILING,TRANSACTION,TRANSACTIONS_COMMITTED,TRANSACTIONS_ROLLED_BACK' + ',TRANSACTION_ACTIVE,TRANSFORM,TRANSFORMS,TRANSLATION,TREAT,TRIGGER_CATALOG' + ',TRIGGER_NAME,TRIGGER_SCHEMA,TRUE,TRUNCATE,TRUSTED,TYPE,UNCOMMITTED,UNDER,UNENCRYPTED,UNION'+ ',UNIQUE,UNKNOWN,UNLISTEN,UNNAMED,UNNEST,UNTIL,UPDATE,USAGE,USER_DEFINED_TYPE_CATALOG' + ',USER_DEFINED_TYPE_NAME,USER_DEFINED_TYPE_SCHEMA,USING,VACUUM,VALID,VALIDATOR,VALUE,VALUES' + ',VARIABLE,VARYING,VERBOSE,VIEW,VOLATILE,WHEN,WHENEVER,WHERE,WITH,WITHOUT,WORK,WRITE,YEAR,ZONE'; //Postgresql Functions PostgresFunctions: UnicodeString = 'abs,cbrt,ceil,ceiling,degrees,exp,floor,ln,log,mod,pi,power,radians,random,'+ 'round,setseed,sign,sqrt,trunc,width_bucket,acos,asin,atan,atan2,cos,cot,'+ 'sin,tan,bit_length,char_length,character_length,convert,lower,octet_length,'+ 'overlay,position,substring,trim,upper,ascii,btrim,chr,decode,'+ 'encode,initcap,length,lpad,ltrim,md5,pg_client_encoding,quote_ident,quote_literal,'+ 'replace,rpad,rtrim,split_part,strpos,substr,to_ascii,to_hex,translate,get_byte,'+ 'set_byte,get_bit,set_bit,to_char,to_date,'+ 'to_timestamp,to_number,age,date_part,date_trunc,extract,now,'+ 'timeofday,isfinite,area,box_intersect,center,diameter,height,isclosed,isopen,'+ 'npoints,pclose,popen,radius,width,'+ 'broadcast,'+ 'host,masklen,set_masklen,netmask,hostmask,network,abbrev,family,nextval,'+ 'currval,setval,coalesce,nullif,array_cat ,array_append ,array_prepend ,array_dims,'+ 'array_lower ,array_upper ,array_to_string ,string_to_array ,avg,bit_and,bit_or,bool_and,'+ 'bool_or,count,every,max,min,stddev,sum,variance,exists ,in ,some,'+ 'all ,generate_series,current_database,current_schema,'+ 'current_schemas,,inet_client_addr,inet_client_port,inet_server_addr,inet_server_port,'+ 'version,has_table_privilege,has_database_privilege,'+ 'has_function_privilege,has_language_privilege,'+ 'has_schema_privilege,has_tablespace_privilege,'+ 'pg_table_is_visible,pg_type_is_visible,pg_function_is_visible,pg_operator_is_visible,'+ 'pg_opclass_is_visible,pg_conversion_is_visible,format_type,pg_get_viewdef,'+ 'pg_get_ruledef,pg_get_indexdef,'+ 'pg_get_triggerdef,pg_get_constraintdef,pg_get_expr,'+ 'pg_get_userbyid,pg_get_serial_sequence,pg_tablespace_databases,obj_description,'+ 'col_description,current_setting,set_config,pg_cancel_backend,pg_start_backup,pg_stop_backup,'+ 'current_user,current_date,current_time,current_timestamp,localtime,localtimestamp,session_user,user'; //Postgresql Types PostgresTypes: UnicodeString = 'smallint,integer,bigint,decimal,numeric,real,double,serial,bigserial,'+ 'character,varchar,char,text,bytea,timestamp, interval,date,'+ 'time,boolean,point,line,lseg,box,path,polygon,circle,cidr,inet,'+ 'macaddr,BIT,bitvar,ARRAY,oid,regproc,regprocedure,regoper,regoperator,regclass,'+ 'regtype,any,anyarray,anyelement,cstring,internal,language_handler,record,'+ 'trigger,void,opaque,refcursor,binary,blob,int4,int2,int8,float,float4,float8'; //Postgresql Exceptions PostgresExceptions: UnicodeString = '$BODY$,SUCCESSFUL_COMPLETION,WARNING,DYNAMIC_RESULT_SETS_RETURNED,IMPLICIT_ZERO_BIT_PADDING,NULL_VALUE_ELIMINATED_IN_SET_FUNCTION,'+ 'PRIVILEGE_NOT_GRANTED,PRIVILEGE_NOT_REVOKED,STRING_DATA_RIGHT_TRUNCATION,DEPRECATED_FEATURE,NO_DATA,NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED,'+ 'SQL_STATEMENT_NOT_YET_COMPLETE,CONNECTION_EXCEPTION,CONNECTION_DOES_NOT_EXIST,CONNECTION_FAILURE,SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION,'+ 'SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION,TRANSACTION_RESOLUTION_UNKNOWN,PROTOCOL_VIOLATION,TRIGGERED_ACTION_EXCEPTION,'+ 'FEATURE_NOT_SUPPORTED,INVALID_TRANSACTION_INITIATION,LOCATOR_EXCEPTION,INVALID_LOCATOR_SPECIFICATION,INVALID_GRANTOR,INVALID_GRANT_OPERATION,'+ 'INVALID_ROLE_SPECIFICATION,CARDINALITY_VIOLATION,DATA_EXCEPTION,ARRAY_SUBSCRIPT_ERROR,CHARACTER_NOT_IN_REPERTOIRE,DATETIME_FIELD_OVERFLOW,'+ 'DIVISION_BY_ZERO,ERROR_IN_ASSIGNMENT,ESCAPE_CHARACTER_CONFLICT,INDICATOR_OVERFLOW,INTERVAL_FIELD_OVERFLOW,INVALID_ARGUMENT_FOR_LOGARITHM,'+ 'INVALID_ARGUMENT_FOR_POWER_FUNCTION,INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION,INVALID_CHARACTER_VALUE_FOR_CAST,INVALID_DATETIME_FORMAT,'+ 'INVALID_ESCAPE_CHARACTER,INVALID_ESCAPE_OCTET,INVALID_ESCAPE_SEQUENCE,INVALID_INDICATOR_PARAMETER_VALUE,INVALID_LIMIT_VALUE,'+ 'INVALID_PARAMETER_VALUE,INVALID_REGULAR_EXPRESSION,INVALID_TIME_ZONE_DISPLACEMENT_VALUE,INVALID_USE_OF_ESCAPE_CHARACTER,'+ 'MOST_SPECIFIC_TYPE_MISMATCH,NULL_VALUE_NOT_ALLOWED,NULL_VALUE_NO_INDICATOR_PARAMETER,NUMERIC_VALUE_OUT_OF_RANGE,STRING_DATA_LENGTH_MISMATCH,'+ 'SUBSTRING_ERROR,TRIM_ERROR,UNTERMINATED_C_STRING,ZERO_LENGTH_CHARACTER_STRING,FLOATING_POINT_EXCEPTION,'+ 'INVALID_TEXT_REPRESENTATION,INVALID_BINARY_REPRESENTATION,BAD_COPY_FILE_FORMAT,UNTRANSLATABLE_CHARACTER,INTEGRITY_CONSTRAINT_VIOLATION,'+ 'RESTRICT_VIOLATION,NOT_NULL_VIOLATION,FOREIGN_KEY_VIOLATION,UNIQUE_VIOLATION,CHECK_VIOLATION,INVALID_CURSOR_STATE,INVALID_TRANSACTION_STATE,'+ 'ACTIVE_SQL_TRANSACTION,BRANCH_TRANSACTION_ALREADY_ACTIVE,HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL,INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION,'+ 'INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION,NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION,READ_ONLY_SQL_TRANSACTION,'+ 'SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED,NO_ACTIVE_SQL_TRANSACTION,IN_FAILED_SQL_TRANSACTION,INVALID_SQL_STATEMENT_NAME,TRIGGERED_DATA_CHANGE_VIOLATION,'+ 'INVALID_AUTHORIZATION_SPECIFICATION,DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST,DEPENDENT_OBJECTS_STILL_EXIST,INVALID_TRANSACTION_TERMINATION,'+ 'SQL_ROUTINE_EXCEPTION,FUNCTION_EXECUTED_NO_RETURN_STATEMENT,MODIFYING_SQL_DATA_NOT_PERMITTED,PROHIBITED_SQL_STATEMENT_ATTEMPTED,READING_SQL_DATA_NOT_PERMITTED,'+ 'INVALID_CURSOR_NAME,EXTERNAL_ROUTINE_EXCEPTION,CONTAINING_SQL_NOT_PERMITTED,'+ 'EXTERNAL_ROUTINE_INVOCATION_EXCEPTION,INVALID_SQLSTATE_RETURNED,TRIGGER_PROTOCOL_VIOLATED,'+ 'SRF_PROTOCOL_VIOLATED,SAVEPOINT_EXCEPTION,INVALID_SAVEPOINT_SPECIFICATION,INVALID_CATALOG_NAME,INVALID_SCHEMA_NAME,TRANSACTION_ROLLBACK,'+ 'TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION,SERIALIZATION_FAILURE,STATEMENT_COMPLETION_UNKNOWN,DEADLOCK_DETECTED,SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION,'+ 'SYNTAX_ERROR,INSUFFICIENT_PRIVILEGE,CANNOT_COERCE,GROUPING_ERROR,INVALID_FOREIGN_KEY,INVALID_NAME,NAME_TOO_LONG,RESERVED_NAME,DATATYPE_MISMATCH,'+ 'INDETERMINATE_DATATYPE,WRONG_OBJECT_TYPE,UNDEFINED_COLUMN,UNDEFINED_FUNCTION,UNDEFINED_TABLE,UNDEFINED_PARAMETER,UNDEFINED_OBJECT,'+ 'DUPLICATE_COLUMN,DUPLICATE_CURSOR,DUPLICATE_DATABASE,DUPLICATE_FUNCTION,DUPLICATE_PREPARED_STATEMENT,DUPLICATE_SCHEMA,DUPLICATE_TABLE,'+ 'DUPLICATE_ALIAS,DUPLICATE_OBJECT,AMBIGUOUS_COLUMN,AMBIGUOUS_FUNCTION,AMBIGUOUS_PARAMETER,AMBIGUOUS_ALIAS,INVALID_COLUMN_REFERENCE,'+ 'INVALID_COLUMN_DEFINITION,INVALID_CURSOR_DEFINITION,INVALID_DATABASE_DEFINITION,INVALID_FUNCTION_DEFINITION,INVALID_PREPARED_STATEMENT_DEFINITION,'+ 'INVALID_SCHEMA_DEFINITION,INVALID_TABLE_DEFINITION,INVALID_OBJECT_DEFINITION,WITH_CHECK_OPTION_VIOLATION,INSUFFICIENT_RESOURCES,'+ 'DISK_FULL,OUT_OF_MEMORY,TOO_MANY_CONNECTIONS,PROGRAM_LIMIT_EXCEEDED,STATEMENT_TOO_COMPLEX,TOO_MANY_COLUMNS,TOO_MANY_ARGUMENTS,'+ 'OBJECT_NOT_IN_PREREQUISITE_STATE,OBJECT_IN_USE,CANT_CHANGE_RUNTIME_PARAM,LOCK_NOT_AVAILABLE,OPERATOR_INTERVENTION,QUERY_CANCELED,'+ 'ADMIN_SHUTDOWN,CRASH_SHUTDOWN,CANNOT_CONNECT_NOW,IO_ERROR,UNDEFINED_FILE,DUPLICATE_FILE,CONFIG_FILE_ERROR,LOCK_FILE_EXISTS,'+ 'PLPGSQL_ERROR,RAISE_EXCEPTION,INTERNAL_ERROR,DATA_CORRUPTED,INDEX_CORRUPTED'; // PLSQL keywords OraclePLSQLKW: UnicodeString = 'ABORT,ACCEPT,AFTER,ARRAY,ARRAYLEN,ASSERT,ASSIGN,AT,AUTHORIZATION,' + 'AUTONOMOUS_TRANSACTION,BASE_TABLE,BEGIN,BODY,BULK,BULK_ROWCOUNT,CALL,' + 'CALLING,CASE,CHAR_BASE,CHARSETFORM,CHARSETID,CLOSE,CLUSTERS,COLAUTH,' + 'COLLECT,COMMIT,CONNECTION,CONSTANT,COOKIE,COOKIE_TABLE,CRASH,CURRVAL,' + 'CURSOR,DATA_BASE,DATABASE,DBA,DEBUGOFF,DEBUGON,DECLARE,DEFINITION,' + 'DELAY,DELTA,DEQUEUE_OPTIONS_T,DETERMINISTIC,DIGITS,DISPOSE,DO,EACH,' + 'ELSIF,END,ENQUEUE_OPTIONS_T,ENTRY,EXCEPTION,EXCEPTION_INIT,EXIT,' + 'EXTERNAL,FALSE,FETCH,FIXED,FORALL,FORM,FOUND,FUNCTION,GENERIC,GOTO,IF,' + 'INDEXES,INDICATOR,INSTEAD,INTERFACE,ISOPEN,LANGUAGE,LCR$_DDL_RECORD,' + 'LCR$_ROW_LIST,LCR$_ROW_RECORD,LCR$_ROW_UNIT,LIMITED,LOOP,MAXLEN,' + 'MESSAGE_PROPERTIES_T,MGW_BASIC_MSG_T,MGW_MQSERIES_PROPERTIES,' + 'MGW_NAME_TYPE_ARRAY_T,MGW_NAME_VALUE_T,MGW_PROPERTIES,MGW_PROPERTY,' + 'MGW_RAW_VALUE_T,MGW_TEXT_VALUE_T,NAME,NEW,NEXTVAL,NOTFOUND,' + 'NUMBER_BASE,OLD,OPEN,OUT,PACKAGE,PARALLEL_ENABLE,PARTITION,PASCAL,' + 'PRAGMA,PRIVATE,PROCEDURE,RAISE,RAISE_APPLICATION_ERROR,RANGE,RE$ATTRIBUTE_VALUE,' + 'RE$ATTRIBUTE_VALUE_LIST,RE$COLUMN_VALUE,RE$COLUMN_VALUE_LIST,' + 'RE$NAME_ARRAY,RE$NV_ARRAY,RE$NV_LIST,RE$NV_NODE,RE$RULE_HIT,' + 'RE$RULE_HIT_LIST,RE$TABLE_ALIAS,RE$TABLE_ALIAS_LIST,' + 'RE$TABLE_VALUE,RE$TABLE_VALUE_LIST,RE$VARIABLE_TYPE,' + 'RE$VARIABLE_TYPE_LIST,RE$VARIABLE_VALUE,RE$VARIABLE_VALUE_LIST,RECORD,' + 'REF,REFERENCING,RELEASE,REMR,REQ,RESP,RESTRICT_REFERENCES,RETURN,' + 'REVERSE,ROLLBACK,ROWCOUNT,ROWTYPE,RUNTIME_INFO,SAVEPOINT,SCHEMA,' + 'SELF,SEPARATE,SERIALLY_REUSABLE,SPACE,SQL,SQLERROR,STATEMENT,STRUCT,' + 'SUBTYPE,TABAUTH,TABLES,TASK,TDO,TERMINATE,TRUE,TYPE,USE,VARYING,VIEWS,' + 'WHEN,WHILE,WORK,WRITE,XOR'; // Oracle data types OracleTypes: UnicodeString = 'ANYDATA,ANYDATASET,ANYTYPE,BFILE,BINARY_DOUBLE,BINARY_FLOAT,BINARY_INTEGER,' + 'BLOB,BOOLEAN,CHAR,CLOB,DATE,DAY,DBURITYPE,DEC,DECIMAL,DOUBLE,FLOAT,' + 'HTTPURITYPE,IDENTITY,INTEGER,INTERVAL,LONG,MLSLABEL,MONTH,NATURAL,NATURALN,NCHAR,' + 'NCLOB,NUMBER,NUMERIC,NVARCHAR2,PLS_INTEGER,POSITIVE,POSITIVEN,RAW,REAL,' + 'ROWID,SECOND,SMALLINT,TIMESTAMP,URITYPE,UROWID,VARCHAR,VARCHAR2,XDBURITYPE,' + 'XMLDATA,XMLTYPE,YEAR,ZONE'; // Oracle built in exceptions OracleExceptions: UnicodeString = 'ACCESS_INTO_NULL,CASE_NOT_FOUND,COLLECTION_IS_NULL,CURSOR_ALREADY_OPEN,' + 'DUP_VAL_ON_INDEX,INVALID_CURSOR,INVALID_NUMBER,LOGIN_DENIED,' + 'NO_DATA_FOUND,NOT_LOGGED_ON,OTHERS,PROGRAM_ERROR,ROWTYPE_MISMATCH,' + 'SELF_IS_NULL,STORAGE_ERROR,SUBSCRIPT_BEYOND_COUNT,SUBSCRIPT_OUTSIDE_LIMIT,' + 'SYS_INVALID_ROWID,TIMEOUT_ON_RESOURCE,TOO_MANY_ROWS,VALUE_ERROR,' + 'ZERO_DIVIDE'; // Oracle built in functions OracleFunctions: UnicodeString = 'ABS,ACOS,ADD_MONTHS,AGGREGATE,ANALYTIC,ASCII,ASCIISTR,ASIN,ATAN,ATAN2,' + 'AVERAGE,AVG,BASE64_DECODE,BASE64_ENCODE,BEGIN_REQUEST,BFILENAME,' + 'BIN_TO_NUM,BIT_AND,BIT_COMPLEMENT,BIT_OR,BIT_XOR,BITAND,' + 'CAST_FROM_BINARY_INTEGER,CAST_FROM_NUMBER,CAST_TO_BINARY_INTEGER,' + 'CAST_TO_NUMBER,CAST_TO_RAW,CAST_TO_VARCHAR2,CEIL,CHARTOROWID,CHR,' + 'COLUMN_PRESENT,COMPARE,COMPARE_TEMPLATES,COMPOSE,CONCAT,CONVERSION,' + 'CONVERT,CONVERT_ANYDATA_TO_LCR_DDL,CONVERT_ANYDATA_TO_LCR_ROW,' + 'COPIES,COPY_TEMPLATE,CORR,COS,COSH,COUNT,COVAR_POP,COVAR_SAMP,' + 'CREATE_OBJECT_FROM_EXISTING,CREATE_PIPE,CREATE_REFRESH_TEMPLATE,' + 'CREATE_TEMPLATE_OBJECT,CREATE_TEMPLATE_PARM,CREATE_USER_AUTHORIZATION,' + 'CREATE_USER_PARM_VALUE,CRLF,CUBE,CUME_DIST,CURRENT_DATE,' + 'CURRENT_INSTANCE,CURRENT_TIMESTAMP,DATA_BLOCK_ADDRESS_BLOCK,' + 'DATA_BLOCK_ADDRESS_FILE,DBTIMEZONE,DECODE,DECOMPOSE,DELETE_BREAKPOINT,' + 'DELETE_OER_BREAKPOINT,DENSE_RANK,DEPTH,DEREF,DISABLE_BREAKPOINT,' + 'DISABLED,DISPLAY,DROP_ALL,DROP_ELEMENT,DROP_FILE,DUMP,' + 'EMPTY_BLOB,EMPTY_CLOB,ENABLE_BREAKPOINT,EQUALS_PATH,ESTIMATE_CPU_UNITS,' + 'EXCLUDE_PUSH,EXECUTE_AND_FETCH,EXECUTE_NON_QUERY,EXISTSNODE,EXP,EXTEND,' + 'EXTRACT,EXTRACTVALUE,FCOPY,FETCH_ROW,FETCH_ROWS,FGETPOS,FILEEXISTS,' + 'FILEISOPEN,FIRST,FIRST_VALUE,FLOOR,FLUSH_DATA,FOPEN,FOPEN_NCHAR,' + 'FORMAT_CALL_STACK,FORMAT_ERROR_STACK,FREMOVE,FRENAME,FROM_REMOTE,FSEEK,' + 'GET_ARG_FORM,GET_ARG_TYPE,GET_COOKIE_COUNT,GET_COOKIES,' + 'GET_DETAILED_SQLCODE,GET_DETAILED_SQLERRM,GET_ERROR_MESSAGE,' + 'GET_HASH_VALUE,GET_HEADER_COUNT,GET_INDEXES,GET_INFORMATION,' + 'GET_OBJECT_NULL_VECTOR_ARG,GET_PARAMETER_VALUE,' + 'GET_PERSISTENT_CONN_COUNT,GET_RAW,GET_RESPONSE,GET_RUNTIME_INFO,' + 'GET_RUNTIME_PARM_ID,GET_SESSION_TIMEOUT,GET_SYSTEM_CHANGE_NUMBER,' + 'GET_TAG,GET_TIME,GET_TIMEOUT,GET_TIMEOUT_BEHAVIOR,GET_VALUE,' + 'GETCHUNKSIZE,GETLENGTH,GLB,GREATEST,GREATEST_LB,GROUP_ID,GROUPING,' + 'GROUPING_ID,HEXTORAW,I_AM_A_REFRESH,INITCAP,INITIALIZE,' + 'INSTANTIATE_OFFLINE,INSTANTIATE_ONLINE,INSTR,INSTRB,' + 'INTERNAL_VERSION_CHECK,IS_CLUSTER_DATABASE,IS_LOCATOR,IS_OPEN,' + 'IS_ROLE_ENABLED,IS_SESSION_ALIVE,IS_TRIGGER_FIRE_ONCE,ISTEMPORARY,LAG,' + 'LAST,LAST_DAY,LAST_ERROR_POSITION,LAST_ROW_COUNT,LAST_ROW_ID,' + 'LAST_SQL__CODE,LAST_VALUE,LEAD,LEAST,LEAST_LB,LENGTH,LENGTHB,LINEAR,LN,' + 'LOCAL_TRANSACTION_ID,LOCALTIMESTAMP,LOG,LOWER,LPAD,LTRIM,LUB,' + 'MAKE_DATA_BLOCK_ADDRESS,MAKE_REF,MAP_ALL,MAP_ELEMENT,MAP_FILE,' + 'MAP_OBJECT,MAX,MIN,MINE_VALUE,MISCELLANEOUS,MOD,MONTHS_BETWEEN,NCHR,' + 'NEW_TIME,NEXT_DAY,NEXT_ITEM_TYPE,NLS_CHARSET_DECL_LEN,NLS_CHARSET_ID,' + 'NLS_CHARSET_NAME,NLS_INITCAP,NLS_LOWER,NLS_SORT,NLS_UPPER,NLSSORT,NTILE,' + 'NULLIF,NUMTODSINTERVAL,NUMTOYMINTERVAL,NVARRAY_FIND_NAME,' + 'NVARRAY_FIND_NAME_TYPE,NVARRAY_GET,NVARRAY_GET_BOOLEAN,NVARRAY_GET_BYTE,' + 'NVARRAY_GET_DATE,NVARRAY_GET_DOUBLE,NVARRAY_GET_FLOAT,' + 'NVARRAY_GET_INTEGER,NVARRAY_GET_LONG,NVARRAY_GET_RAW,NVARRAY_GET_SHORT,' + 'NVARRAY_GET_TEXT,NVL,NVL2,OBJECT,OPEN_CURSOR,OVER,OVERLAY,PATH,' + 'PAUSE_PROFILER,PERCENT_RANK,PERCENTILE_CONT,PERCENTILE_DISC,PMARKER,' + 'PORT_STRING,POWER,PURGE,PUSH,PUT_RAW,QUOTED_PRINTABLE_DECODE,' + 'QUOTED_PRINTABLE_ENCODE,RANDOM,RANK,RATIO_TO_REPORT,RATION_TO_REPORT,' + 'RAWTOHEX,RAWTONHEX,RECEIVE_MESSAGE,REFERENCE,REFTOHEX,REGR_AVGX,' + 'REGR_AVGY,REGR_COUNT,REGR_INTERCEPT,REGR_R2,REGR_SLOPE,REGR_SXX,' + 'REGR_SXY,REGR_SYY,REGRESSION,REMOVE_PIPE,REPLACE,REPLICATION_IS_ON,' + 'REQUEST,REQUEST_PIECES,RESTORE,RESUME_PROFILER,RETURNING,ROLLUP,ROUND,' + 'ROW_NUMBER,ROWID_BLOCK_NUMBER,ROWID_CREATE,ROWID_OBJECT,' + 'ROWID_RELATIVE_FNO,ROWID_ROW_NUMBER,ROWID_TO_ABSOLUTE_FNO,' + 'ROWID_TO_EXTENDED,ROWID_TO_RESTRICTED,ROWID_TYPE,ROWID_VERIFY,' + 'ROWIDTOCHAR,ROWIDTONCHAR,RPAD,RTRIM,SEND_MESSAGE,SESSIONTIMEZONE,' + 'SET_BREAKPOINT,SET_OER_BREAKPOINT,SET_TIMEOUT,SET_VALUE,SIGN,SIN,SINH,' + 'SOUNDEX,SPACE_ERROR_INFO,SQLCODE,SQLERRM,SQRT,START_PROFILER,STDDEV,' + 'STDDEV_POP,STDDEV_SAMP,STDDEVP,STDDEVS,STEP_ID,STOP_PROFILER,SUBSTR,' + 'SUBSTRB,SUM,SYNCHRONIZE,SYS_CONNECT_BY_PATH,SYS_CONTEXT,SYS_DBURIGEN,' + 'SYS_EXTRACT_UTC,SYS_GUID,SYS_TYPEID,SYS_XMLAGG,SYS_XMLGEN,SYSDATE,' + 'SYSTIMESTAMP,TAN,TANH,TO_CHAR,TO_CLOB,TO_DATE,TO_DSINTERVAL,TO_LABEL,' + 'TO_LOB,TO_MULTI_BYTE,TO_NCHAR,TO_NCLOB,TO_NUMBER,TO_SINGLE_BYTE,' + 'TO_TIMESTAMP,TO_TIMESTAMP_TZ,TO_YMINTERVAL,TRANSLATE,TRANSLITERATE,' + 'TREAT,TRIM,TRUNC,TZ_OFFSET,UID,UNDER_PATH,UNESCAPE,UNIQUE_SESSION_ID,' + 'UNIQUE_SESSION_NAME,UNISTR,UPDATEXML,UPPER,USER,USERENV,USING,UUDECODE,' + 'UUENCODE,VALUE,VAR_POP,VAR_SAMP,VARIANCE,VARP,VARS,VSIZE,WIDTH_BUCKET,' + 'XMLAGG,XMLCOLATTVAL,XMLCONCAT,XMLELEMENT,XMLFOREST,XMLSEQUENCE,' + 'XMLTRANSFORM,XRANGE'; OracleDefaultPackages: UnicodeString = 'CTX_ADM,CTX_CLS,CTX_DDL,CTX_DOC,CTX_OUTPUT,CTX_QUERY,CTX_REPORT,CTX_THES,CTX_ULEXER,' + 'DBMS_ADVANCED_REWRITE,DBMS_ADVISOR,DBMS_ALERT,DBMS_APPLICATION_INFO,' + 'DBMS_APPLY_ADM,DBMS_AQ,DBMS_AQ_EXP_HISTORY_TABLES,DBMS_AQ_EXP_INDEX_TABLES,' + 'DBMS_AQ_EXP_QUEUE_TABLES,DBMS_AQ_EXP_QUEUES,' + 'DBMS_AQ_EXP_SUBSCRIBER_TABLES,DBMS_AQ_EXP_TIMEMGR_TABLES,' + 'DBMS_AQ_EXP_ZECURITY,DBMS_AQ_IMP_INTERNAL,DBMS_AQ_IMP_ZECURITY,' + 'DBMS_AQ_IMPORT_INTERNAL,DBMS_AQ_SYS_EXP_ACTIONS,' + 'DBMS_AQ_SYS_EXP_INTERNAL,DBMS_AQ_SYS_IMP_INTERNAL,DBMS_AQADM,' + 'DBMS_AQADM_SYS,DBMS_AQADM_SYSCALLS,DBMS_AQELM,DBMS_AQIN,' + 'DBMS_AQJMS,DBMS_ASSERT,DBMS_AUTO_TASK_ADMIN,DBMS_AW_STATS,DBMS_BACKUP_RESTORE,' + 'DBMS_CAPTURE_ADM,DBMS_CDC_PUBLISH,DBMS_CDC_SUBSCRIBE,DBMS_COMPARISON,' + 'DBMS_CONNECTION_POOL,DBMS_CQ_NOTIFICATION,DBMS_CRYPTO,DBMS_CSX_ADMIN,' + 'DBMS_CUBE,DBMS_CUBE_ADVISE,DBMS_DATA_MINING,DBMS_DATA_MINING_TRANSFORM,' + 'DBMS_DATAPUMP,DBMS_DB_VERSION,DBMS_DDL,' + 'DBMS_DEBUG,DBMS_DEFER,DBMS_DEFER_IMPORT_INTERNAL,DBMS_DEFER_QUERY,' + 'DBMS_DEFER_SYS,DBMS_DESCRIBE,DBMS_DG,DBMS_DIMENSION,DBMS_DISTRIBUTED_TRUST_ADMIN,' + 'DBMS_EPG,DBMS_ERRLOG,DBMS_EXPFIL,DBMS_EXPORT_EXTENSION,DBMS_FGA,DBMS_FILE_GROUP,' + 'DBMS_FILE_TRANSFER,DBMS_FLASHBACK,DBMS_FREQUENT_ITEMSET,DBMS_HM,DBMS_HPROF,' + 'DBMS_HS_PARALLEL,DBMS_HS_PASSTHROUGH,DBMS_IJOB,DBMS_INTERNAL_TRIGGER,DBMS_IOT,' + 'DBMS_IREFRESH,DBMS_ISNAPSHOT,DBMS_JAVA,DBMS_JAVA_TEST,DBMS_JOB,DBMS_LDAP,DBMS_LDAP_UTL,' + 'DBMS_LIBCACHE,DBMS_LOB,DBMS_LOCK,DBMS_LOGMNR,DBMS_LOGMNR_CDC_PUBLISH,' + 'DBMS_LOGMNR_CDC_SUBSCRIBE,DBMS_LOGMNR_D,DBMS_LOGSTDBY,DBMS_METADATA,' + 'DBMS_MGD_ID_UTL,DBMS_MGWADM,DBMS_MGWMSG,DBMS_MONITOR,DBMS_MVIEW,' + 'DBMS_NETWORK_ACL_ADMIN,DBMS_NETWORK_UTL, DBMS_OBFUSCATION_TOOLKIT,DBMS_ODCI,' + 'DBMS_OFFLINE_OG,DBMS_OFFLINE_SNAPSHOT,DBMS_OLAP,' + 'DBMS_ORACLE_TRACE_AGENT,DBMS_ORACLE_TRACE_USER,DBMS_OUTLN,' + 'DBMS_OUTLN_EDIT,DBMS_OUTPUT,DBMS_PCLXUTIL,DBMS_PICKLER,DBMS_PIPE,' + 'DBMS_PITR,DBMS_PLUGTS,DBMS_PROFILER,DBMS_PROPAGATION_ADM,' + 'DBMS_PRVTAQIM,DBMS_PRVTAQIP,DBMS_PRVTAQIS,DBMS_PRVTRMIE,DBMS_PSP,' + 'DBMS_PSWMG_IMPORT,DBMS_PREDICTIVE_ANALYTICS,DBMS_PREPROCESSOR,' + 'DBMS_RANDOM,DBMS_RCVMAN,DBMS_RECTIFIER_DIFF,DBMS_REDEFINITION,DBMS_REFRESH,' + 'DBMS_REFRESH_EXP_LWM,DBMS_REFRESH_EXP_SITES,DBMS_REPAIR,DBMS_REPCAT,DBMS_REPCAT_ADMIN,' + 'DBMS_REPCAT_AUTH,DBMS_REPCAT_INSTANTIATE,DBMS_REPCAT_RGT,DBMS_REPUTIL,' + 'DBMS_RESCONFIG,DBMS_RESOURCE_MANAGER,DBMS_RESOURCE_MANAGER_PRIVS,DBMS_RESULT_CACHE,' + 'DBMS_RESUMABLE,DBMS_RLMGR,DBMS_RLS,DBMS_RMGR_GROUP_EXPORT,DBMS_RMGR_PACT_EXPORT,' + 'DBMS_RMGR_PLAN_EXPORT,DBMS_RMIN,DBMS_ROWID,DBMS_RULE,DBMS_RULE_ADM,' + 'DBMS_RULE_EXIMP,DBMS_SCHEDULER,DBMS_SERVER_ALERT,DBMS_SERVICE,DBMS_SESSION,' + 'DBMS_SHARED_POOL,DBMS_SNAP_INTERNAL,DBMS_SNAP_REPAPI,DBMS_SNAPSHOT,DBMS_SNAPSHOT_UTL,' + 'DBMS_SPACE,DBMS_SPACE_ADMIN,DBMS_SQL,DBMS_SQLDIAG,DBMS_SQLTUNE,DBMS_STANDARD,' + 'DBMS_STAT_FUNCS,DBMS_STATS,DBMS_STORAGE_MAP,' + 'DBMS_STREAMS,DBMS_STREAMS_ADM,DBMS_STREAMS_AUTH,DBMS_STREAMS_ADVISOR_ADM,' + 'DBMS_STREAMS_MESSAGING,DBMS_STREAMS_TABLESPACE_ADM,DBMS_SUMADV,DBMS_SUMMARY,' + 'DBMS_SUMREF_CHILD,DBMS_SUMREF_PARENT,DBMS_SUMREF_UTIL,' + 'DBMS_SUMREF_UTIL2,DBMS_SUMVDM,DBMS_SYS_ERROR,DBMS_SYS_SQL,' + 'DBMS_SYSTEM,DBMS_TDB,DBMS_TRACE,DBMS_TRANSACTION,DBMS_TRANSFORM,DBMS_TTS,' + 'DBMS_TYPES,DBMS_UTILITY,DBMS_WORKLOAD_CAPTURE,DBMS_WORKLOAD_REPLAY,' + 'DBMS_WORKLOAD_REPOSITORY,DBMS_WM,DBMS_XA,DBMS_XDB,DBMS_XDB_ADMIN,' + 'DBMS_XDB_VERSION,DBMS_XDBRESOURCE,DBMS_XDBT,DBMS_XDBZ,DBMS_XEVENT,' + 'DBMS_XMLDOM,DBMS_XMLGEN,DBMS_XMLINDEX,DBMS_XMLPARSER,DBMS_XMLQUERY,' + 'DBMS_XMLSAVE,DBMS_XMLSCHEMA,DBMS_XMLSTORE,DBMS_XMLTRANSLATIONS,DBMS_XPLAN,' + 'DBMS_XSLPROCESSOR,DBMS_ZHELP,DBMS_ZHELP_IR,DBMSZEXP_SYSPKGGRNT,DEBUG_EXTPROC,' + 'DIANA,DIUTIL,HTF,HTP,ODCICONST,OUTLN_PKG,PBREAK,PBRPH,PBSDE,PBUTL,PIDL,PLITBLM,' + 'SDO_CS,SDO_GEOM,SDO_LRS,SDO_MIGRATE,SDO_TUNE,SDO_UTIL,STANDARD,' + 'SYS_STUB_FOR_PURITY_ANALYSIS,UTL_COLL,UTL_ENCODE,UTL_FILE,UTL_FILE_DIR,UTL_HTTP,' + 'UTL_I18N,UTL_INADDR,UTL_LMS,UTL_MAIL,UTL_NLA,UTL_PG,UTL_RAW,UTL_REF,UTL_SMTP,' + 'UTL_SPADV,UTL_TCP,UTL_URL,WPG_DOCLOAD'; OracleSQLPlusCommands: UnicodeString = 'APP,APPINFO,AQ$_AGENT,AQ$_AGENT_LIST_T,AQ$_DESCRIPTOR,AQ$_POST_INFO,' + 'AQ$_POST_INFO_LIST,AQ$_RECIPIENT_LIST_T,AQ$_REG_INFO,AQ$_REG_INFO_LIST,' + 'AQ$_SUBSCRIBER_LIST_T,ARCHIVE,ARRAYSIZE,ATTRIBUTE,AUTOCOMMIT,AUTOP,' + 'AUTOPRINT,AUTORECOVERY,AUTOT,AUTOTRACE,BLO,BLOCKTERMINATOR,BRE,BREAK,' + 'BTI,BTITLE,BUFFER,CL,CLEAR,CLOSECURSOR,CMDS,CMDSEP,COL,COLSEP,COM,COMP,' + 'COMPAT,COMPATIBILITY,CON,CONN,COPY,COPYC,COPYCOMMIT,COPYTYPECHECK,DEF,' + 'DEFINE,DESC,DESCR,DESCRI,DESCRIB,DESCRIBE,DISC,DISCO,DISCON,DISCONN,' + 'DISCONNE,DISCONNEC,DISCONNECT,EA,ECHO,EDITF,EDITFILE,EMB,' + 'EMBEDDED,ESC,EXEC,EXECUTE,FAILURE,FEED,FEEDBACK,FLAGGER,FLU,GET,' + 'HEA,HEADING,HEADS,HEADSEP,HELP,HO,HOST,INPUT,INTERMED,INTERMEDIATE,INV,' + 'INVISIBLE,LIN,LINESIZE,LO,LOBOF,LOBOFFSET,LOGON,LOGSOURCE,LONGC,' + 'LONGCHUNKSIZE,MARKUP,MAXDATA,MIX,MIXED,NATIVE,NEWP,NEWPAGE,NUM,' + 'NUMF,NUMFORMAT,NUMWIDTH,OFF,OSERROR,PAGES,PAGESIZE,PASSW,PAU,PAUSE,' + 'PPRINT,PRI,PRINT,RECSEP,RECSEPCHAR,REPF,REPFOOTER,REPH,REPHEADER,' + 'RUN,SAVE,SCAN,SERVEROUTPUT,SET,SHIFT,SHIFTINOUT,SHO,SHOW,SHUTDOWN,' + 'SILENT,SPOOL,SQLBL,SQLBLANKLINES,SQLC,SQLCASE,SQLCO,SQLCONTINUE,SQLN,' + 'SQLNUMBER,SQLP,SQLPRE,SQLPREFIX,SQLPROMPT,SQLT,SQLTERMINATOR,STA,' + 'STARTUP,STATEMENT_ID,STORE,SUCCESS,SUF,SUFFIX,TAB,TERM,TERMOUT,TI,TIMI,' + 'TIMING,TRIMOUT,TRIMS,TRIMSPOOL,TTI,TTITLE,UND,UNDEF,UNDEFINE,' + 'UNDERLINE,UP,VAR,VARIABLE,VER,VERIFY,VERSION,VIS,VISIBLE,WHENEVER,WR,' + 'WRA,WRAP,WRAPPED'; OracleCommentKW: UnicodeString = 'REM,REMA,REMAR,REMARK'; OracleConsoleOutputKW: UnicodeString = 'PRO,PROM,PROMP,PROMPT'; //---MS-SQL 7------------------------------------------------------------------- // keywords MSSQL7KW: UnicodeString = 'ABSOLUTE,ADD,ALL,ALTER,ANY,AS,ASC,AUTHORIZATION,AVG,BACKUP,BEGIN,' + 'BETWEEN,BREAK,BROWSE,BULK,BY,CASCADE,CHECK,CHECKPOINT,CLOSE,CLUSTERED,' + 'COLUMN,COMMIT,COMMITTED,COMPUTE,CONFIRM,CONSTRAINT,CONTAINS,' + 'CONTAINSTABLE,CONTINUE,CONTROLROW,COUNT,CREATE,CROSS,CURRENT,' + 'CURRENT_DATE,CURRENT_TIME,CURSOR,DATABASE,DBCC,DEALLOCATE,DECLARE,' + 'DEFAULT,DELETE,DENY,DESC,DISK,DISTINCT,DISTRIBUTED,DOUBLE,DROP,DUMMY,' + 'DUMP,ELSE,END,ERRLVL,ERROREXIT,ESCAPE,EXCEPT,EXEC,EXECUTE,EXISTS,EXIT,' + 'FETCH,FILE,FILLFACTOR,FIRST,FLOPPY,FOR,FOREIGN,FREETEXT,FREETEXTTABLE,' + 'FROM,FULL,GLOBAL,GOTO,GRANT,GROUP,HAVING,HOLDLOCK,IDENTITY,IDENTITYCOL,' + 'IDENTITY_INSERT,IF,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISOLATION,' + 'JOIN,KEY,KILL,LAST,LEFT,LEVEL,LIKE,LINENO,LOAD,MAX,MIN,MIRROREXIT,' + 'NATIONAL,NEXT,NOCHECK,NONCLUSTERED,NOT,NULL,OF,OFF,OFFSETS,ON,ONCE,' + 'ONLY,OPEN,OPENDATASOURCE,OPENQUERY,OPENROWSET,OPTION,OR,ORDER,OUTER,' + 'OVER,PERCENT,PERM,PERMANENT,PIPE,PLAN,PRECISION,PREPARE,PRIMARY,PRINT,' + 'PRIOR,PRIVILEGES,PROC,PROCEDURE,PROCESSEXIT,PUBLIC,RAISERROR,READ,' + 'READTEXT,RECONFIGURE,REFERENCES,RELATIVE,REPEATABLE,REPLICATION,RESTORE,' + 'RESTRICT,RETURN,REVOKE,RIGHT,ROLLBACK,ROWCOUNT,ROWGUIDCOL,RULE,SAVE,' + 'SCHEMA,SELECT,SERIALIZABLE,SET,SETUSER,SHUTDOWN,SOME,STATISTICS,SUM,' + 'TABLE,TAPE,TEMP,TEMPORARY,TEXTSIZE,THEN,TO,TOP,TRAN,TRANSACTION,TRIGGER,' + 'TRUNCATE,TSEQUAL,UNCOMMITTED,UNION,UNIQUE,UPDATE,UPDATETEXT,USE,USER,' + 'VALUES,VARYING,VIEW,WAITFOR,WHEN,WHERE,WHILE,WITH,WORK,WRITETEXT'; // functions MSSQL7Functions: UnicodeString = '@@CONNECTIONS,@@CPU_BUSY,@@CURSOR_ROWS,@@DATEFIRST,@@DBTS,@@ERROR,' + '@@FETCH_STATUS,@@IDENTITY,@@IDLE,@@IO_BUSY,@@LANGID,@@LANGUAGE,' + '@@LOCK_TIMEOUT,@@MAX_CONNECTIONS,@@MAX_PRECISION,@@NESTLEVEL,@@OPTIONS,' + '@@PACKET_ERRORS,@@PACK_RECEIVED,@@PACK_SENT,@@PROCID,@@REMSERVER,' + '@@ROWCOUNT,@@SERVERNAME,@@SERVICENAME,@@SPID,@@TEXTSIZE,@@TIMETICKS,' + '@@TOTAL_ERRORS,@@TOTAL_READ,@@TOTAL_WRITE,@@TRANCOUNT,@@VERSION,ABS,' + 'ACOS,AND,APP_NAME,ASCII,ASIN,ATAN,ATN2,CASE,CAST,CEILING,CHARINDEX,' + 'COALESCE,COLUMNPROPERTY,COL_LENGTH,COL_NAME,CONVERT,COS,COT,' + 'CURRENT_TIMESTAMP,CURRENT_USER,CURSOR_STATUS,DATABASEPROPERTY,' + 'DATALENGTH,DATEADD,DATEDIFF,DATENAME,DATEPART,DAY,DB_ID,DB_NAME,' + 'DEGREES,DIFFERENCE,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,' + 'FILEPROPERTY,FILE_ID,FILE_NAME,FLOOR,FORMATMESSAGE,' + 'FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY,GETANSINULL,GETDATE,' + 'HOST_ID,HOST_NAME,IDENT_INCR,IDENT_SEED,INDEXPROPERTY,INDEX_COL,' + 'ISDATE,ISNULL,ISNUMERIC,IS_MEMBER,IS_SRVROLEMEMBER,LEN,LOG,LOG10,LOWER,' + 'LTRIM,MONTH,NEWID,NULLIF,OBJECTPROPERTY,OBJECT_ID,OBJECT_NAME,PARSENAME,' + 'PATINDEX,PERMISSIONS,PI,POWER,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,' + 'REVERSE,ROUND,RTRIM,SESSION_USER,SIGN,SIN,SOUNDEX,SPACE,SQRT,SQUARE,' + 'STATS_DATE,STR,STUFF,SUBSTRING,SUSER_ID,SUSER_NAME,SUSER_SID,' + 'SUSER_SNAME,SYSTEM_USER,TAN,TEXTPTR,TEXTVALID,TYPEPROPERTY,UNICODE,' + 'UPPER,USER_ID,USER_NAME,YEAR'; // types MSSQL7Types: UnicodeString = 'BINARY,BIT,CHAR,DATETIME,DECIMAL,FLOAT,IMAGE,INT,MONEY,NCHAR,NTEXT,' + 'NUMERIC,NVARCHAR,REAL,SMALLDATETIME,SMALLINT,SMALLMONEY,SYSNAME,TEXT,' + 'TIMESTAMP,TINYINT,UNIQUEIDENTIFIER,VARBINARY,VARCHAR'; //---MS-SQL2K------------------------------------------------------------------- // keywords MSSQL2000KW: UnicodeString = 'ADD,ALL,ALTER,AND,ANY,AS,ASC,AUTHORIZATION,BACKUP,' + 'BEGIN,BETWEEN,BREAK,BROWSE,BULK,BY,CASCADE,CASE,' + 'CHECK,CHECKPOINT,CLOSE,CLUSTERED,COLLATE,' + 'COLUMN,COMMIT,COMPUTE,CONSTRAINT,CONTAINS,CONTAINSTABLE,' + 'CONTINUE,CREATE,CROSS,CURRENT,CURSOR,DATABASE,' + 'DBCC,DEALLOCATE,DECLARE,DEFAULT,DELETE,DENY,DESC,DISK,' + 'DISTINCT,DISTRIBUTED,DOUBLE,DROP,DUMMY,DUMP,ELSE,END,' + 'ERRLVL,ESCAPE,EXCEPT,EXEC,EXECUTE,EXISTS,EXIT,FETCH,FILE,' + 'FILLFACTOR,FOR,FOREIGN,FORMSOF,FREETEXT,FREETEXTTABLE,FROM,FULL,' + 'FUNCTION,GOTO,GRANT,GROUP,HAVING,HOLDLOCK,IDENTITY,' + 'IDENTITYCOL,IDENTITY_INSERT,IF,IN,INFLECTIONAL,INDEX,INNER,INSERT,' + 'INTERSECT,INTO,IS,ISABOUT,JOIN,KEY,KILL,LEFT,LIKE,LINENO,LOAD,' + 'NATIONAL,NOCHECK,NONCLUSTERED,NOT,NULL,NULLIF,OF,OFF,' + 'OFFSETS,ON,OPEN,OPENDATASOURCE,OPENQUERY,OPENROWSET,OPENXML,' + 'OPTION,OR,ORDER,OUTER,OVER,PERCENT,PLAN,PRECISION,' + 'PRIMARY,PRINT,PROC,PROCEDURE,PUBLIC,RAISERROR,READ,' + 'READTEXT,RECONFIGURE,REFERENCES,REPLICATION,RESTORE,' + 'RESTRICT,RETURN,REVOKE,RIGHT,ROLLBACK,ROWCOUNT,ROWGUIDCOL,' + 'RULE,SAVE,SCHEMA,SELECT,SESSION_USER,SET,SETUSER,SHUTDOWN,' + 'SOME,STATISTICS,TABLE,TEXTSIZE,THEN,TO,TOP,TRAN,TRANSACTION,' + 'TRIGGER,TRUNCATE,TSEQUAL,UNION,UNIQUE,UPDATE,UPDATETEXT,' + 'USE,USER,VALUES,VARYING,VIEW,WAITFOR,WEIGHT,WHEN,WHERE,WHILE,' + 'WITH,WRITETEXT'; // functions MSSQL2000Functions: UnicodeString = '@@CONNECTIONS,@@CPU_BUSY,@@CURSOR_ROWS,@@DATEFIRST,@@DBTS,@@ERROR,' + '@@FETCH_STATUS,@@IDENTITY,@@IDLE,@@IO_BUSY,@@LANGID,@@LANGUAGE,' + '@@LOCK_TIMEOUT,@@MAX_CONNECTIONS,@@MAX_PRECISION,@@NESTLEVEL,@@OPTIONS,' + '@@PACKET_ERRORS,@@PACK_RECEIVED,@@PACK_SENT,@@PROCID,@@REMSERVER,' + '@@ROWCOUNT,@@SERVERNAME,@@SERVICENAME,@@SPID,@@TEXTSIZE,@@TIMETICKS,' + '@@TOTAL_ERRORS,@@TOTAL_READ,@@TOTAL_WRITE,@@TRANCOUNT,@@VERSION,' + 'ABS,ACOS,APP_NAME,ASCII,ASIN,ATAN,ATN2,AVG,BINARY_CHECKSUM,CAST,' + 'CEILING,CHARINDEX,CHECKSUM,CHECKSUM_AGG,COALESCE,COLLATIONPROPERTY,' + 'COLUMNPROPERTY,COL_LENGTH,COL_NAME,CONVERT,COS,COT,COUNT,' + 'COUNT_BIG,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,' + 'CURRENT_USER,CURSOR_STATUS,DATABASEPROPERTY,DATABASEPROPERTYEX,' + 'DATALENGTH,DATEADD,DATEDIFF,DATENAME,DATEPART,DAY,DB_ID,DB_NAME,DEGREES,' + 'DIFFERENCE,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,' + 'FILEPROPERTY,FILE_ID,FILE_NAME,FLOOR,fn_helpcollations,' + 'fn_listextendedproperty,fn_servershareddrives,fn_trace_geteventinfo,' + 'fn_trace_getfilterinfo,fn_trace_getinfo,fn_trace_gettable,' + 'fn_virtualfilestats,FORMATMESSAGE,FULLTEXTCATALOGPROPERTY,' + 'FULLTEXTSERVICEPROPERTY,GETANSINULL,GETDATE,GETUTCDATE,GROUPING,' + 'HAS_DBACCESS,HOST_ID,HOST_NAME,IDENT_CURRENT,IDENT_INCR,IDENT_SEED,' + 'INDEXKEY_PROPERTY,INDEXPROPERTY,INDEX_COL,ISDATE,ISNULL,ISNUMERIC,' + 'IS_MEMBER,IS_SRVROLEMEMBER,LEN,LOG,LOG10,LOWER,LTRIM,MAX,MIN,MONTH,' + 'NEWID,OBJECTPROPERTY,OBJECT_ID,OBJECT_NAME,PARSENAME,PATINDEX,' + 'PERMISSIONS,PI,POWER,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,REVERSE,' + 'ROUND,ROWCOUNT_BIG,RTRIM,SCOPE_IDENTITY,SERVERPROPERTY,SESSIONPROPERTY,' + 'SIGN,SIN,SOUNDEX,SPACE,SQL_VARIANT_PROPERTY,SQRT,SQUARE,' + 'STATS_DATE,STDEV,STDEVP,STR,STUFF,SUBSTRING,SUM,SUSER_SID,SUSER_SNAME,' + 'SYSTEM_USER,TAN,TEXTPTR,TEXTVALID,TYPEPROPERTY,UNICODE,UPPER,' + 'USER_ID,USER_NAME,VAR,VARP,YEAR'; // types MSSQL2000Types: UnicodeString = 'bigint,binary,bit,char,character,datetime,' + 'dec,decimal,float,image,int,' + 'integer,money,nchar,ntext,numeric,nvarchar,real,' + 'rowversion,smalldatetime,smallint,smallmoney,' + 'sql_variant,sysname,text,timestamp,tinyint,uniqueidentifier,' + 'varbinary,varchar'; //---Interbase 6---------------------------------------------------------------- // functions Interbase6Functions: UnicodeString = 'AVG,CAST,COUNT,GEN_ID,MAX,MIN,SUM,UPPER'; // keywords Interbase6KW: UnicodeString = 'ACTIVE,ADD,AFTER,ALL,ALTER,AND,ANY,AS,ASC,' + 'ASCENDING,AT,AUTO,AUTODDL,BASED,BASENAME,BASE_NAME,BEFORE,BEGIN,BETWEEN,' + 'BLOBEDIT,BUFFER,BY,CACHE,CHARACTER_LENGTH,CHAR_LENGTH,CHECK,' + 'CHECK_POINT_LEN,CHECK_POINT_LENGTH,COLLATE,COLLATION,COLUMN,COMMIT,' + 'COMMITED,COMPILETIME,COMPUTED,CLOSE,CONDITIONAL,CONNECT,CONSTRAINT,' + 'CONTAINING,CONTINUE,CREATE,CURRENT,CURRENT_DATE,CURRENT_TIME,' + 'CURRENT_TIMESTAMP,CURSOR,DATABASE,DAY,DB_KEY,DEBUG,DEC,DECLARE,DEFAULT,' + 'DELETE,DESC,DESCENDING,DESCRIBE,DESCRIPTOR,DISCONNECT,DISTINCT,DO,' + 'DOMAIN,DROP,ECHO,EDIT,ELSE,END,ENTRY_POINT,ESCAPE,EVENT,EXCEPTION,' + 'EXECUTE,EXISTS,EXIT,EXTERN,EXTERNAL,EXTRACT,FETCH,FILE,FILTER,FOR,' + 'FOREIGN,FOUND,FROM,FULL,FUNCTION,GDSCODE,GENERATOR,GLOBAL,GOTO,GRANT,' + 'GROUP,GROUP_COMMIT_WAIT,GROUP_COMMIT_WAIT_TIME,HAVING,HELP,HOUR,IF,' + 'IMMEDIATE,IN,INACTIVE,INDEX,INDICATOR,INIT,INNER,INPUT,INPUT_TYPE,' + 'INSERT,INT,INTO,IS,ISOLATION,ISQL,JOIN,KEY,LC_MESSAGES,LC_TYPE,LEFT,' + 'LENGTH,LEV,LEVEL,LIKE,LOGFILE,LOG_BUFFER_SIZE,LOG_BUF_SIZE,LONG,MANUAL,' + 'MAXIMUM,MAXIMUM_SEGMENT,MAX_SEGMENT,MERGE,MESSAGE,MINIMUM,MINUTE,' + 'MODULE_NAME,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NO,NOAUTO,NOT,NULL,' + 'NUM_LOG_BUFFS,NUM_LOG_BUFFERS,OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,' + 'ORDER,OUTER,OUTPUT,OUTPUT_TYPE,OVERFLOW,PAGE,PAGELENGTH,PAGES,PAGE_SIZE,' + 'PARAMETER,PASSWORD,PLAN,POSITION,POST_EVENT,PRECISION,PREPARE,PROCEDURE,' + 'PROTECTED,PRIMARY,PRIVILEGES,PUBLIC,QUIT,RAW_PARTITIONS,READ,REAL,' + 'RECORD_VERSION,REFERENCES,RELEASE,RESERV,RESERVING,RETAIN,RETURN,' + 'RETURNING_VALUES,RETURNS,REVOKE,RIGHT,ROLLBACK,RUNTIME,SCHEMA,SECOND,' + 'SEGMENT,SELECT,SET,SHADOW,SHARED,SHELL,SHOW,SINGULAR,SIZE,SNAPSHOT,SOME,' + 'SORT,SQL,SQLCODE,SQLERROR,SQLWARNING,STABILITY,STARTING,STARTS,' + 'STATEMENT,STATIC,STATISTICS,SUB_TYPE,SUSPEND,TABLE,TERMINATOR,THEN,TO,' + 'TRANSACTION,TRANSLATE,TRANSLATION,TRIGGER,TRIM,TYPE,UNCOMMITTED,UNION,' + 'UNIQUE,UPDATE,USER,USING,VALUE,VALUES,VARIABLE,VARYING,VERSION,VIEW,' + 'WAIT,WEEKDAY,WHEN,WHENEVER,WHERE,WHILE,WITH,WORK,WRITE,YEAR,YEARDAY'; // types Interbase6Types: UnicodeString = 'BLOB,CHAR,CHARACTER,DATE,DECIMAL,DOUBLE,FLOAT,INTEGER,' + 'NUMERIC,SMALLINT,TIME,TIMESTAMP,VARCHAR'; //---MySQL---------------------------------------------------------------------- // keywords MySqlKW: UnicodeString = 'ACCOUNT,ACTION,ADD,AFTER,AGAINST,ALGORITHM,ALL,ALTER,ANY,ALWAYS,ANALYZE,' + 'AND,AS,ASC,AT,AUTO_INCREMENT,AVG_ROW_LENGTH,BEFORE,BEGIN,BETWEEN,BINLOG,' + 'BLOCK,BOTH,BY,CACHE,CALL,CASCADE,CASCADED,CATALOG_NAME,CHANGE,CHANGED,' + 'CHANNEL,CHAIN,CHARACTER,CHARSET,CHECK,CHECKSUM,CLASS_ORIGIN,CLIENT,CODE,' + 'COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,' + 'COMMIT,COMMITTED,COMPLETION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,' + 'CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,' + 'CONTAINS,CONTEXT,CONTINUE,CONVERT,COPY,CPU,CREATE,CROSS,CURRENT,CURSOR,' + 'CURSOR_NAME,CYCLE,DATA,DATABASE,DATABASES,DATAFILE,DAY_HOUR,' + 'DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DECLARE,DEFAULT,' + 'DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DESC,DESCRIBE,DETERMINISTIC,' + 'DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISTINCT,DISTINCTROW,DIV,DO,DROP,' + 'DUAL,DUMPFILE,DUPLICATE,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,END,ENDS,' + 'ENGINE,ENGINES,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,' + 'EXCLUSIVE,EXECUTE,EXISTS,EXPANSION,EXPIRE,EXPLAIN,EXTENDED,FALSE,FAST,' + 'FAULTS,FILE_BLOCK_SIZE,FLUSH,FIELDS,FILE,FIRST,FOLLOWS,FOR,FORCE,' + 'FOREIGN,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GET,GLOBAL,' + 'GRANT,GRANTS,GROUP,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,' + 'HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IGNORE,' + 'IGNORE_SERVER_IDS,IMPORT,IN,INCREMENT,INDEX,INDEXES,INFILE,INITIAL_SIZE,' + 'INNER,INOUT,INPLACE,INSTANCE,INSERT,INSERT_METHOD,INSTALL,INTO,INVOKER,' + 'IO,IPC,IS,ISOLATION,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,' + 'LAST,LEADING,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LIST,LOAD,LOCAL,LOCK,' + 'LOGS,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,' + 'MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,' + 'MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,' + 'MASTER_RETRY_COUNT,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,' + 'MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,' + 'MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,' + 'MASTER_USER,MATCH,MAX_QUERIES_PER_HOUR,MAX_ROWS,' + 'MAX_CONNECTIONS_PER_HOUR,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,' + 'MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MESSAGE_TEXT,MIGRATE,MIN_ROWS,' + 'MINUTE_MICROSECOND,MINUTE_SECOND,MINVALUE,MOD,MODE,MODIFIES,MODIFY,' + 'MUTEX,MYSQL_ERRNO,NAME,NAMES,NATURAL,NEVER,NEW,NEXT,NO,NOCACHE,NOCYCLE,' + 'NOMAXVALUE,NOMINVALUE,NONE,NOT,NULL,NO_WRITE_TO_BINLOG,NUMBER,OFFSET,' + 'OJ,OLD,ON,ONE,ONLINE,ONLY,OPEN,OPTIMIZE,OPTION,OPTIONALLY,OPTIONS,OR,' + 'ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PAGE_CHECKSUM,PARSER,' + 'PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PERSIST,PERSISTENT,PHASE,' + 'PLUGINS,PLUGIN,PORT,PRECEDES,PREPARE,PRESERVE,PRIMARY,PRIVILEGES,' + 'PROCEDURE,PROCESS,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUERY,QUICK,' + 'RANGE,READ,READS,REBUILD,RECOVER,REFERENCES,REGEXP,RELAY,RELAYLOG,' + 'RELEASE,RELAY_LOG_FILE,RELAY_LOG_POS,RELOAD,REMOVE,RENAME,REORGANIZE,' + 'REPAIR,REPEATABLE,REPLACE,REPLICATION,REQUIRE,RESET,RESIGNAL,' + 'RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVOKE,RLIKE,ROLLBACK,' + 'ROLLUP,ROTATE,ROUTINE,ROW,ROW_FORMAT,ROWS,SAVEPOINT,SCHEDULE,SCHEMA,' + 'SCHEMA_NAME,SECOND_MICROSECOND,SECURITY,SELECT,SEPARATOR,SEQUENCE,' + 'SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHARED,SHOW,SHUTDOWN,SIGNAL,' + 'SIMPLE,SLAVE,SLOW,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,' + 'SQL,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,' + 'SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_TSI_DAY,SQL_TSI_HOUR,' + 'SQL_TSI_MICROSECOND,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,' + 'SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,' + 'SQLWARNING,STACKED,STARTING,START,STARTS,STATS_AUTO_RECALC,' + 'STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,' + 'STRAIGHT_JOIN,SUBCLASS_ORIGIN,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,' + 'SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,' + 'TEMPORARY,TERMINATED,THAN,TO,TRADITIONAL,TRAILING,TRANSACTION,' + 'TRANSACTIONAL,TRIGGER,TRIGGERS,TRUE,TYPE,UNCOMMITTED,UNDO,UNINSTALL,' + 'UNION,UNIQUE,UNKNOWN,UNLOCK,UPDATE,UPGRADE,USAGE,USE,USE_FRM,' + 'USING,VALIDATION,VALUE,VALUES,VARIABLES,VIEW,VIRTUAL,WAIT,WARNINGS,' + 'WHERE,WRAPPER,WRITE,WITH,WITHOUT,WORK,XA,XID,XML,XOR,YEAR_MONTH'; // PLSQL keywords MySQLPLSQLKW: UnicodeString = 'CASE,CLOSE,EXIT,FETCH,GOTO,HANDLER,ITERATE,IF,LEAVE,LOOP,REPEAT,THEN,' + 'UNTIL,WHEN,WHILE'; MySQLTypes: UnicodeString = // Table Engines 'ARCHIVE,BDB,BERKELEYDB,BLACKHOLE,CSV,EXAMPLE,FEDERATED,HEAP,INNOBASE,' + 'InnoDB,ISAM,MEMORY,MERGE,MRG_ISAM,MRG_MYISAM,MyISAM,NDB,NDBCLUSTER,' + // Index Types 'BTREE,HASH,' + // Column Types 'bigint,blob,bool,boolean,byte,char,date,datetime,decimal,double,enum,' + 'float,geometry,geometrycollection,int,integer,linestring,longblob,' + 'longtext,mediumblob,mediumint,mediumtext,multilinestring,multipoint,' + 'multipolygon,national,numeric,point,polygon,precision,real,serial,' + 'signed,smallint,string,text,time,timestamp,tinyblob,tinyint,tinytext,' + 'unicode,unsigned,varbinary,varchar,year,zerofill,' + // Row Formats 'COMPACT,COMPRESSED,DISK,DYNAMIC,FIXED,REDUNDANT,' + // Raid Types 'RAID0,STRIPED,' + // View Algorythm 'UNDEFINED,TEMPTABLE,' + // Charsets 'armscii8,big5,cp1250,cp1251,cp1256,cp1257,cp850,cp852,' + 'cp866,cp932,dec8,eucjpms,euckr,gb18030,gb2312,gbk,geostd8,greek,hebrew,' + 'hp8,keybcs2,koi8r,koi8u,latin1,latin2,latin5,latin7,macce,macroman,sjis,' + 'swe7,tis620,ucs2,ujis,utf16,utf16le,utf32,utf8,utf8mb4,' + '_armscii8,_big5,_cp1250,_cp1251,_cp1256,_cp1257,_cp850,' + '_cp852,_cp866,_cp932,_dec8,_eucjpms,_euckr,_gb18030,_gb2312,_gbk,' + '_geostd8,_greek,_hebrew,_hp8,_keybcs2,_koi8r,_koi8u,_latin1,_latin2,' + '_latin5,_latin7,_macce,_macroman,_sjis,_swe7,_tis620,_ucs2,_ujis,_utf16,' + '_utf16le,_utf32,_utf8,_utf8mb4,' + // Collations 'armscii8_bin,armscii8_general_ci,ascii_bin,ascii_general_ci,big5_bin,' + 'big5_chinese_ci,binary,cp1250_bin,cp1250_croatian_ci,cp1250_czech_cs,' + 'cp1250_general_ci,cp1250_polish_ci,cp1251_bin,cp1251_bulgarian_ci,' + 'cp1251_general_ci,cp1251_general_cs,cp1251_ukrainian_ci,cp1256_bin,' + 'cp1256_general_ci,cp1257_bin,cp1257_general_ci,cp1257_lithuanian_ci,' + 'cp850_bin,cp850_general_ci,cp852_bin,cp852_general_ci,cp866_bin,' + 'cp866_general_ci,cp932_bin,cp932_japanese_ci,dec8_bin,dec8_swedish_ci,' + 'eucjpms_bin,eucjpms_japanese_ci,euckr_bin,euckr_korean_ci,gb18030_bin,' + 'gb18030_chinese_ci,gb18030_unicode_520_ci,gb2312_bin,gb2312_chinese_ci,' + 'gbk_bin,gbk_chinese_ci,geostd8_bin,geostd8_general_ci,greek_bin,' + 'greek_general_ci,hebrew_bin,hebrew_general_ci,hp8_bin,hp8_english_ci,' + 'keybcs2_bin,keybcs2_general_ci,koi8r_bin,koi8r_general_ci,koi8u_bin,' + 'koi8u_general_ci,latin1_bin,latin1_danish_ci,latin1_general_ci,' + 'latin1_general_cs,latin1_german1_ci,latin1_german2_ci,latin1_spanish_ci,' + 'latin1_swedish_ci,latin2_bin,latin2_croatian_ci,latin2_czech_cs,' + 'latin2_general_ci,latin2_hungarian_ci,latin5_bin,latin5_turkish_ci,' + 'latin7_bin,latin7_estonian_cs,latin7_general_ci,latin7_general_cs,' + 'macce_bin,macce_general_ci,macroman_bin,macroman_general_ci,sjis_bin,' + 'sjis_japanese_ci,swe7_bin,swe7_swedish_ci,tis620_bin,tis620_thai_ci,' + 'ucs2_bin,ucs2_croatian_ci,ucs2_czech_ci,ucs2_danish_ci,' + 'ucs2_esperanto_ci,ucs2_estonian_ci,ucs2_general_ci,' + 'ucs2_general_mysql500_ci,ucs2_german2_ci,ucs2_hungarian_ci,' + 'ucs2_icelandic_ci,ucs2_latvian_ci,ucs2_lithuanian_ci,ucs2_persian_ci,' + 'ucs2_polish_ci,ucs2_romanian_ci,ucs2_roman_ci,ucs2_sinhala_ci,' + 'ucs2_slovak_ci,ucs2_slovenian_ci,ucs2_spanish2_ci,ucs2_spanish_ci,' + 'ucs2_swedish_ci,ucs2_turkish_ci,ucs2_unicode_520_ci,ucs2_unicode_ci,' + 'ucs2_vietnamese_ci,ujis_bin,ujis_japanese_ci,utf16le_bin,' + 'utf16le_general_ci,utf16_bin,utf16_croatian_ci,utf16_czech_ci,' + 'utf16_danish_ci,utf16_esperanto_ci,utf16_estonian_ci,utf16_general_ci,' + 'utf16_german2_ci,utf16_hungarian_ci,utf16_icelandic_ci,utf16_latvian_ci,' + 'utf16_lithuanian_ci,utf16_persian_ci,utf16_polish_ci,utf16_romanian_ci,' + 'utf16_roman_ci,utf16_sinhala_ci,utf16_slovak_ci,utf16_slovenian_ci,' + 'utf16_spanish2_ci,utf16_spanish_ci,utf16_swedish_ci,utf16_turkish_ci,' + 'utf16_unicode_520_ci,utf16_unicode_ci,utf16_vietnamese_ci,utf32_bin,' + 'utf32_croatian_ci,utf32_czech_ci,utf32_danish_ci,utf32_esperanto_ci,' + 'utf32_estonian_ci,utf32_general_ci,utf32_german2_ci,utf32_hungarian_ci,' + 'utf32_icelandic_ci,utf32_latvian_ci,utf32_lithuanian_ci,' + 'utf32_persian_ci,utf32_polish_ci,utf32_romanian_ci,utf32_roman_ci,' + 'utf32_sinhala_ci,utf32_slovak_ci,utf32_slovenian_ci,utf32_spanish2_ci,' + 'utf32_spanish_ci,utf32_swedish_ci,utf32_turkish_ci,utf32_unicode_520_ci,' + 'utf32_unicode_ci,utf32_vietnamese_ci,utf8mb4_bin,utf8mb4_croatian_ci,' + 'utf8mb4_czech_ci,utf8mb4_danish_ci,utf8mb4_esperanto_ci,' + 'utf8mb4_estonian_ci,utf8mb4_general_ci,utf8mb4_german2_ci,' + 'utf8mb4_hungarian_ci,utf8mb4_icelandic_ci,utf8mb4_latvian_ci,' + 'utf8mb4_lithuanian_ci,utf8mb4_persian_ci,utf8mb4_polish_ci,' + 'utf8mb4_romanian_ci,utf8mb4_roman_ci,utf8mb4_sinhala_ci,' + 'utf8mb4_slovak_ci,utf8mb4_slovenian_ci,utf8mb4_spanish2_ci,' + 'utf8mb4_spanish_ci,utf8mb4_swedish_ci,utf8mb4_turkish_ci,' + 'utf8mb4_unicode_520_ci,utf8mb4_unicode_ci,utf8mb4_vietnamese_ci,' + 'utf8_bin,utf8_croatian_ci,utf8_czech_ci,utf8_danish_ci,' + 'utf8_esperanto_ci,utf8_estonian_ci,utf8_general_ci,' + 'utf8_general_mysql500_ci,utf8_german2_ci,utf8_hungarian_ci,' + 'utf8_icelandic_ci,utf8_latvian_ci,utf8_lithuanian_ci,utf8_persian_ci,' + 'utf8_polish_ci,utf8_romanian_ci,utf8_roman_ci,utf8_sinhala_ci,' + 'utf8_slovak_ci,utf8_slovenian_ci,utf8_spanish2_ci,utf8_spanish_ci,' + 'utf8_swedish_ci,utf8_turkish_ci,utf8_unicode_520_ci,utf8_unicode_ci,' + 'utf8_vietnamese_ci'; // functions // Taken from MariaDB 10.5.5 help tables MySQLFunctions: UnicodeString = 'ABS,ACOS,ADDDATE,ADDTIME,AES_DECRYPT,AES_ENCRYPT,AREA,ASBINARY,ASCII,' + 'ASIN,ASTEXT,ASWKB,ASWKT,ATAN,ATAN2,AVG,BENCHMARK,BIN,BINLOG_GTID_POS,' + 'BIT_AND,BIT_COUNT,BIT_LENGTH,BIT_OR,BIT_XOR,BOUNDARY,BUFFER,CAST,CEIL,' + 'CEILING,CENTROID,CHARACTER_LENGTH,CHAR_LENGTH,CHR,COALESCE,' + 'COERCIBILITY,COLUMN_ADD,COLUMN_CHECK,COLUMN_CREATE,COLUMN_DELETE,' + 'COLUMN_EXISTS,COLUMN_GET,COLUMN_JSON,COLUMN_LIST,COMPRESS,CONCAT,' + 'CONCAT_WS,CONNECTION_ID,CONV,CONVERT_TZ,CONVEXHULL,COS,COT,COUNT,CRC32,' + 'CROSSES,CUME_DIST,CURDATE,CURRENT_DATE,CURRENT_ROLE,CURRENT_TIME,' + 'CURRENT_TIMESTAMP,CURRENT_USER,CURTIME,DATEDIFF,DATE_ADD,DATE_FORMAT,' + 'DATE_SUB,DAY,DAYNAME,DAYOFMONTH,DAYOFWEEK,DAYOFYEAR,DECODE,' + 'DECODE_HISTOGRAM,DEGREES,DENSE_RANK,DES_DECRYPT,DES_ENCRYPT,DIMENSION,' + 'DISJOINT,ELT,ENCODE,ENCRYPT,ENDPOINT,ENVELOPE,EQUALS,EXP,EXPORT_SET,' + 'EXTERIORRING,EXTRACT,EXTRACTVALUE,FIELD,FIND_IN_SET,FIRST_VALUE,FLOOR,' + 'FORMAT,FOUND_ROWS,FROM_BASE64,FROM_DAYS,FROM_UNIXTIME,GEOMCOLLFROMTEXT,' + 'GEOMCOLLFROMWKB,GEOMETRYCOLLECTIONFROMTEXT,GEOMETRYCOLLECTIONFROMWKB,' + 'GEOMETRYFROMTEXT,GEOMETRYFROMWKB,GEOMETRYN,GEOMETRYTYPE,GEOMFROMTEXT,' + 'GEOMFROMWKB,GET_FORMAT,GET_LOCK,GLENGTH,GREATEST,GROUP_CONCAT,' + 'HELP_DATE,HEX,HOUR,IFNULL,INET6_ATON,INET6_NTOA,INET_ATON,INET_NTOA,' + 'INSTR,INTERIORRINGN,INTERSECTS,INTERVAL,ISCLOSED,ISEMPTY,ISNULL,ISRING,' + 'ISSIMPLE,IS_FREE_LOCK,IS_IPV4,IS_IPV4_COMPAT,IS_IPV4_MAPPED,IS_IPV6,' + 'IS_USED_LOCK,JSON_ARRAY,JSON_ARRAY_APPEND,JSON_ARRAY_INSERT,' + 'JSON_COMPACT,JSON_CONTAINS,JSON_CONTAINS_PATH,JSON_DEPTH,JSON_DETAILED,' + 'JSON_EXISTS,JSON_EXTRACT,JSON_INSERT,JSON_KEYS,JSON_LENGTH,JSON_LOOSE,' + 'JSON_MERGE,JSON_OBJECT,JSON_QUERY,JSON_QUOTE,JSON_REMOVE,JSON_REPLACE,' + 'JSON_SEARCH,JSON_SET,JSON_TYPE,JSON_UNQUOTE,JSON_VALID,JSON_VALUE,' + 'LABELS,LAG,LASTVAL,LAST_DAY,LAST_INSERT_ID,LAST_VALUE,LCASE,LEAST,LEFT,' + 'LENGTH,LENGTHB,LINEFROMTEXT,LINEFROMWKB,LINESTRINGFROMTEXT,' + 'LINESTRINGFROMWKB,LN,LOAD_FILE,LOCALTIME,LOCALTIMESTAMP,LOCATE,LOG,' + 'LOG10,LOG2,LOWER,LPAD,LTRIM,MAKEDATE,MAKETIME,MAKE_SET,' + 'MASTER_GTID_WAIT,MASTER_POS_WAIT,MAX,MBRCONTAINS,MBRDISJOINT,MBREQUAL,' + 'MBRINTERSECTS,MBROVERLAPS,MBRTOUCHES,MBRWITHIN,MD5,MEDIAN,MICROSECOND,' + 'MID,MIN,MINUTE,MLINEFROMTEXT,MLINEFROMWKB,MONTH,MONTHNAME,' + 'MPOINTFROMTEXT,MPOINTFROMWKB,MPOLYFROMTEXT,MPOLYFROMWKB,' + 'MULTILINESTRINGFROMTEXT,MULTILINESTRINGFROMWKB,MULTIPOINTFROMTEXT,' + 'MULTIPOINTFROMWKB,MULTIPOLYGONFROMTEXT,MULTIPOLYGONFROMWKB,NAME_CONST,' + 'NEXTVAL,NOW,NTH_VALUE,NTILE,NULLIF,NUMGEOMETRIES,NUMINTERIORRINGS,' + 'NUMPOINTS,OCT,OCTET_LENGTH,OLD_PASSWORD,ORD,OVERLAPS,PARENTHESES,' + 'PASSWORD,PERCENTILE_CONT,PERCENTILE_DISC,PERCENT_RANK,PERIOD_ADD,' + 'PERIOD_DIFF,PI,POINTFROMTEXT,POINTFROMWKB,POINTN,POINTONSURFACE,' + 'POLYFROMTEXT,POLYFROMWKB,POLYGONFROMTEXT,POLYGONFROMWKB,POSITION,POW,' + 'POWER,QUARTER,QUOTE,RADIANS,RAND,RANK,REGEXP_INSTR,REGEXP_REPLACE,' + 'REGEXP_SUBSTR,RELEASE_LOCK,REVERSE,RIGHT,ROUND,ROW_COUNT,ROW_NUMBER,' + 'RPAD,RTRIM,SECOND,SEC_TO_TIME,SESSION_USER,SETVAL(),SHA1,SHA2,SIGN,SIN,' + 'SLEEP,SOUNDEX,SPACE,SPIDER_BG_DIRECT_SQL,SPIDER_COPY_TABLES,' + 'SPIDER_DIRECT_SQL,SPIDER_FLUSH_TABLE_MON_CACHE,SQRT,SRID,STARTPOINT,' + 'STD,STDDEV,STDDEV_POP,STDDEV_SAMP,STRCMP,STR_TO_DATE,ST_AREA,' + 'ST_ASBINARY,ST_ASTEXT,ST_ASWKB,ST_ASWKT,ST_BOUNDARY,ST_BUFFER,' + 'ST_CENTROID,ST_CONTAINS,ST_CONVEXHULL,ST_CROSSES,ST_DIFFERENCE,' + 'ST_DIMENSION,ST_DISJOINT,ST_DISTANCE,ST_ENDPOINT,ST_ENVELOPE,ST_EQUALS,' + 'ST_EXTERIORRING,ST_GEOMCOLLFROMTEXT,ST_GEOMCOLLFROMWKB,' + 'ST_GEOMETRYCOLLECTIONFROMTEXT,ST_GEOMETRYCOLLECTIONFROMWKB,' + 'ST_GEOMETRYFROMTEXT,ST_GEOMETRYFROMWKB,ST_GEOMETRYN,ST_GEOMETRYTYPE,' + 'ST_GEOMFROMTEXT,ST_GEOMFROMWKB,ST_INTERIORRINGN,ST_INTERSECTION,' + 'ST_INTERSECTS,ST_ISCLOSED,ST_ISEMPTY,ST_ISRING,ST_ISSIMPLE,ST_LENGTH,' + 'ST_LINEFROMTEXT,ST_LINEFROMWKB,ST_LINESTRINGFROMTEXT,' + 'ST_LINESTRINGFROMWKB,ST_NUMGEOMETRIES,ST_NUMINTERIORRINGS,ST_NUMPOINTS,' + 'ST_OVERLAPS,ST_POINTFROMTEXT,ST_POINTFROMWKB,ST_POINTN,' + 'ST_POINTONSURFACE,ST_POLYFROMTEXT,ST_POLYFROMWKB,ST_POLYGONFROMTEXT,' + 'ST_POLYGONFROMWKB,ST_RELATE,ST_SRID,ST_SYMDIFFERENCE,ST_TOUCHES,' + 'ST_UNION,ST_WITHIN,ST_X,ST_Y,SUBDATE,SUBSTR,SUBSTRING,SUBSTRING_INDEX,' + 'SUBTIME,SUM,SYSDATE,SYSTEM_USER,TAN,TIMEDIFF,TIMESTAMPADD,' + 'TIMESTAMPDIFF,TIME_FORMAT,TIME_TO_SEC,TOUCHES,TO_BASE64,TO_DAYS,' + 'TO_SECONDS,TRIM,TRUNCATE,UCASE,UNCOMPRESS,UNCOMPRESSED_LENGTH,UNHEX,' + 'UNIX_TIMESTAMP,UPDATEXML,UPPER,USER,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,' + 'UUID,UUID_SHORT,VARIANCE,VAR_POP,VAR_SAMP,VERSION,WEEK,WEEKDAY,' + 'WEEKOFYEAR,WEIGHT_STRING,WITHIN,X,Y,YEARWEEK'; //---Ingres--------------------------------------------------------------------- // keywords IngresKW: UnicodeString = 'ABORT,ACTIVATE,ADD,ADDFORM,AFTER,AGGREGATE,ALL,ALTER,AND,APPEND,ARRAY,' + 'AS,ASC,AT,AUDIT_LOG,AUTHORIZATION,AUTOCOMMIT,AVGU,BEFORE,BEGIN,BETWEEN,' + 'BREAKDISPLAY,BY,BYREF,CACHE,CALL,CALLFRAME,CALLPROC,CASCADE,CHECK,CLEAR,' + 'CLEARROW,CLOSE,COLUMN,COMMAND,COMMENT,COMMIT,CONNECT,CONSTRAINT,' + 'CONTINUE,COPY,COUNTU,CPUFACTOR,CREATE,CURRENT,CURRENT_USER,CURSOR,DATA,' + 'DATAHANDLER,DATE_FORMAT,DBEVENT,DDL_CONCURRENCY,DEADLOCK,DECLARE,' + 'DEFAULT,DEFERRED,DEFINE,DELETE,DELETEROW,DESC,DESCRIBE,DESCRIPTOR,' + 'DESTROY,DIRECT,DISABLE,DISCONNECT,DISPLAY,DISTINCT,DISTRIBUTE,DO,DOWN,' + 'DROP,ELSE,ELSEIF,ENABLE,END,ENDDATA,ENDDISPLAY,ENDFORMS,ENDIF,ENDLOOP,' + 'ENDRETRIEVE,ENDSELECT,ENDWHILE,ERROR,ESCAPE,EXCLUDE,EXCLUDING,EXEC,' + 'EXECUTE,EXISTS,EXIT,FETCH,FIELD,FINALIZE,FOR,FOREIGN,FORMDATA,FORMINIT,' + 'FORMS,FROM,FULL,GET,GETFORM,GETOPER,GETROW,GLOBAL,GOTO,GRANT,GRANTED,' + 'HAVING,HELP,HELP_FORMS,HELP_FRS,HELPFILE,IDENTIFIED,IF,IIMESSAGE,' + 'IIPRINTF,IIPROMPT,IISTATEMENT,IMMEDIATE,IMPORT,IN,INCLUDE,INDEX,' + 'INDICATOR,INGRES,INITIALIZE,INITTABLE,INNER,INQUIRE_EQUEL,INQUIRE_FORMS,' + 'INQUIRE_FRS,INQUIRE_INGRES,INSERT,INSERTROW,INSTALLATION,INTEGRITY,INTO,' + 'IO_TRACE,IS,J_FREESZ1,J_FREESZ2,J_FREESZ3,J_FREESZ4,J_SORTBUFSZ,' + 'JCPUFACTOR,JOIN,JOINOP,JOURNALING,KEY,LEVEL,LIKE,LINK,LOADTABLE,LOCAL,' + 'LOCATION,LOCK_TRACE,LOG_TRACE,LOGDBEVENTS,LOGGING,MAXCOST,MAXCPU,' + 'MAXPAGE,MENUITEM,MESSAGE,MODE,MODIFY,MODULE,MONEY_FORMAT,MONEY_PREC,' + 'MOVE,NATURAL,NEXT,NODEADLOCK,NOECHO,NOIO_TRACE,NOJIONOP,NOJOURNALING,' + 'NOLOCK_TRACE,NOLOG_TRACE,NOLOGDBEVENTS,NOLOGGING,NOMAXCOST,NOMAXCPU,' + 'NOMAXIO,NOMAXPAGE,NOMAXQUERY,NOMAXROW,NOOPTIMIZEONLY,NOPRINTDBEVENTS,' + 'NOPRINTQRY,NOPRINTRULES,NOQEP,NORULES,NOSQL,NOSTATISTICS,NOT,NOTRACE,' + 'NULL,OF,ON,ONLY,OPEN,OPTIMIZEONLY,OPTION,OR,ORDER,OUT,PARAM,PERMIT,' + 'PREPARE,PRESERVE,PRIMARY,PRINT,PRINTDBEVENTS,PRINTQRY,PRINTSCREEN,' + 'PRIVILEGES,PROCEDURE,PROMPT,PUBLIC,PUT,PUTFORM,PUTOPER,PUTROW,QBUFSIZE,' + 'QEP,QRY,QUALIFICATION,QUERY_SIZE,RAISE,RANGE,READONLY,REDISPLAY,' + 'REFERENCES,REFERENCING,REGISTER,RELOCATE,REMOVE,RENAME,REPEAT,REPEATED,' + 'REPLACE,REPLICATE,RESTRICT,RESULT_STRUCTURE,RESUME,RET_INTO,RETRIEVE,' + 'RETURN,RETURNING,REVOKE,ROLLBACK,ROWS,RULE,RUN,SAVE,SAVEPOINT,SCHEMA,' + 'SCREEN,SCROLL,SCROLLDOWN,SCROLLUP,SECTION,SECURITY_ALARM,SECURITY_AUDIT,' + 'SELECT,SESSION,SET,SET_4GL,SET_EQUAL,SET_FORMS,SET_FRS,SET_INGRES,' + 'SET_SQL,SHORT_REMARK,SLEEP,SOME,SORT,SORTBUFSIZE,SQL,STATISTICS,STOP,' + 'SUBMENU,SUMU,SYNONYM,SYSTEM,TABLE,TABLEDATA,TEWMPORARY,THEN,TO,TRACE,' + 'TRANSACTION,TYPE,UNION,UNIQUE,UNLOADTABLE,UNTIL,UP,UPDATE,USER,USING,' + 'VALIDATE,VALIDROW,VALUES,VIEW,WHEN,WHENEVER,WHERE,WHILE,WITH,WORK'; // types IngresTypes: UnicodeString = 'BYTE,C,CHAR,CHARACTER,DATE,DECIMAL,FLOAT,FLOAT4,FLOAT8,INTEGER,INTEGER1,' + 'INTEGER2,INTEGER4,LONG,MONEY,OBJECT_KEY,SECURITY_LABEL,SHORT,SMALLINT,' + 'TABLE_KEY,TEXT,VARCHAR,VARYING'; // functions IngresFunctions: UnicodeString = '_BINTIM,_CPU_MS,_DATE,_DIO_CNT,_ET_SEC,_PFAULT_CNT,_TIME,_VERSION,ABS,' + 'ANY,ATAN,AUTOCOMMIT_STATE,AVG,BIOCNT,CHAREXTRACT,COLLATION,CONCAT,' + 'CONNECT_TIME_LIMIT,COS,COUNT,CREATE_PROCEDURE,CREATE_TABLE,DATABASE,' + 'DATE_GMT,DATE_PART,DATE_TRUNC,DB_ADMIN,DB_DELIMITED_CASE,DB_NAME_CASE,' + 'DBA,DBMS_BIO,DBMS_CPU,DBMS_DIO,DBMSINFO,DOW,EXP,FLATTEN_AGGREGATE,' + 'FLATTEN_NONE,FLATTEN_OPTIMIZE,FLATTEN_SINGLETON,GROUP,HEX,' + 'IDLE_TIME_LIMIT,IFNULL,INITIAL_USER,INQUIRE_SQL,INT1,INT2,INT4,INTERVAL,' + 'LANGUAGE,LEFT,LENGTH,LOCATE,LOCKMODE,LOG,LONG_BYTE,LONG_VARCHAR,' + 'LOWERCASE,MAX,MAXCONNECT,MAXIDLE,MAXIO,MAXQUERY,MAXROW,MIN,MOD,NOTRIM,' + 'ON_ERROR_STATE,PAD,QUERY_IO_LIMIT,QUERY_LANGUAGE,QUERY_ROW_LIMIT,RIGHT,' + 'ROLE,SECURITY_AUDIT_LOG,SECURITY_AUDIT_STATE,SECURITY_PRIV,' + 'SELECT_SYSCAT,SERVER_CLASS,SESSION_ID,SESSION_PRIORITY,' + 'SESSION_PRIORITY_LIMIT,SESSION_PRIV,SESSION_SECLABEL,SESSION_USER,SHIFT,' + 'SIN,SIZE,SQRT,SQUEEZE,SUM,SYSTEM_USER,TABLE_STATISTICS,TERMINAL,' + 'TRANSACTION_STATE,TRIM,UPDATE_ROWCNT,UPDATE_SYSCAT,UPPERCASE,USERNAME,' + 'VARBYTE'; //---Nexus---------------------------------------------------------------------- // keywords NexusKW: UnicodeString = 'ABSOLUTE,AFTER,ALTER,ANY,ASC,ASSERT,ATOMIC,' + 'ADD,ALL,AND,AS,ASSEMBLY,AUTHORIZATION,BEFORE,' + 'BETWEEN,BINARY,BLOCK,BY,BEGIN,' + 'BLOCKSIZE,CALL,CASCADE,CAST,,' + 'CHARACTERS,CLR,CLOSE,CODEPAGE,COLLATION,COMMIT,CONTAINS,' + 'CROSS,CALLED,CASE,CATCH,' + 'CHECK,COALESCE,COLLATE,COLUMN,CONSTRAINT,' + 'CREATE,CURSOR,DATA,DECLARE,' + 'DELETE,DESC,DETERMINISTIC,DO,DROP,DAY,DEFAULT,DELETING,' + 'DESCRIPTION,DISTINCT,EACH,ELSEIF,ENCRYPT,END,EQUIVALENT,' + 'ESCAPE,EXECUTE,EXISTS,ELSE,EMPTY,ENCRYPTION,ENGINE,' + 'EXCEPT,EXTERNAL,FALSE,FETCH,FETCH_STATUS,FOR,FROM,FUNCTION,FIRST,FOREIGN,' + 'FULL,HAVING,HOUR,GLOBAL,GROW,GROUP,GROWSIZE,IDENTITY,IGNORE,' + 'IMMEDIATE,IN,INITIAL,INNER,INPUT,INSERTING,INTERVAL,IS,IF,INDEX,' + 'INITIALSIZE,INOUT,INSERT,INTERSECT,INTO,ITERATE,JOIN,' + 'KANA,KEY,LANGUAGE,LEAVE,LIKE,LOCALE,' + 'LARGE,LAST,LEFT,LOCAL,MATCH,' + 'MINUTE,MODIFIES,MONTH,NAME,NATURAL,NEXT,NONSPACE,' + 'NULLIF,NATIONAL,' + 'NEW,NO,NORESTRICT,NOT,NULL,NULLS,OBJECT,OCTETS,OF,ON,OUT,OCTET_LENGTH,' + 'ODD,OLD,OPEN,OR,ORDER,OUTER,PARTIAL,PERCENT,PRECISION,' + 'PRIOR,PROCEDURE,PASSWORDS,PRIMARY,REFERENCES,RELATIVE,REMOVE,RESTRICT,' + 'RETURNS,ROLLBACK,ROUTINE,READS,' + 'REFERENCING,REPEAT,RETURN,RIGHT,ROW,SECOND,' + 'SERIALIZABLE,SET,SIMPLE,SNAPSHOT,SORT,' + 'STRING,SELECT,SIGNAL,' + 'SOME,SQL,START,STORAGE,SYMBOLS,TABLE,' + 'TOP,TRANSACTION,TRY,THEN,' + 'TO,TRIGGER,TRUE,TYPE,UNION,UNKNOWN,UPDATE,' + 'UNIQUE,UNTIL,UPDATING,USE,VALUES,VARYING,' + 'VIEW,WHEN,WHILE,WITH,WORK,WHERE,WIDTH,YEAR'; // functions NexusFunctions: UnicodeString = 'ABS,ATAN,ATAN2,ATN2,AVG,BOTH,BROUND,CEIL,CEILING,CHAR_LENGTH,CHARACTER_LENGTH,'+ 'CHR,COS,COUNT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,ERROR_MESSAGE,EXP,EXTRACT,'+ 'FLOOR,LASTAUTOINC,LEADING,LIST,LN,LOCALTIME,LOCALTIMESTAMP,LOWER,MAX,MED,MIN,MOD,NEWGUID,OCTECT,'+ 'OCTECT_LENGTH,ORD,PI,POSITION,POWER,RAND,ROUND,ROWSAFFECTED,ROWSREAD,SESSION_USER,SIN,SQRT,STD,'+ 'SUBSTRING,SUM,SYSTEM_ROW#,TOSTRING,TOSTRINGLEN,TRAILING,TRIM,UPPER,USER,USING'; // types NexusTypes: UnicodeString = 'CHARACTER,CHAR,NULLSTRING,SHORTSTRING,SINGLECHAR,VARCHAR,' + 'CLOB,TEXT,NSINGLECHAR,NCHAR,' + 'NVARCHAR,NCLOB,BLOB,IMAGE,NUMERIC,DECIMAL,DEC,BYTE,TINYINT,SHORTINT,SMALLINT,INTEGER,INT,' + 'AUTOINC,BIGINT,LARGEINT,WORD,DWORD,FLOAT,REAL,DOUBLE,EXTENDED,MONEY,' + 'BOOLEAN,BOOL,DATE,TIME,TIMESTAMP,DATETIME,GUID,BYTEARRAY,RECREV'; //---Informix------------------------------------------------------------------- // keywords InformixKW: Unicodestring = 'ABSOLUTE,ACCESS,ACCESS_METHOD,ACTIVE,ADD,AFTER,AGGREGATE,ALIGNMENT,ALL,' + 'ALL_ROWS,ALLOCATE,ALTER,AND,ANSI,ANY,APPEND,AS,ASC,AT,ATTACH,AUDIT,' + 'AUTHORIZATION,AUTO,AUTOFREE,AVOID_EXECUTE,AVOID_SUBQF,BEFORE,BEGIN,' + 'BETWEEN,BINARY,BOTH,BUFFERED,BUILTIN,BY,CACHE,CANNOTHASH,CASCADE,CHECK,' + 'CLASS,CLIENT,CLOSE,CLUSTER,CLUSTERSIZE,COARSE,COBOL,CODESET,COLLATION,' + 'COLLECTION,COLUMN,COMMIT,COMMITTED,COMMUTATOR,CONCURRENT,CONNECT,' + 'CONNECTION,CONST,CONSTRAINT,CONSTRAINTS,CONSTRUCTOR,COPY,COSTFUNC,' + 'CRCOLS,CREATE,CROSS,CURRENT_ROLE,CURSOR,CYCLE,DATABASE,DATAFILES,' + 'DATASKIP,DBA,DBDATE,DBPASSWORD,DEALLOCATE,DEBUG,DEC_T,DECLARE,DEFAULT,' + 'DEFERRED,DEFERRED_PREPARE,DELAY,DELETE,DELIMITER,DELUXE,DEREF,DESC,' + 'DESCRIBE,DESCRIPTOR,DETACH,DIAGNOSTICS,DIRECTIVES,DIRTY,DISABLED,' + 'DISCONNECT,DISTINCT,DISTRIBUTEBINARY,DISTRIBUTESREFERENCES,' + 'DISTRIBUTIONS,DOCUMENT,DOMAIN,DONOTDISTRIBUTE,DORMANT,DROP,DTIME_T,EACH,' + 'ELIF,ELSE,ENABLED,ENCRYPTION,END,ENUM,ENVIRONMENT,ESCAPE,EXCLUSIVE,EXEC,' + 'EXECUTE,EXECUTEANYWHERE,EXISTS,EXPLAIN,EXPLICIT,EXPRESS,EXPRESSION,' + 'EXTENT,EXTERNAL,FALSE,FAR,FETCH,FILE,FILLFACTOR,FILTERING,FIRST,' + 'FIRST_ROWS,FIXCHAR,FIXED,FLUSH,FOREIGN,FORMAT,FORTRAN,FOUND,FRACTION,' + 'FRAGMENT,FREE,FROM,FULL,FUNCTION,GENERAL,GET,GK,GLOBAL,GO,GOTO,GRANT,' + 'GROUP,HANDLESNULLS,HASH,HAVING,HIGH,HINT,HOLD,HOUR,HYBRID,IFX_INT8_T,' + 'IFX_LO_CREATE_SPEC_T,IFX_LO_STAT_T,IMMEDIATE,IMPLICIT,IN,INACTIVE,' + 'INCREMENT,INDEX,INDEXES,INDICATOR,INFORMIX,INIT,INLINE,INNER,INOUT,' + 'INSERT,INSTEAD,INTEG,INTERNAL,INTERNALLENGTH,INTO,INTRVL_T,IS,' + 'ISCANONICAL,ISOLATION,ITEM,ITERATOR,JOIN,KEEP,KEY,LABELEQ,LABELGE,' + 'LABELGLB,LABELGT,LABELLE,LABELLT,LABELLUB,LABELTOSTRING,LANGUAGE,LAST,' + 'LEADING,LEFT,LEVEL,LIKE,LIMIT,LISTING,LOAD,LOC_T,LOCAL,LOCATOR,LOCK,' + 'LOCKS,LOG,LONG,LOW,MATCHES,MAXERRORS,MAXLEN,MAXVALUE,MEDIAN,MEDIUM,' + 'MEMORY_RESIDENT,MIDDLE,MINUTE,MINVALUE,MODE,MODERATE,MODIFY,MODULE,' + 'MOUNTING,NAME,NEGATOR,NEW,NEXT,NO,NOCACHE,NOCYCLE,NOMAXVALUE,NOMIGRATE,' + 'NOMINVALUE,NON_RESIDENT,NONE,NOORDER,NORMAL,NOT,NOTEMPLATEARG,NULL,' + 'OF,OFF,OLD,ONLINE,ONLY,OPAQUE,OPCLASS,OPEN,OPERATIONAL,OPTCOMPIND,' + 'OPTICAL,OPTIMIZATION,OPTION,OR,ORDER,OUT,OUTER,OUTPUT,PAGE,' + 'PARALLELIZABLE,PARAMETER,PARTITION,PASCAL,PASSEDBYVALUE,PASSWORD,' + 'PDQPRIORITY,PERCALL_COST,PLI,PLOAD,PREPARE,PREVIOUS,PRIMARY,PRIOR,' + 'PRIVATE,PRIVILEGES,PROCEDURE,PUBLIC,PUT,RAW,READ,RECORDEND,REF,' + 'REFERENCES,REFERENCING,REGISTER,REJECTFILE,RELATIVE,RELEASE,REMAINDER,' + 'RENAME,REOPTIMIZATION,REPEATABLE,REPLICATION,RESERVE,RESOLUTION,' + 'RESOURCE,RESTART,RESTRICT,RESUME,RETAIN,RETURNING,RETURNS,REUSE,REVOKE,' + 'RIGHT,ROBIN,ROLE,ROLLBACK,ROLLFORWARD,ROUTINE,ROWID,ROWIDS,ROWS,SAMEAS,' + 'SAMPLES,SAVE,SCHEDULE,SCHEMA,SCRATCH,SCROLL,SECOND,SECONDARY,SECTION,' + 'SELCONST,SELECT,SELFUNC,SEQUENCE,SERIALIZABLE,SERVERUUID,SESSION,SHARE,' + 'SHORT,SIGNED,SIZE,SKALL,SKINHIBIT,SKIP,SKSHOW,SOME,SPECIFIC,SQL,SQLCODE,' + 'SQLCONTEXT,SQLERROR,SQLSTATE,SQLWARNING,STABILITY,STACK,STANDARD,START,' + 'STATIC,STATISTICS,STEP,STOP,STORAGE,STRATEGIES,STRING,STRINGTOLABEL,' + 'STRUCT,STYLE,SUPPORT,SYNC,SYNONYM,TABLE,TEMP,TEMPLATE,TEST,TIME,TIMEOUT,' + 'TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUE,TRUNCATE,TYPE,TYPEDEF,' + 'TYPEID,TYPENAME,TYPEOF,UNCOMMITTED,UNDER,UNION,UNIQUE,UNKNOWN,UNLOAD,' + 'UNLOCK,UNSIGNED,UPDATE,USAGE,USE_SUBQF,USING,VALUE,VALUES,VAR,VARIABLE,' + 'VARIANT,VIEW,VIOLATIONS,VOID,VOLATILE,WAIT,WARNING,WHERE,WITH,WITHOUT,' + 'WORK,WRITE,XADATASOURCE,XID,XLOAD,XUNLOAD'; // types InformixTypes: UnicodeString = 'BLOB,BOOLEAN,BYTE,CHAR,CHARACTER,VARYING,CLOB,DATE,DATETIME,DEC,DECIMAL,' + 'DOUBLE,PRECISION,FLOAT,INT,INT8,INTEGER,INTERVAL,LIST,LVARCHAR,MONEY,' + 'MULTISET,NCHAR,NUMERIC,NVARCHAR,REAL,ROW,SERIAL,SERIAL8,SET,SMALLFLOAT,' + 'SMALLINT,TEXT,VARCHAR'; // PLSQL keywords InformixPLSQLKW: UnicodeString = 'CALL,CONTINUE,DEFINE,ERROR,EXCEPTION,EXIT,FOR,FOREACH,IF,LET,ON,RAISE,' + 'RETURN,SYSTEM,TRACE,WHENEVER,WHILE'; // functions InformixFunctions: UnicodeString = 'ABS,ACOS,ASIN,ATAN,ATAN2,AVG,CARDINALITY,CASE,CAST,CHARACTER_LENGTH,' + 'CHAR_LENGTH,COS,COUNT,CURRENT,DAY,DBINFO,DBSERVERNAME,DECODE,' + 'DECRYPT_CHAR,DECRYPT_BINARY,DEFAULT_ROLE,ENCRYPT_AES,ENCRYPT_TDES,EXP,' + 'EXTEND,FILETOBLOB,FILETOCLOB,GETHINT,HEX,IFX_ALLOW_NEWLINE,' + 'IFX_REPLACE_MODULE,INITCAP,LENGTH,LOCOPY,LOGN,LOG10,LOTOFILE,LOWER,LPAD,' + 'MAX,MDY,MIN,MOD,MONTH,NVL,OCTET_LENGTH,POW,RANGE,REPLACE,ROOT,ROUND,' + 'RPAD,SIN,SITENAME,SQRT,STDEV,SUBSTR,SUBSTRING,SUM,TAN,THEN,TO_CHAR,TO_DATE,' + 'TODAY,TRIM,TRUNC,UNITS,UPPER,USER,VARIANCE,WEEKDAY,WHEN,YEAR'; function TSynSQLSyn.HashKey(Str: PWideChar): Integer; var FoundDoubleMinus: Boolean; function GetOrd: Integer; begin case Str^ of '_': Result := 1; 'a'..'z': Result := 2 + Ord(Str^) - Ord('a'); 'A'..'Z': Result := 2 + Ord(Str^) - Ord('A'); '@': if FDialect in [sqlMSSQL7, sqlMSSQL2K] then Result := 24 else Result := 0; else Result := 0; end; end; begin Result := 0; while IsIdentChar(Str^) do begin FoundDoubleMinus := (Str^ = '-') and ((Str + 1)^ = '-'); if FoundDoubleMinus then Break; {$IFOPT Q-} Result := 2 * Result + GetOrd; {$ELSE} Result := (2 * Result + GetOrd) and $FFFFFF; {$ENDIF} Inc(Str); end; Result := Result and $FF; // 255 if Assigned(FToIdent) then FStringLen := Str - FToIdent else FStringLen := 0; end; function TSynSQLSyn.IdentKind(MayBe: PWideChar): TtkTokenKind; var Entry: TSynHashEntry; begin FToIdent := MayBe; Entry := FKeywords[HashKey(MayBe)]; while Assigned(Entry) do begin if Entry.KeywordLen > FStringLen then Break else if Entry.KeywordLen = FStringLen then if IsCurrentToken(Entry.Keyword) then begin Result := TtkTokenKind(Entry.Kind); Exit; end; Entry := Entry.Next; end; {$IFDEF USE_TABLE_DICTIONARY} if FTableDict.ContainsKey(SynWideLowerCase(Copy(StrPas(FToIdent), 1, FStringLen))) then Result := tkTableName else {$ENDIF} Result := tkIdentifier; end; constructor TSynSQLSyn.Create(AOwner: TComponent); begin inherited Create(AOwner); FCaseSensitive := False; FKeywords := TSynHashEntryList.Create; FProcNames := TUnicodeStringList.Create; TUnicodeStringList(FProcNames).OnChange := ProcNamesChanged; FTableNames := TUnicodeStringList.Create; TUnicodeStringList(FTableNames).OnChange := TableNamesChanged; {$IFDEF USE_TABLE_DICTIONARY} FTableDict := TDictionary.Create; {$ENDIF} FFunctionNames := TunicodeStringList.Create; TUnicodeStringList(FFunctionNames).OnChange := FunctionNamesChanged; FCommentAttri := TSynHighlighterAttributes.Create(SYNS_AttrComment, SYNS_FriendlyAttrComment); FCommentAttri.Style := [fsItalic]; AddAttribute(FCommentAttri); FConditionalCommentAttri := TSynHighlighterAttributes.Create(SYNS_AttrConditionalComment, SYNS_FriendlyAttrConditionalComment); FConditionalCommentAttri.Style := [fsItalic]; AddAttribute(FConditionalCommentAttri); FConsoleOutputAttri := TSynHighlighterAttributes.Create(SYNS_AttrConsoleOutput, SYNS_FriendlyAttrConsoleOutput); FConsoleOutputAttri.Style := [fsBold, fsUnderline]; AddAttribute(FConsoleOutputAttri); FDataTypeAttri := TSynHighlighterAttributes.Create(SYNS_AttrDataType, SYNS_FriendlyAttrDataType); FDataTypeAttri.Style := [fsBold]; AddAttribute(FDataTypeAttri); FDefaultPackageAttri := TSynHighlighterAttributes.Create(SYNS_AttrDefaultPackage, SYNS_FriendlyAttrDefaultPackage); FDefaultPackageAttri.Style := [fsBold]; AddAttribute(FDefaultPackageAttri); FDelimitedIdentifierAttri := TSynHighlighterAttributes.Create(SYNS_AttrDelimitedIdentifier, SYNS_FriendlyAttrDelimitedIdentifier); AddAttribute(FDelimitedIdentifierAttri); FExceptionAttri := TSynHighlighterAttributes.Create(SYNS_AttrException, SYNS_FriendlyAttrException); FExceptionAttri.Style := [fsItalic]; AddAttribute(FExceptionAttri); FFunctionAttri := TSynHighlighterAttributes.Create(SYNS_AttrFunction, SYNS_FriendlyAttrFunction); FFunctionAttri.Style := [fsBold]; AddAttribute(FFunctionAttri); FIdentifierAttri := TSynHighlighterAttributes.Create(SYNS_AttrIdentifier, SYNS_FriendlyAttrIdentifier); AddAttribute(FIdentifierAttri); FKeyAttri := TSynHighlighterAttributes.Create(SYNS_AttrKey, SYNS_FriendlyAttrKey); FKeyAttri.Style := [fsBold]; AddAttribute(FKeyAttri); FNumberAttri := TSynHighlighterAttributes.Create(SYNS_AttrNumber, SYNS_FriendlyAttrNumber); AddAttribute(FNumberAttri); FPLSQLAttri := TSynHighlighterAttributes.Create(SYNS_AttrPLSQL, SYNS_FriendlyAttrPLSQL); FPLSQLAttri.Style := [fsBold]; AddAttribute(FPLSQLAttri); FSpaceAttri := TSynHighlighterAttributes.Create(SYNS_AttrSpace, SYNS_FriendlyAttrSpace); AddAttribute(FSpaceAttri); FSQLPlusAttri:=TSynHighlighterAttributes.Create(SYNS_AttrSQLPlus, SYNS_FriendlyAttrSQLPlus); FSQLPlusAttri.Style := [fsBold]; AddAttribute(FSQLPlusAttri); FStringAttri := TSynHighlighterAttributes.Create(SYNS_Attrstring, SYNS_FriendlyAttrstring); AddAttribute(FStringAttri); FSymbolAttri := TSynHighlighterAttributes.Create(SYNS_AttrSymbol, SYNS_FriendlyAttrSymbol); AddAttribute(FSymbolAttri); FProcNameAttri := TSynHighlighterAttributes.Create(SYNS_AttrProcName, SYNS_FriendlyAttrProcName); AddAttribute(FProcNameAttri); FTableNameAttri := TSynHighlighterAttributes.Create(SYNS_AttrTableName, SYNS_FriendlyAttrTableName); AddAttribute(FTableNameAttri); FVariableAttri := TSynHighlighterAttributes.Create(SYNS_AttrVariable, SYNS_FriendlyAttrVariable); AddAttribute(FVariableAttri); SetAttributesOnChange(DefHighlightChange); FDefaultFilter := SYNS_FilterSQL; FRange := rsUnknown; FDialect := sqlStandard; InitializeKeywordLists; end; destructor TSynSQLSyn.Destroy; begin FKeywords.Free; FProcNames.Free; FTableNames.Free; {$IFDEF USE_TABLE_DICTIONARY} FTableDict.Free; {$ENDIF} FFunctionNames.Free; inherited Destroy; end; procedure TSynSQLSyn.Assign(Source: TPersistent); begin inherited Assign(Source); if (Source is TSynSQLSyn) then SQLDialect := TSynSQLSyn(Source).SQLDialect; end; procedure TSynSQLSyn.AndSymbolProc; begin FTokenID := tkSymbol; Inc(Run); if CharInSet(FLine[Run], ['=', '&']) then Inc(Run); end; procedure TSynSQLSyn.AsciiCharProc; var IsEsc: Boolean; begin // Oracle SQL allows strings to go over multiple lines if FLine[Run] = #0 then NullProc else begin FTokenID := tkString; // else it's end of multiline string if SQLDialect <> sqlMySql then begin if (Run > 0) or (FRange <> rsString) or (FLine[Run] <> #39) then begin FRange := rsString; repeat Inc(Run); until IsLineEnd(Run) or (FLine[Run] = #39); end; if FLine[Run] = #39 then begin Inc(Run); FRange := rsUnknown; end; end else begin IsEsc := False; if (Run > 0) or (FRange <> rsString) or ((FLine[Run] <> #39) and (FLine[Run - 1] <> '\')) then begin FRange := rsString; repeat if FLine[Run] = '\' then IsEsc := not IsEsc else IsEsc := False; if (not IsEsc) and (FLine[Run + 1] = #39) then begin Inc(Run); Break; end; Inc(Run); until IsLineEnd(Run); end; if (FLine[Run] = #39) and (not IsEsc) then begin Inc(Run); FRange := rsUnknown; end; end; end; end; procedure TSynSQLSyn.CRProc; begin FTokenID := tkSpace; Inc(Run); if FLine[Run] = #10 then Inc(Run); end; procedure TSynSQLSyn.EqualProc; begin FTokenID := tkSymbol; Inc(Run); if CharInSet(FLine[Run], ['=', '>']) then Inc(Run); end; procedure TSynSQLSyn.GreaterProc; begin FTokenID := tkSymbol; Inc(Run); if CharInSet(FLine[Run], ['=', '>']) then Inc(Run); end; procedure TSynSQLSyn.IdentProc; var FoundDoubleMinus: Boolean; begin FTokenID := IdentKind((FLine + Run)); Inc(Run, FStringLen); if FTokenID in [tkComment, tkConsoleOutput] then begin while not IsLineEnd(Run) do Inc(Run); end else while IsIdentChar(FLine[Run]) do begin FoundDoubleMinus := (FLine[Run] = '-') and (FLine[Run + 1] = '-'); if FoundDoubleMinus then Break; Inc(Run); end; end; procedure TSynSQLSyn.LFProc; begin FTokenID := tkSpace; Inc(Run); end; procedure TSynSQLSyn.LowerProc; begin FTokenID := tkSymbol; Inc(Run); case FLine[Run] of '=': Inc(Run); '<': begin Inc(Run); if FLine[Run] = '=' then Inc(Run); end; end; end; procedure TSynSQLSyn.MinusProc; begin Inc(Run); if (FLine[Run] = '-') and ((FDialect <> sqlMySQL) or IsWhiteChar(FLine[Run+1])) then begin FTokenID := tkComment; repeat Inc(Run); until IsLineEnd(Run); end else FTokenID := tkSymbol; end; procedure TSynSQLSyn.HashProc; begin if SQLDialect = sqlMySql then begin FTokenID := tkComment; repeat Inc(Run); until IsLineEnd(Run); end else begin Inc(Run); FTokenID := tkUnknown; end; end; procedure TSynSQLSyn.NullProc; begin FTokenID := tkNull; Inc(Run); end; procedure TSynSQLSyn.NumberProc; function IsNumberChar: Boolean; begin case FLine[Run] of '0'..'9', '.', '-': Result := True; else Result := False; end; end; begin Inc(Run); FTokenID := tkNumber; while IsNumberChar do begin case FLine[Run] of '.': if FLine[Run + 1] = '.' then Break; end; Inc(Run); end; end; procedure TSynSQLSyn.OrSymbolProc; begin FTokenID := tkSymbol; Inc(Run); if CharInSet(FLine[Run], ['=', '|']) then Inc(Run); end; procedure TSynSQLSyn.PlusProc; begin FTokenID := tkSymbol; Inc(Run); if CharInSet(FLine[Run], ['=', '+']) then Inc(Run); end; procedure TSynSQLSyn.FunctionNamesChanged(Sender: TObject); begin InitializeKeywordLists; end; procedure TSynSQLSyn.ProcNamesChanged(Sender: TObject); begin InitializeKeywordLists; end; procedure TSynSQLSyn.SlashProc; begin Inc(Run); case FLine[Run] of '*': begin if (SQLDialect = sqlMySql) and (FLine[Run + 1] = '!') then begin FRange := rsConditionalComment; FTokenID := tkConditionalComment; end else begin FRange := rsComment; FTokenID := tkComment; end; repeat Inc(Run); if (FLine[Run] = '*') and (FLine[Run + 1] = '/') then begin FRange := rsUnknown; Inc(Run, 2); Break; end; until IsLineEnd(Run); end; '=': begin Inc(Run); FTokenID := tkSymbol; end; '/': begin if (SQLDialect = sqlNexus) then begin FTokenID := tkComment; repeat Inc(Run); until IsLineEnd(Run); end; end else FTokenID := tkSymbol; end; end; procedure TSynSQLSyn.SpaceProc; begin Inc(Run); FTokenID := tkSpace; while (FLine[Run] <= #32) and not IsLineEnd(Run) do Inc(Run); end; procedure TSynSQLSyn.QuoteProc; begin FTokenID := tkDelimitedIdentifier; Inc(Run); while not IsLineEnd(Run) do begin if FLine[Run] = #34 then begin Inc(Run); if FLine[Run] <> #34 then Break; end; Inc(Run); end; end; procedure TSynSQLSyn.BacktickProc; begin if SQLDialect = sqlMySql then begin FTokenID := tkDelimitedIdentifier; Inc(Run); while not IsLineEnd(Run) do begin if FLine[Run] = '`' then begin Inc(Run); if FLine[Run] <> '`' then Break; end; Inc(Run); end; end else begin Inc(Run); FTokenID := tkUnknown; end; end; procedure TSynSQLSyn.BracketProc; begin if SQLDialect in [sqlMSSQL7, sqlMSSQL2K] then begin FTokenID := tkDelimitedIdentifier; Inc(Run); while not IsLineEnd(Run) do begin if FLine[Run] = ']' then begin Inc(Run); if FLine[Run] <> ']' then Break; end; Inc(Run); end; end else begin Inc(Run); FTokenID := tkSymbol; end; end; procedure TSynSQLSyn.SymbolProc; begin Inc(Run); FTokenID := tkSymbol; end; procedure TSynSQLSyn.SymbolAssignProc; begin FTokenID := tkSymbol; Inc(Run); if FLine[Run] = '=' then Inc(Run); end; procedure TSynSQLSyn.VariableProc; var i: Integer; FoundDoubleMinus: Boolean; begin // MS SQL Server uses @@ to indicate system functions/variables if (SQLDialect in [sqlMSSQL7, sqlMSSQL2K]) and (FLine[Run] = '@') and (FLine[Run + 1] = '@') then IdentProc else if (SQLDialect in [sqlMySql, sqlOracle]) and (FLine[Run] = '@') then SymbolProc // Oracle uses the ':' character to indicate bind variables // Ingres II also uses the ':' character to indicate variables else if not (SQLDialect in [sqlOracle, sqlIngres]) and (FLine[Run] = ':') then SymbolProc else begin FTokenID := tkVariable; i := Run; repeat FoundDoubleMinus := (FLine[i] = '-') and (FLine[i + 1] = '-'); if FoundDoubleMinus then Break; Inc(i); until not IsIdentChar(FLine[i]); Run := i; end; end; procedure TSynSQLSyn.UnknownProc; begin Inc(Run); FTokenID := tkUnknown; end; procedure TSynSQLSyn.AnsiCProc; begin case FLine[Run] of #0: NullProc; #10: LFProc; #13: CRProc; else begin if FRange = rsConditionalComment then FTokenID := tkConditionalComment else FTokenID := tkComment; repeat if (FLine[Run] = '*') and (FLine[Run + 1] = '/') then begin FRange := rsUnknown; Inc(Run, 2); Break; end; Inc(Run); until IsLineEnd(Run); end; end; end; function TSynSQLSyn.IsKeyword(const AKeyword: UnicodeString): Boolean; var tk: TtkTokenKind; begin tk := IdentKind(PWideChar(AKeyword)); Result := tk in [tkDatatype, tkException, tkFunction, tkKey, tkPLSQL, tkDefaultPackage]; end; procedure TSynSQLSyn.Next; begin FTokenPos := Run; case FRange of rsComment, rsConditionalComment: AnsiCProc; rsConsoleOutput: begin while not IsLineEnd(Run) do Inc(Run); end; rsString: AsciiCharProc; else case FLine[Run] of #0: NullProc; #10: LFProc; #13: CRProc; #39: AsciiCharProc; '=': EqualProc; '>': GreaterProc; '<': LowerProc; '-': MinusProc; '#': HashProc; '|': OrSymbolProc; '+': PlusProc; '/': SlashProc; '&': AndSymbolProc; #34: QuoteProc; '`': BacktickProc; '[': BracketProc; ':', '@': VariableProc; 'A'..'Z', 'a'..'z', '_': IdentProc; '0'..'9': NumberProc; #1..#9, #11, #12, #14..#32: SpaceProc; '^', '%', '*', '!': SymbolAssignProc; '{', '}', '.', ',', ';', '?', '(', ')', ']', '~': SymbolProc; else UnknownProc; end; end; inherited; end; function TSynSQLSyn.GetDefaultAttribute(Index: Integer): TSynHighlighterAttributes; begin case Index of SYN_ATTR_COMMENT: Result := FCommentAttri; SYN_ATTR_IDENTIFIER: Result := FIdentifierAttri; SYN_ATTR_KEYWORD: Result := FKeyAttri; SYN_ATTR_STRING: Result := FStringAttri; SYN_ATTR_WHITESPACE: Result := FSpaceAttri; SYN_ATTR_SYMBOL: Result := FSymbolAttri; else Result := nil; end; end; function TSynSQLSyn.GetEol: Boolean; begin Result := Run = FLineLen + 1; end; function TSynSQLSyn.GetRange: Pointer; begin Result := Pointer(FRange); end; function TSynSQLSyn.GetTokenID: TtkTokenKind; begin Result := FTokenID; end; function TSynSQLSyn.GetTokenAttribute: TSynHighlighterAttributes; begin case GetTokenID of tkComment: Result := FCommentAttri; tkConditionalComment: Result := FConditionalCommentAttri; tkConsoleOutput: Result := FConsoleOutputAttri; tkDatatype: Result := FDataTypeAttri; tkDefaultPackage: Result := FDefaultPackageAttri; tkDelimitedIdentifier: Result := FDelimitedIdentifierAttri; tkException: Result := FExceptionAttri; tkFunction: Result := FFunctionAttri; tkIdentifier: Result := FIdentifierAttri; tkKey: Result := FKeyAttri; tkNumber: Result := FNumberAttri; tkPLSQL: Result := FPLSQLAttri; tkSpace: Result := FSpaceAttri; tkSQLPlus: Result := FSQLPlusAttri; tkString: Result := FStringAttri; tkSymbol: Result := FSymbolAttri; tkProcName: Result := FProcNameAttri; tkTableName: Result := FTableNameAttri; tkVariable: Result := FVariableAttri; tkUnknown: Result := FIdentifierAttri; else Result := nil; end; end; function TSynSQLSyn.GetTokenKind: Integer; begin Result := Ord(FTokenID); end; procedure TSynSQLSyn.ResetRange; begin FRange := rsUnknown; end; procedure TSynSQLSyn.SetRange(Value: Pointer); begin FRange := TRangeState(Value); end; function TSynSQLSyn.IsFilterStored: Boolean; begin Result := FDefaultFilter <> SYNS_FilterSQL; end; function TSynSQLSyn.IsIdentChar(AChar: WideChar): Boolean; begin case AChar of 'a'..'z', 'A'..'Z', '0'..'9', '_': Result := True; '-': Result := FDialect = sqlStandard; '#', '$': // TODO: check this case, ANSI code wasn't clear here if this is exclusively Oracle Result := FDialect in [sqlOracle, sqlNexus]; '@': Result := FDialect in [sqlMSSQL7, sqlMSSQL2K]; '!', '^', '{', '}','~': Result := FDialect = sqlNexus else Result := False; end; end; class function TSynSQLSyn.GetLanguageName: string; begin Result := SYNS_LangSQL; end; procedure TSynSQLSyn.DoAddKeyword(AKeyword: UnicodeString; AKind: Integer); var HashValue: Integer; begin AKeyword := SynWideLowerCase(AKeyword); HashValue := HashKey(PWideChar(AKeyword)); FKeywords[HashValue] := TSynHashEntry.Create(AKeyword, AKind); end; procedure TSynSQLSyn.SetTableNames(const Value: TUnicodeStrings); begin FTableNames.Assign(Value); end; procedure TSynSQLSyn.TableNamesChanged(Sender: TObject); begin InitializeKeywordLists; end; procedure TSynSQLSyn.PutTableNamesInKeywordList; var i: Integer; Entry: TSynHashEntry; begin for i := 0 to FTableNames.Count - 1 do begin Entry := FKeywords[HashKey(PWideChar(FTableNames[i]))]; while Assigned(Entry) do begin if SynWideLowerCase(Entry.Keyword) = SynWideLowerCase(FTableNames[i]) then Break; Entry := Entry.Next; end; if not Assigned(Entry) then {$IFDEF USE_TABLE_DICTIONARY} if not FTableDict.ContainsKey(SynWideLowerCase(FTableNames[i])) then FTableDict.Add(SynWideLowerCase(FTableNames[i]), True); {$ELSE} DoAddKeyword(FTableNames[i], Ord(tkTableName)); {$ENDIF} end; end; procedure TSynSQLSyn.PutFunctionNamesInKeywordList; var i: Integer; Entry: TSynHashEntry; begin for i := 0 to (FFunctionNames.Count - 1) do begin Entry := FKeywords[HashKey(PWideChar(FFunctionNames[i]))]; while Assigned(Entry) do begin if SynWideLowerCase(Entry.Keyword) = SynWideLowerCase(FFunctionNames[i]) then Break; Entry := Entry.Next; end; if not Assigned(Entry) then DoAddKeyword(FFunctionNames[i], Ord(tkFunction)); end; end; procedure TSynSQLSyn.PutProcNamesInKeywordList; var i: Integer; Entry: TSynHashEntry; begin for i := 0 to FProcNames.Count - 1 do begin Entry := FKeywords[HashKey(PWideChar(FProcNames[i]))]; while Assigned(Entry) do begin if SynWideLowerCase(Entry.Keyword) = SynWideLowerCase(FProcNames[i]) then Break; Entry := Entry.Next; end; if not Assigned(Entry) then DoAddKeyword(FProcNames[i], Ord(tkProcName)); end; end; procedure TSynSQLSyn.InitializeKeywordLists; var I: Integer; begin {$IFDEF LIST_CLEAR_NOT_VIRTUAL} FKeywords.DeleteEntries; {$ELSE} FKeywords.Clear; {$ENDIF} {$IFDEF USE_TABLE_DICTIONARY} FTableDict.Clear; {$ENDIF} FToIdent := nil; for I := 0 to Ord(High(TtkTokenKind)) do EnumerateKeywords(I, GetKeywords(I), IsIdentChar, DoAddKeyword); PutProcNamesInKeywordList; PutTableNamesInKeywordList; PutFunctionNamesInKeywordList; DefHighlightChange(Self); end; procedure TSynSQLSyn.SetDialect(Value: TSQLDialect); begin if (Value <> FDialect) then begin FDialect := Value; InitializeKeywordLists; end; end; procedure TSynSQLSyn.SetFunctionNames(const Value: TUnicodeStrings); begin FFunctionNames.Assign(Value); end; procedure TSynSQLSyn.SetProcNames(const Value: TUnicodeStrings); begin FProcNames.Assign(Value); end; function TSynSQLSyn.GetSampleSource: UnicodeString; begin Result := ''; case FDialect of sqlPostgres: Result := '-- ANSI SQL sample source'#13#10 + 'SELECT *'#13#10 + 'FROM planets'#13#10 + 'WHERE diameter < 13000'#13#10 + ' AND name <> ''Earth'''; sqlStandard: Result := '-- ANSI SQL sample source'#13#10 + 'SELECT *'#13#10 + 'FROM planets'#13#10 + 'WHERE diameter < 13000'#13#10 + ' AND name <> ''Earth'''; sqlInterbase6: Result := '/* Interbase sample source */'#13#10 + 'SET TERM !! ;'#13#10 + #13#10 + 'CREATE PROCEDURE HelloWorld(P_MSG VARCHAR(80)) AS'#13#10 + 'BEGIN'#13#10 + ' EXECUTE PROCEDURE WRITELN(:P_MSG);'#13#10 + 'END !!'#13#10 + #13#10 + 'SET TERM ; !!'; sqlMySQL: Result := '/* MySQL sample source*/'#13#10 + 'SET @variable = 1;'#13#10 + #13#10 + 'CREATE /*!32302 TEMPORARY */ TABLE t (a INT);'#13#10 + #13#10 + 'CREATE TABLE sample ('#13#10 + ' id INT NOT NULL,'#13#10 + ' first_name CHAR(30) NOT NULL,'#13#10 + ' PRIMARY KEY (id),'#13#10 + ' INDEX name (first_name));'#13#10 + #13#10 + 'SELECT DATE_ADD(''1997-12-31 23:59:59'','#13#10 + ' INTERVAL 1 SECOND);'#13#10 + #13#10 + '# End of sample'; sqlOracle: Result := 'PROMPT Oracle sample source'#13#10 + 'declare'#13#10 + ' x varchar2(2000);'#13#10 + 'begin -- Show some text here'#13#10 + ' select to_char(count(*)) into x'#13#10 + ' from tab;'#13#10 + #13#10 + ' dbms_output.put_line(''Hello World: '' || x);'#13#10 + 'exception'#13#10 + ' when others then'#13#10 + ' null;'#13#10 + 'end;'; sqlSybase: Result := '/* SyBase example source */'#13#10 + 'declare @Integer int'#13#10 + #13#10 + '/* Good for positive numbers only. */'#13#10 + 'select @Integer = 1000'#13#10 + #13#10 + 'select "Positives Only" ='#13#10 + ' right(replicate("0",12) + '#13#10 + ' convert(varchar, @Integer),12)'#13#10 + #13#10 + '/* Good for positive and negative numbers. */'#13#10 + 'select @Integer = -1000'#13#10 + #13#10 + 'select "Both Signs" ='#13#10 + ' substring( "- +", (sign(@Integer) + 2), 1) +'#13#10 + ' right(replicate("0",12) + '#13#10 + ' convert(varchar, abs(@Integer)),12)'#13#10 + #13#10 + 'select @Integer = 1000'#13#10 + #13#10 + 'select "Both Signs" ='#13#10 + ' substring( "- +", (sign(@Integer) + 2), 1) +'#13#10 + ' right(replicate("0",12) + '#13#10 + ' convert(varchar, abs(@Integer)),12)'#13#10 + #13#10 + 'go'; sqlIngres: Result := '/* Ingres example source */'#13#10 + 'DELETE'#13#10 + 'FROM t1'#13#10 + 'WHERE EXISTS'#13#10 + '(SELECT t2.column1, t2.column2'#13#10 + 'FROM t2'#13#10 + 'WHERE t1.column1 = t2.column1 and'#13#10 + 't1.column2 = t2.column2)'; sqlMSSQL7: Result := '/* SQL Server 7 example source */'#13#10 + 'SET QUOTED_IDENTIFIER ON'#13#10 + 'GO'#13#10 + 'SET ANSI_NULLS OFF'#13#10 + 'GO'#13#10 + #13#10 + '/* Object: Stored Procedure dbo.sp_PPQInsertOrder */'#13#10 + 'CREATE PROCEDURE sp_PPQInsertOrder'#13#10 + ' @Name varchar(25),'#13#10 + ' @Address varchar(255),'#13#10 + ' @ZipCode varchar(15)'#13#10 + 'AS'#13#10 + ' INSERT INTO PPQOrders(Name, Address, ZipCode, OrderDate)'#13#10 + ' VALUES (@Name, @Address, @ZipCode, GetDate())'#13#10 + #13#10 + ' SELECT SCOPE_IDENTITY()'#13#10 + 'GO'; sqlMSSQL2K: Result := '/* SQL Server2000 example source */'#13#10 + 'SET QUOTED_IDENTIFIER ON'#13#10 + 'GO'#13#10 + 'SET ANSI_NULLS OFF'#13#10 + 'GO'#13#10 + #13#10 + '/* Object: Stored Procedure dbo.sp_PPQInsertOrder */'#13#10 + 'CREATE PROCEDURE sp_PPQInsertOrder'#13#10 + ' @Name varchar(25),'#13#10 + ' @Address varchar(255),'#13#10 + ' @ZipCode varchar(15)'#13#10 + 'AS'#13#10 + ' INSERT INTO PPQOrders(Name, Address, ZipCode, OrderDate)'#13#10 + ' VALUES (@Name, @Address, @ZipCode, GetDate())'#13#10 + #13#10 + ' SELECT SCOPE_IDENTITY()'#13#10 + 'GO'; end; end; class function TSynSQLSyn.GetFriendlyLanguageName: UnicodeString; begin Result := SYNS_FriendlyLangSQL; end; function TSynSQLSyn.GetKeyWords(TokenKind: Integer): UnicodeString; begin Result := ''; case FDialect of sqlPostgres: begin case TtkTokenKind(TokenKind) of tkDatatype: Result := PostgresTypes; tkKey: Result := PostgresKW; tkFunction: Result := PostgresFunctions; tkException: Result := PostgresExceptions; end; end; sqlIngres: case TtkTokenKind(TokenKind) of tkDatatype: Result := IngresTypes; tkKey: Result := IngresKW; tkFunction: Result := IngresFunctions; end; sqlInterbase6: case TtkTokenKind(TokenKind) of tkDatatype: Result := Interbase6Types; tkFunction: Result := Interbase6Functions; tkKey: Result := Interbase6KW; end; sqlMSSQL7: case TtkTokenKind(TokenKind) of tkKey: Result := MSSQL7KW; tkDatatype: Result := MSSQL7Types; tkFunction: Result := MSSQL7Functions; end; sqlMSSQL2K: case TtkTokenKind(TokenKind) of tkKey: Result := MSSQL2000KW; tkDataType: Result := MSSQL2000Types; tkFunction: Result := MSSQL2000Functions; end; sqlMySql: case TtkTokenKind(TokenKind) of tkKey: Result := MySqlKW; tkDatatype: Result := MySqlTypes; tkFunction: Result := MySqlFunctions; tkPLSQL: Result := MySQLPLSQLKW; end; sqlOracle: case TtkTokenKind(TokenKind) of tkKey: Result := OracleKW; tkDatatype: Result := OracleTypes; tkException: Result := OracleExceptions; tkFunction: Result := OracleFunctions; tkComment: Result := OracleCommentKW; tkConsoleOutput: Result := OracleConsoleOutputKW; tkDefaultPackage: Result := OracleDefaultPackages; tkPLSQL: Result := OraclePLSQLKW; tkSQLPlus: Result := OracleSQLPlusCommands; end; sqlStandard: if TtkTokenKind(TokenKind) = tkKey then Result := StandardKW; sqlSybase: if TtkTokenKind(TokenKind) = tkKey then Result := SybaseKW; sqlNexus: case TtkTokenKind(TokenKind) of tkKey: Result := NexusKW; tkDatatype: Result := NexusTypes; tkFunction: Result := NexusFunctions; end; sqlInformix: case TtkTokenKind(TokenKind) of tkKey: Result := InformixKW; tkDatatype: Result := InformixTypes; tkFunction: Result := InformixFunctions; end; end; end; initialization {$IFNDEF SYN_CPPB_1} RegisterPlaceableHighlighter(TSynSQLSyn); {$ENDIF} end.