PageRenderTime 57ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/components/synedit/synhighlightersql.pas

http://github.com/graemeg/lazarus
Pascal | 1940 lines | 1742 code | 92 blank | 106 comment | 50 complexity | 8687248f5d6bc95703cc62119d5579ac MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, MPL-2.0-no-copyleft-exception
  1. {-------------------------------------------------------------------------------
  2. The contents of this file are subject to the Mozilla Public License
  3. Version 1.1 (the "License"); you may not use this file except in compliance
  4. with the License. You may obtain a copy of the License at
  5. http://www.mozilla.org/MPL/
  6. Software distributed under the License is distributed on an "AS IS" basis,
  7. WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
  8. the specific language governing rights and limitations under the License.
  9. The Original Code is: SynHighlighterSQL.pas, released 2000-04-21.
  10. The Original Code is based on the wmSQLSyn.pas and wmSybaseSyn.pas files from
  11. the mwEdit component suite by Martin Waldenburg and other developers, the
  12. Initial Author of these files is Willo van der Merwe. Initial Author of
  13. SynHighlighterSQL.pas is Michael Hieke.
  14. Portions created by Willo van der Merwe are Copyright 1999 Willo van der Merwe.
  15. Portions created by Michael Hieke are Copyright 2000 Michael Hieke.
  16. All Rights Reserved.
  17. Contributors to the SynEdit and mwEdit projects are listed in the
  18. Contributors.txt file.
  19. Alternatively, the contents of this file may be used under the terms of the
  20. GNU General Public License Version 2 or later (the "GPL"), in which case
  21. the provisions of the GPL are applicable instead of those above.
  22. If you wish to allow use of your version of this file only under the terms
  23. of the GPL and not to allow others to use your version of this file
  24. under the MPL, indicate your decision by deleting the provisions above and
  25. replace them with the notice and other provisions required by the GPL.
  26. If you do not delete the provisions above, a recipient may use your version
  27. of this file under either the MPL or the GPL.
  28. $Id$
  29. You may retrieve the latest version of this file at the SynEdit home page,
  30. located at http://SynEdit.SourceForge.net
  31. Known Issues:
  32. -------------------------------------------------------------------------------}
  33. {
  34. @abstract(SQL highlighter for SynEdit with support for different dialects.)
  35. @author(Michael Hieke)
  36. @created(2000-04-21)
  37. @lastmod(2000-11-16)
  38. The SynHighlighterSQL implements a highlighter for SQL for the SynEdit projects.
  39. Different SQL dialects can be selected via the Dialect property.
  40. }
  41. unit SynHighlighterSQL;
  42. {$I SynEdit.inc}
  43. interface
  44. uses
  45. SysUtils, Classes,
  46. LCLIntf, LCLType,
  47. Controls, Graphics,
  48. SynEditTypes, SynEditHighlighter,
  49. SynHighlighterHashEntries;
  50. type
  51. TtkTokenKind = (tkComment, tkDatatype, tkDefaultPackage, tkException, // DJLP 2000-08-11
  52. tkFunction, tkIdentifier, tkKey, tkNull, tkNumber, tkSpace, tkPLSQL, // DJLP 2000-08-11
  53. tkSQLPlus, tkString, tkSymbol, tkTableName, tkUnknown, tkVariable); // DJLP 2000-08-11
  54. TRangeState = (rsUnknown, rsComment, rsString);
  55. TProcTableProc = procedure of object;
  56. TSQLDialect = (sqlStandard, sqlInterbase6, sqlMSSQL7, sqlMySQL, sqlOracle,
  57. sqlSybase, sqlIngres, sqlMSSQL2K, sqlPostgres, sqlSQLite); // JJV 2000-11-16
  58. type
  59. PIdentifierTable = ^TIdentifierTable;
  60. TIdentifierTable = array[Char] of ByteBool;
  61. PHashTable = ^THashTable;
  62. THashTable = array[Char] of Integer;
  63. type
  64. TSynSQLSyn = class(TSynCustomHighlighter)
  65. private
  66. fRange: TRangeState;
  67. fLine: PChar;
  68. fLineNumber: Integer;
  69. fProcTable: array[#0..#255] of TProcTableProc;
  70. Run: LongInt;
  71. fStringLen: Integer;
  72. fToIdent: PChar;
  73. fTokenPos: Integer;
  74. fTokenID: TtkTokenKind;
  75. fKeywords: TSynHashEntryList;
  76. fTableNames: TStrings;
  77. fDialect: TSQLDialect;
  78. fCommentAttri: TSynHighlighterAttributes;
  79. fDataTypeAttri: TSynHighlighterAttributes;
  80. fDefaultPackageAttri: TSynHighlighterAttributes; // DJLP 2000-08-11
  81. fExceptionAttri: TSynHighlighterAttributes;
  82. fFunctionAttri: TSynHighlighterAttributes;
  83. fIdentifierAttri: TSynHighlighterAttributes;
  84. fKeyAttri: TSynHighlighterAttributes;
  85. fNumberAttri: TSynHighlighterAttributes;
  86. fPLSQLAttri: TSynHighlighterAttributes; // DJLP 2000-08-11
  87. fSpaceAttri: TSynHighlighterAttributes;
  88. fSQLPlusAttri: TSynHighlighterAttributes; // DJLP 2000-09-05
  89. fStringAttri: TSynHighlighterAttributes;
  90. fSymbolAttri: TSynHighlighterAttributes;
  91. fTableNameAttri: TSynHighlighterAttributes;
  92. fVariableAttri: TSynHighlighterAttributes;
  93. fIdentifiersPtr: PIdentifierTable;
  94. fmHashTablePtr: PHashTable;
  95. function KeyHash(ToHash: PChar): Integer;
  96. function KeyComp(const aKey: string): Boolean;
  97. procedure AndSymbolProc;
  98. procedure AsciiCharProc;
  99. procedure CRProc;
  100. procedure EqualProc;
  101. procedure GreaterProc;
  102. procedure IdentProc;
  103. procedure LFProc;
  104. procedure LowerProc;
  105. procedure MinusProc;
  106. procedure NullProc;
  107. procedure NumberProc;
  108. procedure OrSymbolProc;
  109. procedure PlusProc;
  110. procedure SlashProc;
  111. procedure SpaceProc;
  112. procedure StringProc;
  113. procedure SymbolProc;
  114. procedure SymbolAssignProc;
  115. procedure VariableProc;
  116. procedure UnknownProc;
  117. function IdentKind(MayBe: PChar): TtkTokenKind;
  118. procedure MakeMethodTables;
  119. procedure AnsiCProc;
  120. procedure DoAddKeyword(AKeyword: string; AKind: integer);
  121. procedure SetDialect(Value: TSQLDialect);
  122. procedure SetTableNames(const Value: TStrings);
  123. procedure TableNamesChanged(Sender: TObject);
  124. procedure InitializeKeywordLists;
  125. procedure PutTableNamesInKeywordList;
  126. protected
  127. function GetIdentChars: TSynIdentChars; override;
  128. function GetSampleSource : String; override;
  129. public
  130. class function GetLanguageName: string; override;
  131. public
  132. constructor Create(AOwner: TComponent); override;
  133. destructor Destroy; override;
  134. procedure Assign(Source: TPersistent); override;
  135. function GetDefaultAttribute(Index: integer): TSynHighlighterAttributes;
  136. override;
  137. function GetEol: Boolean; override;
  138. function GetRange: Pointer; override;
  139. function GetToken: string; override;
  140. procedure GetTokenEx(out TokenStart: PChar; out TokenLength: integer); override;
  141. function GetTokenAttribute: TSynHighlighterAttributes; override;
  142. function GetTokenID: TtkTokenKind;
  143. function GetTokenKind: integer; override;
  144. function GetTokenPos: Integer; override;
  145. function IsKeyword(const AKeyword: string): boolean; override; // DJLP 2000-08-09
  146. procedure Next; override;
  147. procedure ResetRange; override;
  148. procedure SetLine(const NewValue: string; LineNumber: Integer); override;
  149. procedure SetRange(Value: Pointer); override;
  150. published
  151. property CommentAttri: TSynHighlighterAttributes read fCommentAttri
  152. write fCommentAttri;
  153. property DataTypeAttri: TSynHighlighterAttributes read fDataTypeAttri
  154. write fDataTypeAttri;
  155. property DefaultPackageAttri: TSynHighlighterAttributes // DJLP 2000-08-11
  156. read fDefaultPackageAttri write fDefaultPackageAttri;
  157. property ExceptionAttri: TSynHighlighterAttributes read fExceptionAttri
  158. write fExceptionAttri;
  159. property FunctionAttri: TSynHighlighterAttributes read fFunctionAttri
  160. write fFunctionAttri;
  161. property IdentifierAttri: TSynHighlighterAttributes read fIdentifierAttri
  162. write fIdentifierAttri;
  163. property KeyAttri: TSynHighlighterAttributes read fKeyAttri write fKeyAttri;
  164. property NumberAttri: TSynHighlighterAttributes read fNumberAttri
  165. write fNumberAttri;
  166. property PLSQLAttri: TSynHighlighterAttributes read fPLSQLAttri // DJLP 2000-08-11
  167. write fPLSQLAttri;
  168. property SpaceAttri: TSynHighlighterAttributes read fSpaceAttri
  169. write fSpaceAttri;
  170. property SQLPlusAttri: TSynHighlighterAttributes read fSQLPlusAttri // DJLP 2000-09-05
  171. write fSQLPlusAttri;
  172. property StringAttri: TSynHighlighterAttributes read fStringAttri
  173. write fStringAttri;
  174. property SymbolAttri: TSynHighlighterAttributes read fSymbolAttri
  175. write fSymbolAttri;
  176. property TableNameAttri: TSynHighlighterAttributes read fTableNameAttri
  177. write fTableNameAttri;
  178. property TableNames: TStrings read fTableNames write SetTableNames;
  179. property VariableAttri: TSynHighlighterAttributes read fVariableAttri
  180. write fVariableAttri;
  181. property SQLDialect: TSQLDialect read fDialect write SetDialect;
  182. end;
  183. implementation
  184. uses
  185. SynEditStrConst;
  186. var
  187. Identifiers: TIdentifierTable;
  188. mHashTable: THashTable;
  189. IdentifiersMSSQL7: TIdentifierTable;
  190. mHashTableMSSQL7: THashTable;
  191. const
  192. //---SQLite keywords------------------------------------------------------------
  193. SQLiteKW: string =
  194. 'abort,action,add,after,all,alter,analyze,and,as,asc,attach,autoincrement,' +
  195. 'before,begin,between,by,cascade,case,cast,check,collate,column,commit,' +
  196. 'conflict,constraint,create,cross,current_date,current_time,current_timestamp,' +
  197. 'database,default,deferrable,deferred,delete,desc,detach,distinct,drop,each,else,' +
  198. 'end,escape,except,exclusive,exists,explain,fail,for,foreign,from,full,glob,group,' +
  199. 'having,if,ignore,immediate,in,index,indexed,initially,inner,insert,instead,intersect,' +
  200. 'into,is,isnull,join,key,left,like,limit,match,natural,no,not,notnull,null,of,offset,on,' +
  201. 'or,order,outer,plan,pragma,primary,query,raise,references,regexp,reindex,release,rename,' +
  202. 'replace,restrict,right,rollback,row,savepoint,select,set,table,temp,temporary,then,to,' +
  203. 'transaction,trigger,union,unique,update,using,vacuum,values,view,virtual,when,where';
  204. SQLiteTypes: string =
  205. 'int,integer,tinyint,smallint,mediumint,bigint,int2,int8,character,varchar,' +
  206. 'nchar,,nvarchar,text,clob,blob,real,double,float,numeric,decimal,boolean,' +
  207. 'date,datetime';
  208. SQLiteFunctions: string =
  209. 'abs,avg,changes,coalesce,count,group_concat,hex,ifnull,' +
  210. 'julianday,last_insert_rowid,length,load_extension,lower,ltrim,max,min,' +
  211. 'nullif,quote,random,randomblob,round,rtrim,soundex,sqlite_compileoption_get,' +
  212. 'sqlite_compileoption_used,sqlite_source_id,sqlite_version,strftim,substr,sum,time,' +
  213. 'total,total_changes,trim,typeof,upper,zeroblob';
  214. //---"Standard" (ANSI SQL keywords (Version 1, 2 and 3) (www.sql.org)---------
  215. StandardKW: string =
  216. 'absolute,action,active,actor,add,after,alias,all,allocate,alter,' +
  217. 'and,any,are,as,asc,ascending,assertion,async,at,attributes,auto,' +
  218. 'base_name,before,begin,between,bit,bit_length,boolean,both,breadth,by,' +
  219. 'cache,call,cascade,cascaded,case,cast,catalog,char_length,' +
  220. 'character_length,check,coalesce,collate,collation,column,commit,' +
  221. 'committed,completion,computed,conditional,connect,connection,constraint,' +
  222. 'constraints,containing,convert,corresponding,count,create,cross,current,' +
  223. 'current_date,current_path,current_time,current_timestamp,current_user,' +
  224. 'cursor,cycle,data,database,date,day,deallocate,debug,declare,default,' +
  225. 'deferrable,deferred,delete,depth,desc,descending,describe,descriptor,' +
  226. 'destroy,diagnostics,dictionary,disconnect,distinct,do,domain,' +
  227. 'drop,each,element,else,elseif,end,end-exec,entry_point,equals,escape,' +
  228. 'except,exception,execute,exists,exit,external,extract,factor,false,' +
  229. 'filter,first,for,foreign,from,full,function,general,generator,get,' +
  230. 'global,grant,group,having,hold,hour,identity,if,ignore,immediate,in,' +
  231. 'inactive,index,initially,inner,input,insensitive,insert,instead,' +
  232. 'intersect,interval,into,is,isolation,join,key,last,leading,leave,left,' +
  233. 'less,level,like,limit,list,local,loop,lower,match,merge,minute,modify,' +
  234. 'month,names,national,natural,nchar,new,new_table,next,no,none,not,null,' +
  235. 'nullif,object,octet_length,of,off,old,old_table,on,only,operation,' +
  236. 'operator,operators,or,order,others,outer,output,overlaps,pad,' +
  237. 'parameter,parameters,partial,password,path,pendant,plan,position,' +
  238. 'postfix,prefix,preorder,prepare,preserve,primary,prior,private,' +
  239. 'privileges,procedure,protected,read,recursive,ref,referencing,relative,' +
  240. 'replace,resignal,restrict,retain,return,returns,revoke,right,role,' +
  241. 'rollback,routine,row,rows,savepoint,schema,scroll,search,second,select,' +
  242. 'sensitive,sequence,session,session_user,set,shadow,shared,signal,' +
  243. 'similar,size,snapshot,some,space,sqlexception,sqlstate,sqlwarning,start,' +
  244. 'state,structure,substring,suspend,symbol,system_user,table,temporary,' +
  245. 'term,test,then,there,time,timestamp,timezone_hour,timezone_minute,to,' +
  246. 'trailing,transaction,translate,translation,trigger,trim,true,tuple,type,' +
  247. 'uncommitted,under,union,unique,unknown,update,upper,usage,user,using,' +
  248. 'value,varchar,variable,varying,view,virtual,visible,wait,when,where,' +
  249. 'while,with,without,work,write,year,zone';
  250. //---Sybase keywords------------------------------------------------------------
  251. SybaseKW: string =
  252. 'absolute,action,add,after,alias,all,allocate,alter,and,any,are,' +
  253. 'arith_overflow,as,asc,assertion,async,at,authorization,avg,before,begin,' +
  254. 'between,bit,bit_length,boolean,both,breadth,break,browse,bulk,by,call,' +
  255. 'cascade,cascaded,case,cast,catalog,char,char_convert,char_length,' +
  256. 'character,character_length,check,checkpoint,close,clustered,coalesce,' +
  257. 'collate,collation,column,commit,completion,compute,confirm,' +
  258. 'connect,connection,constraint,constraints,continue,controlrow,convert,' +
  259. 'corresponding,count,create,cross,current,current_date,current_time,' +
  260. 'current_timestamp,current_user,cursor,cycle,data,database,date,day,dbcc,' +
  261. 'deallocate,dec,decimal,declare,default,deferrable,deferred,delete,depth,' +
  262. 'desc,describe,descriptor,diagnostics,dictionary,dis,disconnect,distinct,' +
  263. 'domain,double,drop,dummy,dump,each,else,elseif,en,end,endtran,equals,' +
  264. 'errlvl,errordata,errorexit,escape,except,exception,exclusive,exec,' +
  265. 'execute,exists,exit,exp_row_size,external,extract,false,fetch,' +
  266. 'fillfactor,first,float,for,foreign,found,from,full,general,get,global,' +
  267. 'go,goto,grant,group,having,holdlock,hour,identity,identity_gap,' +
  268. 'identity_insert,identity_start,if,ignore,immediate,in,index,indicator,' +
  269. 'initially,inner,input,insensitive,insert,install,int,integer,intersect,' +
  270. 'interval,into,is,isolation,jar,join,key,kill,language,last,leading,' +
  271. 'leave,left,less,level,like,limit,lineno,load,local,lock,loop,lower,' +
  272. 'match,max,max_rows_per_page,min,minute,mirror,mirrorexit,modify,module,' +
  273. 'month,names,national,natural,nchar,new,next,no,noholdlock,nonclustered,' +
  274. 'none,not,null,nullif,numeric,numeric_truncation,object,' +
  275. 'octet_length,of,off,offsets,oid,old,on,once,online,only,open,operation,' +
  276. 'operators,option,or,order,others,outer,output,over,overlaps,pad,' +
  277. 'parameters,partial,partition,pendant,perm,permanent,plan,position,' +
  278. 'precision,preorder,prepare,preserve,primary,print,prior,private,' +
  279. 'privileges,proc,procedure,processexit,protected,proxy_table,public,' +
  280. 'quiesce,raiserror,read,readpast,readtext,real,reconfigure,recursive,' +
  281. 'ref,reference,referencing,relative,remove,reorg,replace,replication,' +
  282. 'reservepagegap,resignal,restrict,return,returns,revoke,right,role,' +
  283. 'rollback,routine,row,rowcount,rows,rule,save,savepoint,schema,scroll,' +
  284. 'search,second,section,select,sensitive,sequence,session_user,set,' +
  285. 'setuser,shared,shutdown,signal,similar,size,smallint,some,space,sql,' +
  286. 'sqlcode,sqlerror,sqlexception,sqlstate,statistics,stripe,structure,' +
  287. 'substring,sum,syb_identity,syb_restree,system_user,table,temp,temporary,' +
  288. 'test,textsize,then,there,time,timestamp,timezone_hour,timezone_minute,' +
  289. 'to,trailing,tran,transaction,translate,translation,trigger,trim,true,' +
  290. 'truncate,tsequal,type,under,union,unique,unknown,unpartition,update,' +
  291. 'upper,usage,use,user,user_option,using,value,values,varchar,variable,' +
  292. 'varying,view,virtual,visible,wait,waitfor,when,whenever,where,while,' +
  293. 'with,without,work,write,writetext,year,zone';
  294. //---Oracle---------------------------------------------------------------------
  295. // Oracle SQL keywords
  296. OracleKW: string =
  297. 'ACCESS,ACCESSED,ACCOUNT,ACTIVATE,ACTIVE_INSTANCE_COUNT,ADD,ADMIN,ADVISE,' +
  298. 'AGENT,ALL,ALLOCATE,ALTER,ANALYZE,ANCILLARY,AND,ANY,AQ_TM_PROCESSES,' +
  299. 'ARCHIVE_LAG_TARGET,ARCHIVELOG,AS,ASC,ASSOCIATE,ATTRIBUTES,AUDIT,' +
  300. 'AUDIT_FILE_DEST,AUDIT_SYS_OPERATIONS,AUDIT_TRAIL,AUTHENTICATED,AUTHID,' +
  301. 'AUTOALLOCATE,AUTOEXTEND,AUTOMATIC,BACKGROUND_CORE_DUMP,' +
  302. 'BACKGROUND_DUMP_DEST,BACKUP,BACKUP_TAPE_IO_SLAVES,BECOME,BEFORE,' +
  303. 'BEHALF,BETWEEN,BINDING,BITMAP,BITMAP_MERGE_AREA_SIZE,BLANK_TRIMMING,' +
  304. 'BLOCK,BLOCKSIZE,BUFFER_POOL,BUFFER_POOL_KEEP,BUFFER_POOL_RECYCLE,BY,' +
  305. 'CACHE,CANCEL,CASCADE,CAST,CATEGORY,CHAINED,CHANGE,CHARACTER,CHECK,' +
  306. 'CHECKPOINT,CHILD,CHUNK,CIRCUITS,CLASS,CLONE,CLUSTER,CLUSTER_DATABASE,' +
  307. 'CLUSTER_DATABASE_INSTANCES,CLUSTER_INTERCONNECTS,COALESCE,COBOL,' +
  308. 'COLUMN,COLUMNS,COMMENT,COMMIT_POINT_STRENGTH,COMPATIBLE,COMPILE,' +
  309. 'COMPLETE,COMPOSITE_LIMIT,COMPRESS,COMPUTE,CONNECT,' +
  310. 'CONNECT_TIME,CONSIDER,CONSTRAINT,CONSTRAINTS,CONTENTS,CONTEXT,CONTINUE,' +
  311. 'CONTROL,CONTROL_FILE_RECORD_KEEP_TIME,CONTROL_FILES,CONTROLFILE,' +
  312. 'CORE_DUMP_DEST,COST,CPU_COUNT,CPU_PER_CALL,CPU_PER_SESSION,CREATE,' +
  313. 'CREATE_BITMAP_AREA_SIZE,CREATE_STORED_OUTLINES,CURRENT,CURRENT_USER,' +
  314. 'CURSOR_SHARING,CURSOR_SPACE_FOR_TIME,CYCLE,DANGLING,DATAFILE,' +
  315. 'DB_BLOCK_BUFFERS,DB_BLOCK_CHECKING,DB_BLOCK_CHECKSUM,DB_BLOCK_SIZE,' +
  316. 'DB_CACHE_ADVICE,DB_CACHE_SIZE,DB_CREATE_FILE_DEST,DB_DOMAIN,' +
  317. 'DB_FILE_MULTIBLOCK_READ_COUNT,DB_FILE_NAME_CONVERT,DB_FILES,' +
  318. 'DB_KEEP_CACHE_SIZE,DB_NAME,DB_RECYCLE_CACHE_SIZE,DB_WRITER_PROCESSES,' +
  319. 'DBLINK_ENCRYPT_LOGIN,DBWR_IO_SLAVES,DEALLOCATE,DEBUG,DEFAULT,DEFERRED,' +
  320. 'DEFINER,DELETE,DEMAND,DETERMINES,DG_BROKER_START,DICTIONARY,DIMENSION,' +
  321. 'DIRECTORY,DISABLE,DISASSOCIATE,DISK_ASYNCH_IO,DISMOUNT,DISPATCHERS,' +
  322. 'DISTINCT,DISTRIBUTED,DISTRIBUTED_LOCK_TIMEOUT,DML,DML_LOCKS,DOCUMENT,' +
  323. 'DROP,DRS_START,ELSE,ENABLE,ENQUEUE_RESOURCES,ESCAPE,ESTIMATE,EVENT,' +
  324. 'EVENTS,EXCEPT,EXCEPTIONS,EXCHANGE,EXCLUDING,EXCLUSIVE,EXISTS,EXPIRE,' +
  325. 'EXPLAIN,EXTENT,EXTERNALLY,FAILED_LOGIN_ATTEMPTS,FAL_CLIENT,FAL_SERVER,' +
  326. 'FAST,FAST_START_IO_TARGET,FAST_START_MTTR_TARGET,' +
  327. 'FAST_START_PARALLEL_ROLLBACK,FILE,FILE_MAPPING,FILESYSTEMIO_OPTIONS,' +
  328. 'FIXED_DATE,FLUSH,FOR,FORCE,FOREIGN,FORTRAN,FREELIST,FREELISTS,FRESH,' +
  329. 'FROM,FROM_TZ,FUNCTIONS,GC_FILES_TO_LOCKS,GENERATED,GLOBAL,' +
  330. 'GLOBAL_CONTEXT_POOL_SIZE,GLOBAL_NAME,GLOBAL_NAMES,GLOBALLY,GO,GRANT,' +
  331. 'GROUP,GROUPS,HASH,HASH_AREA_SIZE,HASH_JOIN_ENABLED,HASHKEYS,HAVING,HEAP,' +
  332. 'HI_SHARED_MEMORY_ADDRESS,HIERARCHY,HS_AUTOREGISTER,IDENTIFIED,IDLE_TIME,' +
  333. 'IFILE,IMMEDIATE,IN,INCLUDING,INCREMENT,INDEX,INDEXTYPE,INDEXTYPES,' +
  334. 'INFILE,INITIAL,INITIALIZED,INITIALLY,INITRANS,INSERT,INSTANCE,' +
  335. 'INSTANCE_GROUPS,INSTANCE_NAME,INSTANCE_NUMBER,INT,INTERSECT,INTO,' +
  336. 'INVALIDATE,IS,ISOLATION,JAVA,JAVA_MAX_SESSIONSPACE_SIZE,JAVA_POOL_SIZE,' +
  337. 'JAVA_SOFT_SESSIONSPACE_LIMIT,JOB_QUEUE_PROCESSES,JOIN,KEEP,KEY,KILL,' +
  338. 'LARGE_POOL_SIZE,LAYERLISTS,LEVEL,LIBRARY,LICENSE_MAX_SESSIONS,' +
  339. 'LICENSE_MAX_USERS,LICENSE_SESSIONS_WARNING,LIKE,LIMIT,LINK,LIST,LOB,' +
  340. 'LOCAL,LOCAL_LISTENER,LOCATOR,LOCK,LOCK_NAME_SPACE,LOCK_SGA,' +
  341. 'LOG_ARCHIVE_DEST,LOG_ARCHIVE_DUPLEX_DEST,LOG_ARCHIVE_FORMAT,' +
  342. 'LOG_ARCHIVE_MAX_PROCESSES,LOG_ARCHIVE_MIN_SUCCEED_DEST,' +
  343. 'LOG_ARCHIVE_START,LOG_ARCHIVE_TRACE,LOG_BUFFER,LOG_CHECKPOINT_INTERVAL,' +
  344. 'LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINTS_TO_ALERT,LOG_FILE_NAME_CONVERT,' +
  345. 'LOG_PARALLELISM,LOGFILE,LOGGING,LOGICAL_READS_PER_CALL,' +
  346. 'LOGICAL_READS_PER_SESSION,LOGMNR_MAX_PERSISTENT_SESSIONS,MANAGE,MANAGED,' +
  347. 'MANUAL,MAP,MASTER,MATCHED,MATERIALIZED,MAX_COMMIT_PROPAGATION_DELAY,' +
  348. 'MAX_DISPATCHERS,MAX_DUMP_FILE_SIZE,MAX_ENABLED_ROLES,' +
  349. 'MAX_ROLLBACK_SEGMENTS,MAX_SHARED_SERVERS,MAXDATAFILES,MAXEXTENTS,' +
  350. 'MAXINSTANCES,MAXLOGFILES,MAXLOGHISTORY,MAXLOGMEMBERS,MAXSIZE,MAXTRANS,' +
  351. 'MAXVALUE,MEMBER,MINEXTENTS,MINIMIZE,MINIMUM,MINUS,MINVALUE,MODE,MODIFY,' +
  352. 'MODULE,MONITORING,MOUNT,MOVE,MOVEMENT,MULTISET,NAMED,NATIONAL,NESTED,' +
  353. 'NEVER,NEXT,NLS_CALENDAR,NLS_COMP,NLS_CURRENCY,NLS_DATE_FORMAT,' +
  354. 'NLS_DATE_LANGUAGE,NLS_DUAL_CURRENCY,NLS_ISO_CURRENCY,NLS_LANGUAGE,' +
  355. 'NLS_LENGTH_SEMANTICS,NLS_NCHAR_CONV_EXCP,NLS_NUMERIC_CHARACTERS,' +
  356. 'NLS_TERRITORY,NLS_TIMESTAMP_FORMAT,NLS_TIMESTAMP_TZ_FORMAT,NO,' +
  357. 'NOARCHIVELOG,NOAUDIT,NOCACHE,NOCOMPRESS,NOCOPY,NOCYCLE,NOFORCE,' +
  358. 'NOLOGGING,NOMAXVALUE,NOMINIMIZE,NOMINVALUE,NOMONITORING,NONE,' +
  359. 'NOORDER,NORELY,NORESETLOGS,NOREVERSE,NORMAL,NOROWDEPENDENCIES,NOSORT,' +
  360. 'NOT,NOTHING,NOVALIDATE,NOWAIT,NULL,O7_DICTIONARY_ACCESSIBILITY,' +
  361. 'OBJECT_CACHE_MAX_SIZE_PERCENT,OBJECT_CACHE_OPTIMAL_SIZE,OF,OFFLINE,OID,' +
  362. 'OLAP_PAGE_POOL_SIZE,ON,ONLINE,ONLY,OPEN_CURSORS,OPEN_LINKS,' +
  363. 'OPEN_LINKS_PER_INSTANCE,OPERATOR,OPTIMAL,OPTIMIZER_DYNAMIC_SAMPLING,' +
  364. 'OPTIMIZER_FEATURES_ENABLE,OPTIMIZER_INDEX_CACHING,' +
  365. 'OPTIMIZER_INDEX_COST_ADJ,OPTIMIZER_MAX_PERMUTATIONS,OPTIMIZER_MODE,' +
  366. 'OPTION,OR,ORACLE_TRACE_COLLECTION_NAME,ORACLE_TRACE_COLLECTION_PATH,' +
  367. 'ORACLE_TRACE_COLLECTION_SIZE,ORACLE_TRACE_ENABLE,' +
  368. 'ORACLE_TRACE_FACILITY_NAME,ORACLE_TRACE_FACILITY_PATH,ORDER,' +
  369. 'OS_AUTHENT_PREFIX,OS_ROLES,OUTLINE,OVERFLOW,OWN,PACKAGES,PARALLEL,' +
  370. 'PARALLEL_ADAPTIVE_MULTI_USER,PARALLEL_AUTOMATIC_TUNING,' +
  371. 'PARALLEL_EXECUTION_MESSAGE_SIZE,PARALLEL_INSTANCE_GROUP,' +
  372. 'PARALLEL_MAX_SERVERS,PARALLEL_MIN_PERCENT,PARALLEL_MIN_SERVERS,' +
  373. 'PARALLEL_THREADS_PER_CPU,PARAMETERS,PARTITION_VIEW_ENABLED,PARTITIONS,' +
  374. 'PASSWORD,PASSWORD_GRACE_TIME,PASSWORD_LIFE_TIME,PASSWORD_LOCK_TIME,' +
  375. 'PASSWORD_REUSE_MAX,PASSWORD_REUSE_TIME,PASSWORD_VERIFY_FUNCTION,' +
  376. 'PCTFREE,PCTINCREASE,PCTTHRESHOLD,PCTUSED,PCTVERSION,PERCENT,PERMANENT,' +
  377. 'PGA_AGGREGATE_TARGET,PIPELINED,PLAN,PLI,PLSQL_COMPILER_FLAGS,' +
  378. 'PLSQL_NATIVE_C_COMPILER,PLSQL_NATIVE_LIBRARY_DIR,' +
  379. 'PLSQL_NATIVE_LIBRARY_SUBDIR_COUNT,PLSQL_NATIVE_LINKER,' +
  380. 'PLSQL_NATIVE_MAKE_FILE_NAME,PLSQL_NATIVE_MAKE_UTILITY,' +
  381. 'PLSQL_V2_COMPATIBILITY,POST_TRANSACTION,PRE_PAGE_SGA,PREBUILD,PRECISION,' +
  382. 'PRIMARY,PRIOR,PRIVATE_SGA,PRIVILEGES,PROCESSES,PROFILE,PUBLIC,QUERY,' +
  383. 'QUERY_REWRITE_ENABLED,QUERY_REWRITE_INTEGRITY,QUIESCE,QUOTA,' +
  384. 'RDBMS_SERVER_DN,READ,READ_ONLY_OPEN_DELAYED,REBUILD,RECORDS_PER_BLOCK,' +
  385. 'RECOVER,RECOVERABLE,RECOVERY,RECOVERY_PARALLELISM,RECYCLE,REDUCED,' +
  386. 'REFERENCES,REFRESH,REGISTER,RELY,REMOTE_ARCHIVE_ENABLE,' +
  387. 'REMOTE_DEPENDENCIES_MODE,REMOTE_LISTENER,REMOTE_LOGIN_PASSWORDFILE,' +
  388. 'REMOTE_OS_AUTHENT,REMOTE_OS_ROLES,RENAME,' +
  389. 'REPLICATION_DEPENDENCY_TRACKING,RESET,RESETLOGS,RESIZE,RESOLVE,RESOLVER,' +
  390. 'RESOURCE,RESOURCE_LIMIT,RESOURCE_MANAGER_PLAN,RESTRICT,RESTRICTED,' +
  391. 'RESUMABLE,RESUME,REUSE,REVOKE,REWRITE,RNDS,RNPS,ROLE,ROLES,' +
  392. 'ROLLBACK_SEGMENTS,ROW,ROW_LOCKING,ROWDEPENDENCIES,ROWLABEL,ROWNUM,' +
  393. 'ROWS,SAMPLE,SCN,SCOPE,SECTION,SEGMENT,SELECT,SELECTIVITY,SEQUENCE,' +
  394. 'SERIAL_REUSE,SERVICE_NAMES,SESSION,SESSION_CACHED_CURSORS,' +
  395. 'SESSION_MAX_OPEN_FILES,SESSIONS,SESSIONS_PER_USER,SGA_MAX_SIZE,' +
  396. 'SHADOW_CORE_DUMP,SHARE,SHARED,SHARED_MEMORY_ADDRESS,SHARED_POOL,' +
  397. 'SHARED_POOL_RESERVED_SIZE,SHARED_POOL_SIZE,SHARED_SERVER_SESSIONS,' +
  398. 'SHARED_SERVERS,SHRINK,SIZE,SNAPSHOT,SOME,SORT,SORT_AREA_RETAINED_SIZE,' +
  399. 'SORT_AREA_SIZE,SOURCE,SPECIFICATION,SPECIFIED,SPFILE,SPLIT,SQL_TRACE,' +
  400. 'SQL92_SECURITY,STANDBY,STANDBY_ARCHIVE_DEST,STANDBY_FILE_MANAGEMENT,' +
  401. 'STAR_TRANSFORMATION_ENABLED,START,START_DATE,STATISTICS,' +
  402. 'STATISTICS_LEVEL,STOP,STORAGE,STRUCTURE,SUBPARTITION,SUBPARTITIONS,' +
  403. 'SUCCESSFUL,SUSPEND,SWITCH,SYNONYM,SYSTEM,TABLE,TABLESPACE,' +
  404. 'TAPE_ASYNCH_IO,TEMPFILE,TEMPORARY,THE,THEN,THREAD,THROUGH,TIME,' +
  405. 'TIMED_OS_STATISTICS,TIMED_STATISTICS,TIMEOUT,TO,TRACE_ENABLED,' +
  406. 'TRACEFILE_IDENTIFIER,TRACING,TRANSACTION,TRANSACTION_AUDITING,' +
  407. 'TRANSACTIONS,TRANSACTIONS_PER_ROLLBACK_SEGMENT,TRIGGER,TRUNCATE,TRUST,' +
  408. 'TYPES,UNARCHIVED,UNDER,UNDO,UNDO_MANAGEMENT,UNDO_RETENTION,' +
  409. 'UNDO_SUPPRESS_ERRORS,UNDO_TABLESPACE,UNIFORM,UNION,UNIQUE,UNLIMITED,' +
  410. 'UNLOCK,UNQUIESCE,UNRECOVERABLE,UNTIL,UNUSABLE,UNUSED,UPDATE,USAGE,' +
  411. 'USE_INDIRECT_DATA_BUFFERS,USER_DUMP_DEST,VALIDATE,VALIDATION,VALUES,' +
  412. 'VARGRAPHIC,VARRAY,VIEW,WHERE,WITH,WITHOUT,WNDS,WNPS,' +
  413. 'WORKAREA_SIZE_POLICY';
  414. // PLSQL keywords
  415. OraclePLSQLKW: string =
  416. 'ABORT,ACCEPT,AFTER,ARRAY,ARRAYLEN,ASSERT,ASSIGN,AT,AUTHORIZATION,' +
  417. 'AUTONOMOUS_TRANSACTION,BASE_TABLE,BEGIN,BODY,BULK,BULK_ROWCOUNT,CALL,' +
  418. 'CALLING,CASE,CHAR_BASE,CHARSETFORM,CHARSETID,CLOSE,CLUSTERS,COLAUTH,' +
  419. 'COLLECT,COMMIT,CONNECTION,CONSTANT,COOKIE,COOKIE_TABLE,CRASH,CURRVAL,' +
  420. 'CURSOR,DATA_BASE,DATABASE,DBA,DEBUGOFF,DEBUGON,DECLARE,DEFINITION,' +
  421. 'DELAY,DELTA,DEQUEUE_OPTIONS_T,DETERMINISTIC,DIGITS,DISPOSE,DO,EACH,' +
  422. 'ELSIF,END,ENQUEUE_OPTIONS_T,ENTRY,EXCEPTION,EXCEPTION_INIT,EXIT,' +
  423. 'EXTERNAL,FALSE,FETCH,FIXED,FORALL,FORM,FOUND,FUNCTION,GENERIC,GOTO,IF,' +
  424. 'INDEXES,INDICATOR,INSTEAD,INTERFACE,ISOPEN,LANGUAGE,LCR$_DDL_RECORD,' +
  425. 'LCR$_ROW_LIST,LCR$_ROW_RECORD,LCR$_ROW_UNIT,LIMITED,LOOP,MAXLEN,' +
  426. 'MESSAGE_PROPERTIES_T,MGW_BASIC_MSG_T,MGW_MQSERIES_PROPERTIES,' +
  427. 'MGW_NAME_TYPE_ARRAY_T,MGW_NAME_VALUE_T,MGW_PROPERTIES,MGW_PROPERTY,' +
  428. 'MGW_RAW_VALUE_T,MGW_TEXT_VALUE_T,NAME,NEW,NEXTVAL,NOTFOUND,' +
  429. 'NUMBER_BASE,OLD,OPEN,OUT,PACKAGE,PARALLEL_ENABLE,PARTITION,PASCAL,' +
  430. 'PRAGMA,PRIVATE,PROCEDURE,RAISE,RANGE,RE$ATTRIBUTE_VALUE,' +
  431. 'RE$ATTRIBUTE_VALUE_LIST,RE$COLUMN_VALUE,RE$COLUMN_VALUE_LIST,' +
  432. 'RE$NAME_ARRAY,RE$NV_ARRAY,RE$NV_LIST,RE$NV_NODE,RE$RULE_HIT,' +
  433. 'RE$RULE_HIT_LIST,RE$TABLE_ALIAS,RE$TABLE_ALIAS_LIST,' +
  434. 'RE$TABLE_VALUE,RE$TABLE_VALUE_LIST,RE$VARIABLE_TYPE,' +
  435. 'RE$VARIABLE_TYPE_LIST,RE$VARIABLE_VALUE,RE$VARIABLE_VALUE_LIST,RECORD,' +
  436. 'REF,REFERENCING,RELEASE,REMR,REQ,RESP,RESTRICT_REFERENCES,RETURN,' +
  437. 'REVERSE,ROLLBACK,ROWCOUNT,ROWTYPE,RUNTIME_INFO,SAVEPOINT,SCHEMA,' +
  438. 'SELF,SEPARATE,SERIALLY_REUSABLE,SPACE,SQL,SQLERROR,STATEMENT,STRUCT,' +
  439. 'SUBTYPE,TABAUTH,TABLES,TASK,TDO,TERMINATE,TRUE,TYPE,USE,VARYING,VIEWS,' +
  440. 'WHEN,WHILE,WORK,WRITE,XOR';
  441. // Oracle data types
  442. OracleTypes: string =
  443. 'ANYDATA,ANYDATASET,ANYTYPE,BFILE,BINARY_INTEGER,BLOB,BOOLEAN,CHAR,CLOB,' +
  444. 'DATE,DAY,DBURIType,DEC,DECIMAL,DOUBLE,FLOAT,HTTPURIType,INTEGER,LONG,' +
  445. 'MLSLABEL,MONTH,NATURAL,NATURALN,NCHAR,NCLOB,NUMBER,NUMERIC,' +
  446. 'NVARCHAR2,PLS_INTEGER,POSITIVE,POSITIVEN,RAW,REAL,ROWID,SECOND,SMALLINT,' +
  447. 'TIMESTAMP,URIType,UROWID,VARCHAR,VARCHAR2,XDBURIType,XMLDATA,XMLType,' +
  448. 'YEAR,ZONE';
  449. // Oracle built in exceptions
  450. OracleExceptions: string =
  451. 'ACCESS_INTO_NULL,COLLECTION_IS_NULL,CURSOR_ALREADY_OPEN,' +
  452. 'DUP_VAL_ON_INDEX,INVALID_CURSOR,INVALID_NUMBER,LOGIN_DENIED,' +
  453. 'NO_DATA_FOUND,NOT_LOGGED_ON,OTHERS,PROGRAM_ERROR,ROWTYPE_MISMATCH,' +
  454. 'STORAGE_ERROR,SUBSCRIPT_BEYOND_COUNT,SUBSCRIPT_OUTSIDE_LIMIT,' +
  455. 'SYS_INVALID_ROWID,TIMEOUT_ON_RESOURCE,TOO_MANY_ROWS,VALUE_ERROR,' +
  456. 'ZERO_DIVIDE';
  457. // Oracle built in functions
  458. OracleFunctions: string =
  459. 'ABS,ACOS,ADD_MONTHS,AGGREGATE,ANALYTIC,ASCII,ASCIISTR,ASIN,ATAN,ATAN2,' +
  460. 'AVERAGE,AVG,BASE64_DECODE,BASE64_ENCODE,BEGIN_REQUEST,BFILENAME,' +
  461. 'BIN_TO_NUM,BIT_AND,BIT_COMPLEMENT,BIT_OR,BIT_XOR,BITAND,' +
  462. 'CAST_FROM_BINARY_INTEGER,CAST_FROM_NUMBER,CAST_TO_BINARY_INTEGER,' +
  463. 'CAST_TO_NUMBER,CAST_TO_RAW,CAST_TO_VARCHAR2,CEIL,CHARTOROWID,CHR,' +
  464. 'COLUMN_PRESENT,COMPARE,COMPARE_TEMPLATES,COMPOSE,CONCAT,CONVERSION,' +
  465. 'CONVERT,CONVERT_ANYDATA_TO_LCR_DDL,CONVERT_ANYDATA_TO_LCR_ROW,' +
  466. 'COPIES,COPY_TEMPLATE,CORR,COS,COSH,COUNT,COVAR_POP,COVAR_SAMP,' +
  467. 'CREATE_OBJECT_FROM_EXISTING,CREATE_PIPE,CREATE_REFRESH_TEMPLATE,' +
  468. 'CREATE_TEMPLATE_OBJECT,CREATE_TEMPLATE_PARM,CREATE_USER_AUTHORIZATION,' +
  469. 'CREATE_USER_PARM_VALUE,CRLF,CUBE,CUME_DIST,CURRENT_DATE,' +
  470. 'CURRENT_INSTANCE,CURRENT_TIMESTAMP,DATA_BLOCK_ADDRESS_BLOCK,' +
  471. 'DATA_BLOCK_ADDRESS_FILE,DBTIMEZONE,DECODE,DECOMPOSE,DELETE_BREAKPOINT,' +
  472. 'DELETE_OER_BREAKPOINT,DENSE_RANK,DEPTH,DEREF,DISABLE_BREAKPOINT,' +
  473. 'DISABLED,DISPLAY,DROP_ALL,DROP_ELEMENT,DROP_FILE,DUMP,' +
  474. 'EMPTY_BLOB,EMPTY_CLOB,ENABLE_BREAKPOINT,EQUALS_PATH,ESTIMATE_CPU_UNITS,' +
  475. 'EXCLUDE_PUSH,EXECUTE_AND_FETCH,EXECUTE_NON_QUERY,EXISTSNODE,EXP,EXTEND,' +
  476. 'EXTRACT,EXTRACTVALUE,FCOPY,FETCH_ROW,FETCH_ROWS,FGETPOS,FILEEXISTS,' +
  477. 'FILEISOPEN,FIRST,FIRST_VALUE,FLOOR,FLUSH_DATA,FOPEN,FOPEN_NCHAR,' +
  478. 'FORMAT_CALL_STACK,FORMAT_ERROR_STACK,FREMOVE,FRENAME,FROM_REMOTE,FSEEK,' +
  479. 'GET_ARG_FORM,GET_ARG_TYPE,GET_COOKIE_COUNT,GET_COOKIES,' +
  480. 'GET_DETAILED_SQLCODE,GET_DETAILED_SQLERRM,GET_ERROR_MESSAGE,' +
  481. 'GET_HASH_VALUE,GET_HEADER_COUNT,GET_INDEXES,GET_INFORMATION,' +
  482. 'GET_OBJECT_NULL_VECTOR_ARG,GET_PARAMETER_VALUE,' +
  483. 'GET_PERSISTENT_CONN_COUNT,GET_RAW,GET_RESPONSE,GET_RUNTIME_INFO,' +
  484. 'GET_RUNTIME_PARM_ID,GET_SESSION_TIMEOUT,GET_SYSTEM_CHANGE_NUMBER,' +
  485. 'GET_TAG,GET_TIME,GET_TIMEOUT,GET_TIMEOUT_BEHAVIOR,GET_VALUE,' +
  486. 'GETCHUNKSIZE,GETLENGTH,GLB,GREATEST,GREATEST_LB,GROUP_ID,GROUPING,' +
  487. 'GROUPING_ID,HEXTORAW,I_AM_A_REFRESH,INITCAP,INITIALIZE,' +
  488. 'INSTANTIATE_OFFLINE,INSTANTIATE_ONLINE,INSTR,INSTRB,' +
  489. 'INTERNAL_VERSION_CHECK,IS_CLUSTER_DATABASE,IS_LOCATOR,IS_OPEN,' +
  490. 'IS_ROLE_ENABLED,IS_SESSION_ALIVE,IS_TRIGGER_FIRE_ONCE,ISTEMPORARY,LAG,' +
  491. 'LAST,LAST_DAY,LAST_ERROR_POSITION,LAST_ROW_COUNT,LAST_ROW_ID,' +
  492. 'LAST_SQL__CODE,LAST_VALUE,LEAD,LEAST,LEAST_LB,LENGTH,LENGTHB,LINEAR,LN,' +
  493. 'LOCAL_TRANSACTION_ID,LOCALTIMESTAMP,LOG,LOWER,LPAD,LTRIM,LUB,' +
  494. 'MAKE_DATA_BLOCK_ADDRESS,MAKE_REF,MAP_ALL,MAP_ELEMENT,MAP_FILE,' +
  495. 'MAP_OBJECT,MAX,MIN,MINE_VALUE,MISCELLANEOUS,MOD,MONTHS_BETWEEN,NCHR,' +
  496. 'NEW_TIME,NEXT_DAY,NEXT_ITEM_TYPE,NLS_CHARSET_DECL_LEN,NLS_CHARSET_ID,' +
  497. 'NLS_CHARSET_NAME,NLS_INITCAP,NLS_LOWER,NLS_SORT,NLS_UPPER,NLSSORT,NTILE,' +
  498. 'NULLIF,NUMTODSINTERVAL,NUMTOYMINTERVAL,NVARRAY_FIND_NAME,' +
  499. 'NVARRAY_FIND_NAME_TYPE,NVARRAY_GET,NVARRAY_GET_BOOLEAN,NVARRAY_GET_BYTE,' +
  500. 'NVARRAY_GET_DATE,NVARRAY_GET_DOUBLE,NVARRAY_GET_FLOAT,' +
  501. 'NVARRAY_GET_INTEGER,NVARRAY_GET_LONG,NVARRAY_GET_RAW,NVARRAY_GET_SHORT,' +
  502. 'NVARRAY_GET_TEXT,NVL,NVL2,OBJECT,OPEN_CURSOR,OVER,OVERLAY,PATH,' +
  503. 'PAUSE_PROFILER,PERCENT_RANK,PERCENTILE_CONT,PERCENTILE_DISC,PMARKER,' +
  504. 'PORT_STRING,POWER,PURGE,PUSH,PUT_RAW,QUOTED_PRINTABLE_DECODE,' +
  505. 'QUOTED_PRINTABLE_ENCODE,RANDOM,RANK,RATIO_TO_REPORT,RATION_TO_REPORT,' +
  506. 'RAWTOHEX,RAWTONHEX,RECEIVE_MESSAGE,REFERENCE,REFTOHEX,REGR_AVGX,' +
  507. 'REGR_AVGY,REGR_COUNT,REGR_INTERCEPT,REGR_R2,REGR_SLOPE,REGR_SXX,' +
  508. 'REGR_SXY,REGR_SYY,REGRESSION,REMOVE_PIPE,REPLACE,REPLICATION_IS_ON,' +
  509. 'REQUEST,REQUEST_PIECES,RESTORE,RESUME_PROFILER,RETURNING,ROLLUP,ROUND,' +
  510. 'ROW_NUMBER,ROWID_BLOCK_NUMBER,ROWID_CREATE,ROWID_OBJECT,' +
  511. 'ROWID_RELATIVE_FNO,ROWID_ROW_NUMBER,ROWID_TO_ABSOLUTE_FNO,' +
  512. 'ROWID_TO_EXTENDED,ROWID_TO_RESTRICTED,ROWID_TYPE,ROWID_VERIFY,' +
  513. 'ROWIDTOCHAR,ROWIDTONCHAR,RPAD,RTRIM,SEND_MESSAGE,SESSIONTIMEZONE,' +
  514. 'SET_BREAKPOINT,SET_OER_BREAKPOINT,SET_TIMEOUT,SET_VALUE,SIGN,SIN,SINH,' +
  515. 'SOUNDEX,SPACE_ERROR_INFO,SQLCODE,SQLERRM,SQRT,START_PROFILER,STDDEV,' +
  516. 'STDDEV_POP,STDDEV_SAMP,STDDEVP,STDDEVS,STEP_ID,STOP_PROFILER,SUBSTR,' +
  517. 'SUBSTRB,SUM,SYNCHRONIZE,SYS_CONNECT_BY_PATH,SYS_CONTEXT,SYS_DBURIGEN,' +
  518. 'SYS_EXTRACT_UTC,SYS_GUID,SYS_TYPEID,SYS_XMLAGG,SYS_XMLGEN,SYSDATE,' +
  519. 'SYSTIMESTAMP,TAN,TANH,TO_CHAR,TO_CLOB,TO_DATE,TO_DSINTERVAL,TO_LABEL,' +
  520. 'TO_LOB,TO_MULTI_BYTE,TO_NCHAR,TO_NCLOB,TO_NUMBER,TO_SINGLE_BYTE,' +
  521. 'TO_TIMESTAMP,TO_TIMESTAMP_TZ,TO_YMINTERVAL,TRANSLATE,TRANSLITERATE,' +
  522. 'TREAT,TRIM,TRUNC,TZ_OFFSET,UID,UNDER_PATH,UNESCAPE,UNIQUE_SESSION_ID,' +
  523. 'UNIQUE_SESSION_NAME,UNISTR,UPDATEXML,UPPER,USER,USERENV,USING,UUDECODE,' +
  524. 'UUENCODE,VALUE,VAR_POP,VAR_SAMP,VARIANCE,VARP,VARS,VSIZE,WIDTH_BUCKET,' +
  525. 'XMLAGG,XMLCOLATTVAL,XMLCONCAT,XMLELEMENT,XMLFOREST,XMLSEQUENCE,' +
  526. 'XMLTRANSFORM,XRANGE';
  527. OracleDefaultPackages: string =
  528. 'DBMS_ALERT,DBMS_APPLICATION_INFO,DBMS_APPLY_ADM,DBMS_AQ,' +
  529. 'DBMS_AQ_EXP_HISTORY_TABLES,DBMS_AQ_EXP_INDEX_TABLES,' +
  530. 'DBMS_AQ_EXP_QUEUE_TABLES,DBMS_AQ_EXP_QUEUES,' +
  531. 'DBMS_AQ_EXP_SUBSCRIBER_TABLES,DBMS_AQ_EXP_TIMEMGR_TABLES,' +
  532. 'DBMS_AQ_EXP_ZECURITY,DBMS_AQ_IMP_INTERNAL,DBMS_AQ_IMP_ZECURITY,' +
  533. 'DBMS_AQ_IMPORT_INTERNAL,DBMS_AQ_SYS_EXP_ACTIONS,' +
  534. 'DBMS_AQ_SYS_EXP_INTERNAL,DBMS_AQ_SYS_IMP_INTERNAL,DBMS_AQADM,' +
  535. 'DBMS_AQADM_SYS,DBMS_AQADM_SYSCALLS,DBMS_AQELM,DBMS_AQIN,' +
  536. 'DBMS_AQJMS,DBMS_BACKUP_RESTORE,DBMS_CAPTURE_ADM,DBMS_DDL,' +
  537. 'DBMS_DEBUG,DBMS_DEFER,DBMS_DEFER_IMPORT_INTERNAL,DBMS_DEFER_QUERY,' +
  538. 'DBMS_DEFER_SYS,DBMS_DESCRIBE,DBMS_DISTRIBUTED_TRUST_ADMIN,' +
  539. 'DBMS_EXPORT_EXTENSION,DBMS_FGA,DBMS_FLASHBACK,DBMS_HS_PASSTHROUGH,' +
  540. 'DBMS_IJOB,DBMS_INTERNAL_TRIGGER,DBMS_IOT,DBMS_IREFRESH,DBMS_ISNAPSHOT,' +
  541. 'DBMS_JAVA_TEST,DBMS_JOB,DBMS_LDAP,DBMS_LIBCACHE,DBMS_LOB,DBMS_LOCK,' +
  542. 'DBMS_LOGMNR,DBMS_LOGMNR_CDC_PUBLISH,DBMS_LOGMNR_CDC_SUBSCRIBE,' +
  543. 'DBMS_LOGMNR_D,DBMS_LOGSTDBY,DBMS_METADATA,DBMS_MGWADM,' +
  544. 'DBMS_MGWMSG,DBMS_MVIEW,DBMS_OBFUSCATION_TOOLKIT,DBMS_ODCI,' +
  545. 'DBMS_OFFLINE_OG,DBMS_OFFLINE_SNAPSHOT,DBMS_OLAP,' +
  546. 'DBMS_ORACLE_TRACE_AGENT,DBMS_ORACLE_TRACE_USER,DBMS_OUTLN,' +
  547. 'DBMS_OUTLN_EDIT,DBMS_OUTPUT,DBMS_PCLXUTIL,DBMS_PICKLER,DBMS_PIPE,' +
  548. 'DBMS_PITR,DBMS_PLUGTS,DBMS_PROFILER,DBMS_PROPAGATION_ADM,' +
  549. 'DBMS_PRVTAQIM,DBMS_PRVTAQIP,DBMS_PRVTAQIS,DBMS_PRVTRMIE,DBMS_PSP,' +
  550. 'DBMS_PSWMG_IMPORT,DBMS_RANDOM,DBMS_RCVMAN,DBMS_RECTIFIER_DIFF,' +
  551. 'DBMS_REDEFINITION,DBMS_REFRESH,DBMS_REFRESH_EXP_LWM,' +
  552. 'DBMS_REFRESH_EXP_SITES,DBMS_REPAIR,DBMS_REPCAT,DBMS_REPCAT_ADMIN,' +
  553. 'DBMS_REPCAT_AUTH,DBMS_REPCAT_INSTANTIATE,DBMS_REPCAT_RGT,DBMS_REPUTIL,' +
  554. 'DBMS_RESOURCE_MANAGER,DBMS_RESOURCE_MANAGER_PRIVS,DBMS_RESUMABLE,' +
  555. 'DBMS_RLS,DBMS_RMGR_GROUP_EXPORT,DBMS_RMGR_PACT_EXPORT,' +
  556. 'DBMS_RMGR_PLAN_EXPORT,DBMS_RMIN,DBMS_ROWID,DBMS_RULE,DBMS_RULE_ADM,' +
  557. 'DBMS_RULE_EXIMP,DBMS_SESSION,DBMS_SHARED_POOL,DBMS_SNAP_INTERNAL,' +
  558. 'DBMS_SNAP_REPAPI,DBMS_SNAPSHOT,DBMS_SNAPSHOT_UTL,DBMS_SPACE,' +
  559. 'DBMS_SPACE_ADMIN,DBMS_SQL,DBMS_STANDARD,DBMS_STATS,DBMS_STORAGE_MAP,' +
  560. 'DBMS_STREAMS,DBMS_STREAMS_ADM,DBMS_SUMADV,DBMS_SUMMARY,' +
  561. 'DBMS_SUMREF_CHILD,DBMS_SUMREF_PARENT,DBMS_SUMREF_UTIL,' +
  562. 'DBMS_SUMREF_UTIL2,DBMS_SUMVDM,DBMS_SYS_ERROR,DBMS_SYS_SQL,' +
  563. 'DBMS_SYSTEM,DBMS_TRACE,DBMS_TRANSACTION,DBMS_TRANSFORM,DBMS_TTS,' +
  564. 'DBMS_TYPES,DBMS_UTILITY,DBMS_WM,DBMS_XDB,DBMS_XDB_VERSION,DBMS_XDBT,' +
  565. 'DBMS_XMLDOM,DBMS_XMLGEN,DBMS_XMLPARSER,DBMS_XMLQUERY,' +
  566. 'DBMS_XMLSAVE,DBMS_XPLAN,DBMS_XSLPROCESSOR,DBMS_ZHELP,DBMS_ZHELP_IR,' +
  567. 'DBMSZEXP_SYSPKGGRNT,DEBUG_EXTPROC,DIANA,DIUTIL,ODCICONST,OUTLN_PKG,' +
  568. 'PBREAK,PBRPH,PBSDE,PBUTL,PIDL,PLITBLM,SDO_CS,SDO_GEOM,SDO_LRS,' +
  569. 'SDO_MIGRATE,SDO_TUNE,SDO_UTIL,STANDARD,SYS_STUB_FOR_PURITY_ANALYSIS,' +
  570. 'UTL_COLL,UTL_ENCODE,UTL_FILE,UTL_FILE_DIR,UTL_HTTP,UTL_INADDR,UTL_PG,' +
  571. 'UTL_RAW,UTL_REF,UTL_SMTP,UTL_TCP,UTL_URL';
  572. OracleSQLPlusCommands: string =
  573. 'APP,APPINFO,AQ$_AGENT,AQ$_AGENT_LIST_T,AQ$_DESCRIPTOR,AQ$_POST_INFO,' +
  574. 'AQ$_POST_INFO_LIST,AQ$_RECIPIENT_LIST_T,AQ$_REG_INFO,AQ$_REG_INFO_LIST,' +
  575. 'AQ$_SUBSCRIBER_LIST_T,ARCHIVE,ARRAYSIZE,ATTRIBUTE,AUTOCOMMIT,AUTOP,' +
  576. 'AUTOPRINT,AUTORECOVERY,AUTOT,AUTOTRACE,BLO,BLOCKTERMINATOR,BRE,BREAK,' +
  577. 'BTI,BTITLE,BUFFER,CL,CLEAR,CLOSECURSOR,CMDS,CMDSEP,COL,COLSEP,COM,COMP,' +
  578. 'COMPAT,COMPATIBILITY,CON,CONN,COPY,COPYC,COPYCOMMIT,COPYTYPECHECK,DEF,' +
  579. 'DEFINE,DESC,DESCR,DESCRI,DESCRIB,DESCRIBE,DISC,DISCO,DISCON,DISCONN,' +
  580. 'DISCONNE,DISCONNEC,DISCONNECT,EA,ECHO,EDITF,EDITFILE,EMB,' +
  581. 'EMBEDDED,ESC,EXEC,EXECUTE,FAILURE,FEED,FEEDBACK,FLAGGER,FLU,FULL,GET,' +
  582. 'HEA,HEADING,HEADS,HEADSEP,HELP,HO,HOST,INPUT,INTERMED,INTERMEDIATE,INV,' +
  583. 'INVISIBLE,LIN,LINESIZE,LO,LOBOF,LOBOFFSET,LOGON,LOGSOURCE,LONGC,' +
  584. 'LONGCHUNKSIZE,MARKUP,MAXDATA,MIX,MIXED,NATIVE,NEWP,NEWPAGE,NUM,' +
  585. 'NUMF,NUMFORMAT,NUMWIDTH,OFF,OSERROR,PAGES,PAGESIZE,PASSW,PAU,PAUSE,' +
  586. 'PPRINT,PRI,PRINT,PROMPT,RECSEP,RECSEPCHAR,REPF,REPFOOTER,REPH,REPHEADER,' +
  587. 'RUN,SAVE,SCAN,SERVEROUTPUT,SET,SHIFT,SHIFTINOUT,SHO,SHOW,SHUTDOWN,' +
  588. 'SILENT,SPOOL,SQLBL,SQLBLANKLINES,SQLC,SQLCASE,SQLCO,SQLCONTINUE,SQLN,' +
  589. 'SQLNUMBER,SQLP,SQLPRE,SQLPREFIX,SQLPROMPT,SQLT,SQLTERMINATOR,STA,' +
  590. 'STARTUP,STATEMENT_ID,STORE,SUCCESS,SUF,SUFFIX,TAB,TERM,TERMOUT,TI,TIMI,' +
  591. 'TIMING,TRIMOUT,TRIMS,TRIMSPOOL,TTI,TTITLE,UND,UNDEF,UNDEFINE,' +
  592. 'UNDERLINE,UP,VAR,VARIABLE,VER,VERIFY,VERSION,VIS,VISIBLE,WHENEVER,WR,' +
  593. 'WRA,WRAP,WRAPPED';
  594. OracleCommentKW: string =
  595. 'REM,REMA,REMAR,REMARK';
  596. //---Postgresql-----------------------------------------------------------------
  597. //Postgresql Keywords
  598. PostgresKW: String =
  599. 'IF,LOOP,ABORT,ABSOLUTE,ACCESS,ACTION,ADA,ADD,ADMIN,AFTER,AGGREGATE,ALIAS' +
  600. ',ALLOCATE,ALTER,ANALYSE,ANALYZE,AND,ARE,AS,ASC,ASENSITIVE' +
  601. ',ASSERTION,ASSIGNMENT,ASYMMETRIC,AT,ATOMIC,AUTHORIZATION,BACKWARD' +
  602. ',BEFORE,BEGIN,BETWEEN' +
  603. ',BOTH,BREADTH,BY,C,CACHE,CALL,CALLED,CARDINALITY,CASCADE,CASCADED,CASE' +
  604. ',CAST,CATALOG,CATALOG_NAME,CHAIN,CHARACTERISTICS' +
  605. ',CHARACTER_SET_CATALOG,CHARACTER_SET_NAME,CHARACTER_SET_SCHEMA' +
  606. ',CHECK,CHECKED,CHECKPOINT,CLASS,CLASS_ORIGIN,CLOB,CLOSE,CLUSTER,COBOL,COLLATE' +
  607. ',COLLATION,COLLATION_CATALOG,COLLATION_NAME,COLLATION_SCHEMA,COLUMN,COLUMN_NAME' +
  608. ',COMMAND_Function,COMMAND_Function_CODE,COMMENT,COMMIT,COMMITTED,COMPLETION' +
  609. ',CONDITION_NUMBER,CONNECT,CONNECTION,CONNECTION_NAME,CONSTRAINT,CONSTRAINTS' +
  610. ',CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONSTRUCTOR,CONTAINS' +
  611. ',CONTINUE,CONVERSION,COPY,CORRESPONDING,CREATE,CREATEDB,CREATEUSER' +
  612. ',CROSS,CUBE,CURRENT,CURRENT_PATH,CURRENT_ROLE' +
  613. ',CURSOR,CURSOR_NAME,CYCLE,DATA,DATABASE,DATETIME_INTERVAL_CODE' +
  614. ',DATETIME_INTERVAL_PRECISION,DAY,DEALLOCATE,DEC,DECLARE,DEFAULT,DEFERRABLE' +
  615. ',DEFERRED,DEFINED,DEFINER,DELETE,DELIMITER,DELIMITERS,DEPTH,DEREF,DESC,DESCRIBE' +
  616. ',DESCRIPTOR,DESTROY,DESTRUCTOR,DETERMINISTIC,DIAGNOSTICS,DICTIONARY,DISCONNECT' +
  617. ',DISPATCH,DISTINCT,DO,DOMAIN,DROP,DYNAMIC,DYNAMIC_Function,DYNAMIC_Function_CODE' +
  618. ',EACH,ELSE,ELSIF,ELSEIF,ENCODING,ENCRYPTED,END,EQUALS,ESCAPE,EXCEPT,EXCEPTION' +
  619. ',EXCLUSIVE,EXEC,EXECUTE,EXISTING,EXPLAIN,EXTERNAL,FALSE,FETCH' +
  620. ',FINAL,FIRST,FOR,FORCE,FOREIGN,FORTRAN,FORWARD,FOUND,FREE,FREEZE,FROM' +
  621. ',FULL,Function,G,GENERAL,GENERATED,GET,GLOBAL,GO,GOTO,GRANT,GRANTED,GROUP' +
  622. ',GROUPING,HANDLER,HAVING,HIERARCHY,HOLD,HOUR,IDENTITY,IGNORE,ILIKE' +
  623. ',IMMEDIATE,IMMUTABLE,IMPLEMENTATION,IMPLICIT,INCREMENT,INDEX,INDICATOR' +
  624. ',INFIX,INHERITS,INITIALIZE,INITIALLY,INNER,INOUT,INPUT,INSENSITIVE,INSERT' +
  625. ',INSTANCE,INSTANTIABLE,INSTEAD,INT,INTERSECT,INTO,INVOKER' +
  626. ',IS,ISNULL,ISOLATION,ITERATE,JOIN,K,KEY,KEY_MEMBER,KEY_TYPE,LANCOMPILER,LANGUAGE' +
  627. ',LARGE,LAST,LATERAL,LEADING,LEFT,LESS,LEVEL,LIKE,LIMIT,LISTEN,LOAD,LOCAL' +
  628. ' LOCATION,LOCATOR,LOCK,M,MAP,MATCH,MAXVALUE,MESSAGE_LENGTH' +
  629. ',MESSAGE_OCTET_LENGTH,MESSAGE_TEXT,METHOD,MINUTE,MINVALUE,MODE,MODIFIES' +
  630. ',MODIFY,MODULE,MONTH,MORE,MOVE,MUMPS,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NCLOB' +
  631. ',NEW,NEXT,NO,NOCREATEDB,NOCREATEUSER,NONE,NOT,NOTHING,NOTIFY,NOTNULL,NULL,NULLABLE' +
  632. ',NUMBER,OBJECT,OF,OFF,OFFSET,OIDS,OLD,ON,ONLY,OPEN' +
  633. ',OPERATION,Operator,OPTION,OPTIONS,OR,ORDER,ORDINALITY,OUT,OUTER,OUTPUT,OVERLAPS' +
  634. ',OVERRIDING,OWNER,PAD,PARAMETER,PARAMETERS,PARAMETER_MODE,PARAMETER_NAME,PARAMETER_ORDINAL_POSITION' +
  635. ',PARAMETER_SPECIFIC_CATALOG,PARAMETER_SPECIFIC_NAME,PARAMETER_SPECIFIC_SCHEMA,PARTIAL,PASCAL,PASSWORD' +
  636. ',PENDANT,PLACING,PLI,POSTFIX,PRECISION,PREFIX,PREORDER,PREPARE,PRESERVE,PRIMARY' +
  637. ',PRIOR,PRIVILEGES,PROCEDURAL,PROCEDURE,PUBLIC,READ,READS,RECHECK,RECURSIVE,REF,REFERENCES' +
  638. ',REFERENCING,REINDEX,RELATIVE,RENAME ,REPEATABLE,RESET,RESTRICT,RESULT,RETURN,RETURNED_LENGTH' +
  639. ',RETURNED_OCTET_LENGTH,RETURNED_SQLSTATE,RETURNS,REVOKE,RIGHT,ROLE,ROLLBACK,ROLLUP,ROUTINE,ROUTINE_CATALOG' +
  640. ',ROUTINE_NAME,ROUTINE_SCHEMA,ROW,ROWS,ROW_COUNT,RULE,SAVEPOINT,SCALE,SCHEMA,SCHEMA_NAME' +
  641. ',SCOPE,SCROLL,SEARCH,SECOND,SECTION,SECURITY,SELECT,SELF,SENSITIVE,SEQUENCE,SERIALIZABLE,SERVER_NAME' +
  642. ',SESSION,SET,SETOF,SETS,SHARE,SHOW,SIMILAR,SIMPLE,SIZE,SOURCE,SPACE' +
  643. ',SPECIFIC,SPECIFICTYPE,SPECIFIC_NAME,SQLCODE,SQLERROR,SQLEXCEPTION,SQLSTATE,SQLWARNING' +
  644. ',STABLE,START,STATE,STATEMENT,STATIC,STATISTICS,STDIN,STDOUT,STORAGE,STRICT,STRUCTURE' +
  645. ',STYLE,SUBCLASS_ORIGIN,SUBLIST,SYMMETRIC,SYSID,SYSTEM,SYSTEM_USER,TABLE' +
  646. ',TABLE_NAME,TEMP,TEMPLATE,TEMPORARY,TERMINATE,THAN,THEN,TIMEZONE_HOUR' +
  647. ',TIMEZONE_MINUTE,TO,TOAST,TRAILING,TRANSACTION,TRANSACTIONS_COMMITTED,TRANSACTIONS_ROLLED_BACK' +
  648. ',TRANSACTION_ACTIVE,TRANSFORM,TRANSFORMS,TRANSLATION,TREAT,TRIGGER_CATALOG' +
  649. ',TRIGGER_NAME,TRIGGER_SCHEMA,TRUE,TRUNCATE,TRUSTED,TYPE,UNCOMMITTED,UNDER,UNENCRYPTED,UNION'+
  650. ',UNIQUE,UNKNOWN,UNLISTEN,UNNAMED,UNNEST,UNTIL,UPDATE,USAGE,USER_DEFINED_TYPE_CATALOG' +
  651. ',USER_DEFINED_TYPE_NAME,USER_DEFINED_TYPE_SCHEMA,USING,VACUUM,VALID,VALIDATOR,VALUE,VALUES' +
  652. ',VARIABLE,VARYING,VERBOSE,VIEW,VOLATILE,WHEN,WHENEVER,WHERE,WITH,WITHOUT,WORK,WRITE,YEAR,ZONE';
  653. //Postgresql Functions
  654. PostgresFunctions:String =
  655. 'abs,cbrt,ceil,ceiling,degrees,exp,floor,ln,log,mod,pi,power,radians,random,'+
  656. 'round,setseed,sign,sqrt,trunc,width_bucket,acos,asin,atan,atan2,cos,cot,'+
  657. 'sin,tan,bit_length,char_length,character_length,convert,lower,octet_length,'+
  658. 'overlay,position,substring,trim,upper,ascii,btrim,chr,decode,'+
  659. 'encode,initcap,length,lpad,ltrim,md5,pg_client_encoding,quote_ident,quote_literal,'+
  660. 'replace,rpad,rtrim,split_part,strpos,substr,to_ascii,to_hex,translate,get_byte,'+
  661. 'set_byte,get_bit,set_bit,to_char,to_date,'+
  662. 'to_timestamp,to_number,age,date_part,date_trunc,extract,now,'+
  663. 'timeofday,isfinite,area,box_intersect,center,diameter,height,isclosed,isopen,'+
  664. 'npoints,pclose,popen,radius,width,'+
  665. 'broadcast,'+
  666. 'host,masklen,set_masklen,netmask,hostmask,network,abbrev,family,nextval,'+
  667. 'currval,setval,coalesce,nullif,array_cat ,array_append ,array_prepend ,array_dims,'+
  668. 'array_lower ,array_upper ,array_to_string ,string_to_array ,avg,bit_and,bit_or,bool_and,'+
  669. 'bool_or,count,every,max,min,stddev,sum,variance,exists ,in ,some,'+
  670. 'all ,generate_series,current_database,current_schema,'+
  671. 'current_schemas,,inet_client_addr,inet_client_port,inet_server_addr,inet_server_port,'+
  672. 'version,has_table_privilege,has_database_privilege,'+
  673. 'has_function_privilege,has_language_privilege,'+
  674. 'has_schema_privilege,has_tablespace_privilege,'+
  675. 'pg_table_is_visible,pg_type_is_visible,pg_function_is_visible,pg_operator_is_visible,'+
  676. 'pg_opclass_is_visible,pg_conversion_is_visible,format_type,pg_get_viewdef,'+
  677. 'pg_get_ruledef,pg_get_indexdef,'+
  678. 'pg_get_triggerdef,pg_get_constraintdef,pg_get_expr,'+
  679. 'pg_get_userbyid,pg_get_serial_sequence,pg_tablespace_databases,obj_description,'+
  680. 'col_description,current_setting,set_config,pg_cancel_backend,pg_start_backup,pg_stop_backup,'+
  681. 'current_user,current_date,current_time,current_timestamp,localtime,localtimestamp,session_user,user';
  682. //Postgresql Types
  683. PostgresTypes: String =
  684. 'smallint,integer,bigint,decimal,numeric,real,double,serial,bigserial,'+
  685. 'character,varchar,char,text,bytea,timestamp, interval,date,'+
  686. 'time,boolean,point,line,lseg,box,path,polygon,circle,cidr,inet,'+
  687. 'macaddr,BIT,bitvar,ARRAY,oid,regproc,regprocedure,regoper,regoperator,regclass,'+
  688. 'regtype,any,anyarray,anyelement,cstring,internal,language_handler,record,'+
  689. 'trigger,void,opaque,refcursor,binary,blob,int4,int2,int8,float,float4,float8';
  690. //Postgresql Exceptions
  691. PostgresExceptions: String =
  692. '$BODY$,SUCCESSFUL_COMPLETION,WARNING,DYNAMIC_RESULT_SETS_RETURNED,IMPLICIT_ZERO_BIT_PADDING,NULL_VALUE_ELIMINATED_IN_SET_FUNCTION,'+
  693. 'PRIVILEGE_NOT_GRANTED,PRIVILEGE_NOT_REVOKED,STRING_DATA_RIGHT_TRUNCATION,DEPRECATED_FEATURE,NO_DATA,NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED,'+
  694. 'SQL_STATEMENT_NOT_YET_COMPLETE,CONNECTION_EXCEPTION,CONNECTION_DOES_NOT_EXIST,CONNECTION_FAILURE,SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION,'+
  695. 'SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION,TRANSACTION_RESOLUTION_UNKNOWN,PROTOCOL_VIOLATION,TRIGGERED_ACTION_EXCEPTION,'+
  696. 'FEATURE_NOT_SUPPORTED,INVALID_TRANSACTION_INITIATION,LOCATOR_EXCEPTION,INVALID_LOCATOR_SPECIFICATION,INVALID_GRANTOR,INVALID_GRANT_OPERATION,'+
  697. 'INVALID_ROLE_SPECIFICATION,CARDINALITY_VIOLATION,DATA_EXCEPTION,ARRAY_SUBSCRIPT_ERROR,CHARACTER_NOT_IN_REPERTOIRE,DATETIME_FIELD_OVERFLOW,'+
  698. 'DIVISION_BY_ZERO,ERROR_IN_ASSIGNMENT,ESCAPE_CHARACTER_CONFLICT,INDICATOR_OVERFLOW,INTERVAL_FIELD_OVERFLOW,INVALID_ARGUMENT_FOR_LOGARITHM,'+
  699. 'INVALID_ARGUMENT_FOR_POWER_FUNCTION,INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION,INVALID_CHARACTER_VALUE_FOR_CAST,INVALID_DATETIME_FORMAT,'+
  700. 'INVALID_ESCAPE_CHARACTER,INVALID_ESCAPE_OCTET,INVALID_ESCAPE_SEQUENCE,INVALID_INDICATOR_PARAMETER_VALUE,INVALID_LIMIT_VALUE,'+
  701. 'INVALID_PARAMETER_VALUE,INVALID_REGULAR_EXPRESSION,INVALID_TIME_ZONE_DISPLACEMENT_VALUE,INVALID_USE_OF_ESCAPE_CHARACTER,'+
  702. 'MOST_SPECIFIC_TYPE_MISMATCH,NULL_VALUE_NOT_ALLOWED,NULL_VALUE_NO_INDICATOR_PARAMETER,NUMERIC_VALUE_OUT_OF_RANGE,STRING_DATA_LENGTH_MISMATCH,'+
  703. 'SUBSTRING_ERROR,TRIM_ERROR,UNTERMINATED_C_STRING,ZERO_LENGTH_CHARACTER_STRING,FLOATING_POINT_EXCEPTION,'+
  704. 'INVALID_TEXT_REPRESENTATION,INVALID_BINARY_REPRESENTATION,BAD_COPY_FILE_FORMAT,UNTRANSLATABLE_CHARACTER,INTEGRITY_CONSTRAINT_VIOLATION,'+
  705. 'RESTRICT_VIOLATION,NOT_NULL_VIOLATION,FOREIGN_KEY_VIOLATION,UNIQUE_VIOLATION,CHECK_VIOLATION,INVALID_CURSOR_STATE,INVALID_TRANSACTION_STATE,'+
  706. 'ACTIVE_SQL_TRANSACTION,BRANCH_TRANSACTION_ALREADY_ACTIVE,HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL,INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION,'+
  707. 'INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION,NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION,READ_ONLY_SQL_TRANSACTION,'+
  708. 'SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED,NO_ACTIVE_SQL_TRANSACTION,IN_FAILED_SQL_TRANSACTION,INVALID_SQL_STATEMENT_NAME,TRIGGERED_DATA_CHANGE_VIOLATION,'+
  709. 'INVALID_AUTHORIZATION_SPECIFICATION,DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST,DEPENDENT_OBJECTS_STILL_EXIST,INVALID_TRANSACTION_TERMINATION,'+
  710. 'SQL_ROUTINE_EXCEPTION,FUNCTION_EXECUTED_NO_RETURN_STATEMENT,MODIFYING_SQL_DATA_NOT_PERMITTED,PROHIBITED_SQL_STATEMENT_ATTEMPTED,READING_SQL_DATA_NOT_PERMITTED,'+
  711. 'INVALID_CURSOR_NAME,EXTERNAL_ROUTINE_EXCEPTION,CONTAINING_SQL_NOT_PERMITTED,'+
  712. 'EXTERNAL_ROUTINE_INVOCATION_EXCEPTION,INVALID_SQLSTATE_RETURNED,TRIGGER_PROTOCOL_VIOLATED,'+
  713. 'SRF_PROTOCOL_VIOLATED,SAVEPOINT_EXCEPTION,INVALID_SAVEPOINT_SPECIFICATION,INVALID_CATALOG_NAME,INVALID_SCHEMA_NAME,TRANSACTION_ROLLBACK,'+
  714. 'TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION,SERIALIZATION_FAILURE,STATEMENT_COMPLETION_UNKNOWN,DEADLOCK_DETECTED,SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION,'+
  715. 'SYNTAX_ERROR,INSUFFICIENT_PRIVILEGE,CANNOT_COERCE,GROUPING_ERROR,INVALID_FOREIGN_KEY,INVALID_NAME,NAME_TOO_LONG,RESERVED_NAME,DATATYPE_MISMATCH,'+
  716. 'INDETERMINATE_DATATYPE,WRONG_OBJECT_TYPE,UNDEFINED_COLUMN,UNDEFINED_FUNCTION,UNDEFINED_TABLE,UNDEFINED_PARAMETER,UNDEFINED_OBJECT,'+
  717. 'DUPLICATE_COLUMN,DUPLICATE_CURSOR,DUPLICATE_DATABASE,DUPLICATE_FUNCTION,DUPLICATE_PREPARED_STATEMENT,DUPLICATE_SCHEMA,DUPLICATE_TABLE,'+
  718. 'DUPLICATE_ALIAS,DUPLICATE_OBJECT,AMBIGUOUS_COLUMN,AMBIGUOUS_FUNCTION,AMBIGUOUS_PARAMETER,AMBIGUOUS_ALIAS,INVALID_COLUMN_REFERENCE,'+
  719. 'INVALID_COLUMN_DEFINITION,INVALID_CURSOR_DEFINITION,INVALID_DATABASE_DEFINITION,INVALID_FUNCTION_DEFINITION,INVALID_PREPARED_STATEMENT_DEFINITION,'+
  720. 'INVALID_SCHEMA_DEFINITION,INVALID_TABLE_DEFINITION,INVALID_OBJECT_DEFINITION,WITH_CHECK_OPTION_VIOLATION,INSUFFICIENT_RESOURCES,'+
  721. 'DISK_FULL,OUT_OF_MEMORY,TOO_MANY_CONNECTIONS,PROGRAM_LIMIT_EXCEEDED,STATEMENT_TOO_COMPLEX,TOO_MANY_COLUMNS,TOO_MANY_ARGUMENTS,'+
  722. 'OBJECT_NOT_IN_PREREQUISITE_STATE,OBJECT_IN_USE,CANT_CHANGE_RUNTIME_PARAM,LOCK_NOT_AVAILABLE,OPERATOR_INTERVENTION,QUERY_CANCELED,'+
  723. 'ADMIN_SHUTDOWN,CRASH_SHUTDOWN,CANNOT_CONNECT_NOW,IO_ERROR,UNDEFINED_FILE,DUPLICATE_FILE,CONFIG_FILE_ERROR,LOCK_FILE_EXISTS,'+
  724. 'PLPGSQL_ERROR,RAISE_EXCEPTION,INTERNAL_ERROR,DATA_CORRUPTED,INDEX_CORRUPTED';
  725. //---MS-SQL 7-------------------------------------------------------------------
  726. // keywords
  727. MSSQL7KW: string =
  728. 'ABSOLUTE,ADD,ALL,ALTER,ANY,AS,ASC,AUTHORIZATION,AVG,BACKUP,BEGIN,' +
  729. 'BETWEEN,BREAK,BROWSE,BULK,BY,CASCADE,CHECK,CHECKPOINT,CLOSE,CLUSTERED,' +
  730. 'COLUMN,COMMIT,COMMITTED,COMPUTE,CONFIRM,CONSTRAINT,CONTAINS,' +
  731. 'CONTAINSTABLE,CONTINUE,CONTROLROW,COUNT,CREATE,CROSS,CURRENT,' +
  732. 'CURRENT_DATE,CURRENT_TIME,CURSOR,DATABASE,DBCC,DEALLOCATE,DECLARE,' +
  733. 'DEFAULT,DELETE,DENY,DESC,DISK,DISTINCT,DISTRIBUTED,DOUBLE,DROP,DUMMY,' +
  734. 'DUMP,ELSE,END,ERRLVL,ERROREXIT,ESCAPE,EXCEPT,EXEC,EXECUTE,EXISTS,EXIT,' +
  735. 'FETCH,FILE,FILLFACTOR,FIRST,FLOPPY,FOR,FOREIGN,FREETEXT,FREETEXTTABLE,' +
  736. 'FROM,FULL,GLOBAL,GOTO,GRANT,GROUP,HAVING,HOLDLOCK,IDENTITY,IDENTITYCOL,' +
  737. 'IDENTITY_INSERT,IF,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISOLATION,' +
  738. 'JOIN,KEY,KILL,LAST,LEFT,LEVEL,LIKE,LINENO,LOAD,MAX,MIN,MIRROREXIT,' +
  739. 'NATIONAL,NEXT,NOCHECK,NONCLUSTERED,NOT,NULL,OF,OFF,OFFSETS,ON,ONCE,' +
  740. 'ONLY,OPEN,OPENDATASOURCE,OPENQUERY,OPENROWSET,OPTION,OR,ORDER,OUTER,' +
  741. 'OVER,PERCENT,PERM,PERMANENT,PIPE,PLAN,PRECISION,PREPARE,PRIMARY,PRINT,' +
  742. 'PRIOR,PRIVILEGES,PROC,PROCEDURE,PROCESSEXIT,PUBLIC,RAISERROR,READ,' +
  743. 'READTEXT,RECONFIGURE,REFERENCES,RELATIVE,REPEATABLE,REPLICATION,RESTORE,' +
  744. 'RESTRICT,RETURN,REVOKE,RIGHT,ROLLBACK,ROWCOUNT,ROWGUIDCOL,RULE,SAVE,' +
  745. 'SCHEMA,SELECT,SERIALIZABLE,SET,SETUSER,SHUTDOWN,SOME,STATISTICS,SUM,' +
  746. 'TABLE,TAPE,TEMP,TEMPORARY,TEXTSIZE,THEN,TO,TOP,TRAN,TRANSACTION,TRIGGER,' +
  747. 'TRUNCATE,TSEQUAL,UNCOMMITTED,UNION,UNIQUE,UPDATE,UPDATETEXT,USE,USER,' +
  748. 'VALUES,VARYING,VIEW,WAITFOR,WHEN,WHERE,WHILE,WITH,WORK,WRITETEXT';
  749. // functions
  750. MSSQL7Functions: string =
  751. '@@CONNECTIONS,@@CPU_BUSY,@@CURSOR_ROWS,@@DATEFIRST,@@DBTS,@@ERROR,' +
  752. '@@FETCH_STATUS,@@IDENTITY,@@IDLE,@@IO_BUSY,@@LANGID,@@LANGUAGE,' +
  753. '@@LOCK_TIMEOUT,@@MAX_CONNECTIONS,@@MAX_PRECISION,@@NESTLEVEL,@@OPTIONS,' +
  754. '@@PACKET_ERRORS,@@PACK_RECEIVED,@@PACK_SENT,@@PROCID,@@REMSERVER,' +
  755. '@@ROWCOUNT,@@SERVERNAME,@@SERVICENAME,@@SPID,@@TEXTSIZE,@@TIMETICKS,' +
  756. '@@TOTAL_ERRORS,@@TOTAL_READ,@@TOTAL_WRITE,@@TRANCOUNT,@@VERSION,ABS,' +
  757. 'ACOS,AND,APP_NAME,ASCII,ASIN,ATAN,ATN2,CASE,CAST,CEILING,CHARINDEX,' +
  758. 'COALESCE,COLUMNPROPERTY,COL_LENGTH,COL_NAME,CONVERT,COS,COT,' +
  759. 'CURRENT_TIMESTAMP,CURRENT_USER,CURSOR_STATUS,DATABASEPROPERTY,' +
  760. 'DATALENGTH,DATEADD,DATEDIFF,DATENAME,DATEPART,DAY,DB_ID,DB_NAME,' +
  761. 'DEGREES,DIFFERENCE,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,' +
  762. 'FILEPROPERTY,FILE_ID,FILE_NAME,FLOOR,FORMATMESSAGE,' +
  763. 'FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY,GETANSINULL,GETDATE,' +
  764. 'HOST_ID,HOST_NAME,IDENT_INCR,IDENT_SEED,INDEXPROPERTY,INDEX_COL,' +
  765. 'ISDATE,ISNULL,ISNUMERIC,IS_MEMBER,IS_SRVROLEMEMBER,LEN,LOG,LOG10,LOWER,' +
  766. 'LTRIM,MONTH,NEWID,NULLIF,OBJECTPROPERTY,OBJECT_ID,OBJECT_NAME,PARSENAME,' +
  767. 'PATINDEX,PERMISSIONS,PI,POWER,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,' +
  768. 'REVERSE,ROUND,RTRIM,SESSION_USER,SIGN,SIN,SOUNDEX,SPACE,SQRT,SQUARE,' +
  769. 'STATS_DATE,STR,STUFF,SUBSTRING,SUSER_ID,SUSER_NAME,SUSER_SID,' +
  770. 'SUSER_SNAME,SYSTEM_USER,TAN,TEXTPTR,TEXTVALID,TYPEPROPERTY,UNICODE,' +
  771. 'UPPER,USER_ID,USER_NAME,YEAR';
  772. // types
  773. MSSQL7Types: string =
  774. 'BINARY,BIT,CHAR,DATETIME,DECIMAL,FLOAT,IMAGE,INT,MONEY,NCHAR,NTEXT,' +
  775. 'NUMERIC,NVARCHAR,REAL,SMALLDATETIME,SMALLINT,SMALLMONEY,SYSNAME,TEXT,' +
  776. 'TIMESTAMP,TINYINT,UNIQUEIDENTIFIER,VARBINARY,VARCHAR';
  777. //---MS-SQL2K-------------------------------------------------------------------
  778. // keywords
  779. MSSQL2000KW =
  780. 'ADD,ALL,ALTER,AND,ANY,AS,ASC,AUTHORIZATION,BACKUP,' +
  781. 'BEGIN,BETWEEN,BREAK,BROWSE,BULK,BY,CASCADE,CASE,' +
  782. 'CHECK,CHECKPOINT,CLOSE,CLUSTERED,COLLATE,' +
  783. 'COLUMN,COMMIT,COMPUTE,CONSTRAINT,CONTAINS,CONTAINSTABLE,' +
  784. 'CONTINUE,CREATE,CROSS,CURRENT,CURSOR,DATABASE,' +
  785. 'DBCC,DEALLOCATE,DECLARE,DEFAULT,DELETE,DENY,DESC,DISK,' +
  786. 'DISTINCT,DISTRIBUTED,DOUBLE,DROP,DUMMY,DUMP,ELSE,END,' +
  787. 'ERRLVL,ESCAPE,EXCEPT,EXEC,EXECUTE,EXISTS,EXIT,FETCH,FILE,' +
  788. 'FILLFACTOR,FOR,FOREIGN,FORMSOF,FREETEXT,FREETEXTTABLE,FROM,FULL,' +
  789. 'FUNCTION,GOTO,GRANT,GROUP,HAVING,HOLDLOCK,IDENTITY,' +
  790. 'IDENTITYCOL,IDENTITY_INSERT,IF,IN,INFLECTIONAL,INDEX,INNER,INSERT,' +
  791. 'INTERSECT,INTO,IS,ISABOUT,JOIN,KEY,KILL,LEFT,LIKE,LINENO,LOAD,' +
  792. 'NATIONAL,NOCHECK,NONCLUSTERED,NOT,NULL,NULLIF,OF,OFF,' +
  793. 'OFFSETS,ON,OPEN,OPENDATASOURCE,OPENQUERY,OPENROWSET,OPENXML,' +
  794. 'OPTION,OR,ORDER,OUTER,OVER,PERCENT,PLAN,PRECISION,' +
  795. 'PRIMARY,PRINT,PROC,PROCEDURE,PUBLIC,RAISERROR,READ,' +
  796. 'READTEXT,RECONFIGURE,REFERENCES,REPLICATION,RESTORE,' +
  797. 'RESTRICT,RETURN,REVOKE,RIGHT,ROLLBACK,ROWCOUNT,ROWGUIDCOL,' +
  798. 'RULE,SAVE,SCHEMA,SELECT,SESSION_USER,SET,SETUSER,SHUTDOWN,' +
  799. 'SOME,STATISTICS,TABLE,TEXTSIZE,THEN,TO,TOP,TRAN,TRANSACTION,' +
  800. 'TRIGGER,TRUNCATE,TSEQUAL,UNION,UNIQUE,UPDATE,UPDATETEXT,' +
  801. 'USE,USER,VALUES,VARYING,VIEW,WAITFOR,WEIGHT,WHEN,WHERE,WHILE,' +
  802. 'WITH,WRITETEXT';
  803. // functions
  804. MSSQL2000Functions =
  805. '@@CONNECTIONS,@@CPU_BUSY,@@CURSOR_ROWS,@@DATEFIRST,@@DBTS,@@ERROR,' +
  806. '@@FETCH_STATUS,@@IDENTITY,@@IDLE,@@IO_BUSY,@@LANGID,@@LANGUAGE,' +
  807. '@@LOCK_TIMEOUT,@@MAX_CONNECTIONS,@@MAX_PRECISION,@@NESTLEVEL,@@OPTIONS,' +
  808. '@@PACKET_ERRORS,@@PACK_RECEIVED,@@PACK_SENT,@@PROCID,@@REMSERVER,' +
  809. '@@ROWCOUNT,@@SERVERNAME,@@SERVICENAME,@@SPID,@@TEXTSIZE,@@TIMETICKS,' +
  810. '@@TOTAL_ERRORS,@@TOTAL_READ,@@TOTAL_WRITE,@@TRANCOUNT,@@VERSION,' +
  811. 'ABS,ACOS,APP_NAME,ASCII,ASIN,ATAN,ATN2,AVG,BINARY_CHECKSUM,CAST,' +
  812. 'CEILING,CHARINDEX,CHECKSUM,CHECKSUM_AGG,COALESCE,COLLATIONPROPERTY,' +
  813. 'COLUMNPROPERTY,COL_LENGTH,COL_NAME,CONVERT,COS,COT,COUNT,' +
  814. 'COUNT_BIG,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,' +
  815. 'CURRENT_USER,CURSOR_STATUS,DATABASEPROPERTY,DATABASEPROPERTYEX,' +
  816. 'DATALENGTH,DATEADD,DATEDIFF,DATENAME,DATEPART,DAY,DB_ID,DB_NAME,DEGREES,' +
  817. 'DIFFERENCE,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,' +
  818. 'FILEPROPERTY,FILE_ID,FILE_NAME,FLOOR,fn_helpcollations,' +
  819. 'fn_listextendedproperty,fn_servershareddrives,fn_trace_geteventinfo,' +
  820. 'fn_trace_getfilterinfo,fn_trace_getinfo,fn_trace_gettable,' +
  821. 'fn_virtualfilestats,FORMATMESSAGE,FULLTEXTCATALOGPROPERTY,' +
  822. 'FULLTEXTSERVICEPROPERTY,GETANSINULL,GETDATE,GETUTCDATE,GROUPING,' +
  823. 'HAS_DBACCESS,HOST_ID,HOST_NAME,IDENT_CURRENT,IDENT_INCR,IDENT_SEED,' +
  824. 'INDEXKEY_PROPERTY,INDEXPROPERTY,INDEX_COL,ISDATE,ISNULL,ISNUMERIC,' +
  825. 'IS_MEMBER,IS_SRVROLEMEMBER,LEN,LOG,LOG10,LOWER,LTRIM,MAX,MIN,MONTH,' +
  826. 'NEWID,OBJECTPROPERTY,OBJECT_ID,OBJECT_NAME,PARSENAME,PATINDEX,' +
  827. 'PERMISSIONS,PI,POWER,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,REVERSE,' +
  828. 'ROUND,ROWCOUNT_BIG,RTRIM,SCOPE_IDENTITY,SERVERPROPERTY,SESSIONPROPERTY,' +
  829. 'SIGN,SIN,SOUNDEX,SPACE,SQL_VARIANT_PROPERTY,SQRT,SQUARE,' +
  830. 'STATS_DATE,STDEV,STDEVP,STR,STUFF,SUBSTRING,SUM,SUSER_SID,SUSER_SNAME,' +
  831. 'SYSTEM_USER,TAN,TEXTPTR,TEXTVALID,TYPEPROPERTY,UNICODE,UPPER,' +
  832. 'USER_ID,USER_NAME,VAR,VARP,YEAR';
  833. // types
  834. MSSQL2000Types =
  835. 'bigint,binary,bit,char,character,datetime,' +
  836. 'dec,decimal,float,image,int,' +
  837. 'integer,money,nchar,ntext,nvarchar,real,' +
  838. 'rowversion,smalldatetime,smallint,smallmoney,' +
  839. 'sql_variant,sysname,text,timestamp,tinyint,uniqueidentifier,' +
  840. 'varbinary,varchar';
  841. //---Interbase 6----------------------------------------------------------------
  842. // functions
  843. Interbase6Functions = 'AVG,CAST,COUNT,GEN_ID,MAX,MIN,SUM,UPPER';
  844. // keywords
  845. Interbase6KW: string = 'ACTIVE,ADD,AFTER,ALL,ALTER,AND,ANY,AS,ASC,' +
  846. 'ASCENDING,AT,AUTO,AUTODDL,BASED,BASENAME,BASE_NAME,BEFORE,BEGIN,BETWEEN,' +
  847. 'BLOBEDIT,BUFFER,BY,CACHE,CHARACTER_LENGTH,CHAR_LENGTH,CHECK,' +
  848. 'CHECK_POINT_LEN,CHECK_POINT_LENGTH,COLLATE,COLLATION,COLUMN,COMMIT,' +
  849. 'COMMITED,COMPILETIME,COMPUTED,CLOSE,CONDITIONAL,CONNECT,CONSTRAINT,' +
  850. 'CONTAINING,CONTINUE,CREATE,CURRENT,CURRENT_DATE,CURRENT_TIME,' +
  851. 'CURRENT_TIMESTAMP,CURSOR,DATABASE,DAY,DB_KEY,DEBUG,DEC,DECLARE,DEFAULT,' +
  852. 'DELETE,DESC,DESCENDING,DESCRIBE,DESCRIPTOR,DISCONNECT,DISTINCT,DO,' +
  853. 'DOMAIN,DROP,ECHO,EDIT,ELSE,END,ENTRY_POINT,ESCAPE,EVENT,EXCEPTION,' +
  854. 'EXECUTE,EXISTS,EXIT,EXTERN,EXTERNAL,EXTRACT,FETCH,FILE,FILTER,FOR,' +
  855. 'FOREIGN,FOUND,FROM,FULL,FUNCTION,GDSCODE,GENERATOR,GLOBAL,GOTO,GRANT,' +
  856. 'GROUP,GROUP_COMMIT_WAIT,GROUP_COMMIT_WAIT_TIME,HAVING,HELP,HOUR,IF,' +
  857. 'IMMEDIATE,IN,INACTIVE,INDEX,INDICATOR,INIT,INNER,INPUT,INPUT_TYPE,' +
  858. 'INSERT,INT,INTO,IS,ISOLATION,ISQL,JOIN,KEY,LC_MESSAGES,LC_TYPE,LEFT,' +
  859. 'LENGTH,LEV,LEVEL,LIKE,LOGFILE,LOG_BUFFER_SIZE,LOG_BUF_SIZE,LONG,MANUAL,' +
  860. 'MAXIMUM,MAXIMUM_SEGMENT,MAX_SEGMENT,MERGE,MESSAGE,MINIMUM,MINUTE,' +
  861. 'MODULE_NAME,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NO,NOAUTO,NOT,NULL,' +
  862. 'NUM_LOG_BUFFS,NUM_LOG_BUFFERS,OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,' +
  863. 'ORDER,OUTER,OUTPUT,OUTPUT_TYPE,OVERFLOW,PAGE,PAGELENGTH,PAGES,PAGE_SIZE,' +
  864. 'PARAMETER,PASSWORD,PLAN,POSITION,POST_EVENT,PRECISION,PREPARE,PROCEDURE,' +
  865. 'PROTECTED,PRIMARY,PRIVILEGES,PUBLIC,QUIT,RAW_PARTITIONS,READ,REAL,' +
  866. 'RECORD_VERSION,REFERENCES,RELEASE,RESERV,RESERVING,RETAIN,RETURN,' +
  867. 'RETURNING_VALUES,RETURNS,REVOKE,RIGHT,ROLLBACK,RUNTIME,SCHEMA,SECOND,' +
  868. 'SEGMENT,SELECT,SET,SHADOW,SHARED,SHELL,SHOW,SINGULAR,SIZE,SNAPSHOT,SOME,' +
  869. 'SORT,SQL,SQLCODE,SQLERROR,SQLWARNING,STABILITY,STARTING,STARTS,' +
  870. 'STATEMENT,STATIC,STATISTICS,SUB_TYPE,SUSPEND,TABLE,TERMINATOR,THEN,TO,' +
  871. 'TRANSACTION,TRANSLATE,TRANSLATION,TRIGGER,TRIM,TYPE,UNCOMMITTED,UNION,' +
  872. 'UNIQUE,UPDATE,USER,USING,VALUE,VALUES,VARIABLE,VARYING,VERSION,VIEW,' +
  873. 'WAIT,WEEKDAY,WHEN,WHENEVER,WHERE,WHILE,WITH,WORK,WRITE,YEAR,YEARDAY';
  874. // types
  875. Interbase6Types = 'BLOB,CHAR,CHARACTER,DATE,DECIMAL,DOUBLE,FLOAT,INTEGER,' +
  876. 'NUMERIC,SMALLINT,TIME,TIMESTAMP,VARCHAR';
  877. //---MySQL----------------------------------------------------------------------
  878. // keywords
  879. MySqlKW: string = 'ACTION,AFTER,AGAINST,AGGREGATE,ALL,ALTER,ANALYZE,AND,AS,' +
  880. 'ASC,AUTO_INCREMENT,AVG_ROW_LENGTH,BACKUP,BEGIN,BENCHMARK,BETWEEN,BINARY,' +
  881. 'BIT,BOOL,BOTH,BY,CASCADE,CHANGE,CHARACTER,CHECK,CHECKSUM,COLUMN,COLUMNS,' +
  882. 'COMMENT,COMMIT,CONSTRAINT,CREATE,CROSS,DATA,DATABASES,DEC,DEFAULT,' +
  883. 'DELAYED,DELAY_KEY_WRITE,DELETE,DESC,DESCRIBE,DISTINCT,DISTINCTROW,DROP,' +
  884. 'ELSE,ENCLOSED,END,ESCAPE,ESCAPED,EXISTS,EXPLAIN,FIELDS,FILE,FIRST,' +
  885. 'FLOAT4,FLOAT8,FLUSH,FOR,FOREIGN,FROM,FULL,FULLTEXT,FUNCTION,GLOBAL,GRANT,' +
  886. 'GRANTS,GROUP,HAVING,HEAP,HIGH_PRIORITY,HOSTS,IDENTIFIED,IGNORE,' +
  887. 'INDEX,INFILE,INNER,INT1,INT2,INT3,INT4,INT8,INTO,IS,ISAM,JOIN,KEY,' +
  888. 'KEYS,KILL,LEADING,LIKE,LIMIT,LINES,LOAD,LOCAL,LOCK,LOGS,LONG,' +
  889. 'LOW_PRIORITY,MATCH,MAX_ROWS,MIDDLEINT,MIN_ROWS,MODIFY,MYISAM,' +
  890. 'NATURAL,NO,NOT,NULL,OPTIMIZE,OPTION,OPTIONALLY,ON,OPEN,OR,ORDER,OUTER,' +
  891. 'OUTFILE,PACK_KEYS,PARTIAL,PRECISION,PRIMARY,PRIVILEGES,PROCEDURE,' +
  892. 'PROCESS,PROCESSLIST,READ,REFERENCES,REGEXP,RELOAD,RENAME,REPAIR,' +
  893. 'RESTRICT,RESTORE,RETURNS,REVOKE,RLIKE,ROLLBACK,ROW,ROWS,SELECT,SHOW,' +
  894. 'SHUTDOWN,SONAME,SQL_BIG_RESULT,SQL_BIG_SELECTS,SQL_BIG_TABLES,' +
  895. 'SQL_LOG_OFF,SQL_LOG_UPDATE,SQL_LOW_PRIORITY_UPDATES,SQL_SELECT_LIMIT,' +
  896. 'SQL_SMALL_RESULT,SQL_WARNINGS,STARTING,STATUS,STRAIGHT_JOIN,TABLE,' +
  897. 'TABLES,TEMPORARY,TERMINATED,THEN,TO,TRAILING,TRANSACTION,TYPE,UNIQUE,' +
  898. 'UNLOCK,UNSIGNED,UPDATE,USAGE,USE,USING,VALUES,VARBINARY,VARCHAR,' +
  899. 'VARIABLES,VARYING,WHERE,WITH,WRITE,ZEROFILL';
  900. // types
  901. MySqlTypes: string = 'TINYINT,SMALLINT,MEDIUMINT,INT,INTEGER,BIGINT,FLOAT,' +
  902. 'DOUBLE,REAL,DECIMAL,NUMERIC,DATE,DATETIME,TIMESTAMP,TIME,YEAR,CHAR,' +
  903. 'NATIONAL,TINYBLOB,TINYTEXT,TEXT,BLOB,MEDIUMBLOB,MEDIUMTEXT,LONGBLOB,' +
  904. 'LONGTEXT,ENUM,SET,STRING';
  905. // functions
  906. MySqlFunctions: string = 'ABS,ACOS,ASCII,ADD,ADDDATE,ASIN,ATAN,ATAN2,AVG,' +
  907. 'BIN,BIT_AND,BIT_COUNT,BIT_OR,CASE,CHARACTER_LENGTH,CEILING,' +
  908. 'CONNECTION_ID,CHAR_LENGTH,COALESCE,CONCAT,CONV,COS,COT,COUNT,' +
  909. 'CURDATE,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURTIME,DATABASE,' +
  910. 'DATE_ADD,DATE_FORMAT,DATE_SUB,DAY,DAYNAME,DAYOFMONTH,DAYOFWEEK,' +
  911. 'DAYOFYEAR,DAY_HOUR,DAY_MINUTE,DAY_SECOND,DECODE,DEGREES,ELT,ENCODE,' +
  912. 'ENCRYPT,EXP,EXPORT_SET,FIELD,FIND_IN_SET,FLOOR,FORMAT,FROM_DAYS,' +
  913. 'FROM_UNIXTIME,GET_LOCK,GREATEST,HEX,HOUR,HOUR_MINUTE,HOUR_SECOND,IF,' +
  914. 'IFNULL,IN,INET_NTOA,INET_ATON,INSERT,INSERT_ID,INSTR,INTERVAL,ISNULL,' +
  915. 'LAST_INSERT_ID,LCASE,LEAST,LEFT,LENGTH,LOAD_FILE,LOCATE,LOG,LOG10,LOWER,' +
  916. 'LPAD,LTRIM,MAKE_SET,MASTER_POS_WAIT,MAX,MD5,MID,MIN,MINUTE,' +
  917. 'MINUTE_SECOND,MOD,MONTH,MONTHNAME,NOW,NULLIF,OCT,OCTET_LENGTH,ORD,' +
  918. 'PASSWORD,PERIOD_ADD,PERIOD_DIFF,PI,POSITION,POW,POWER,QUARTER,RADIANS,' +
  919. 'RAND,RELEASE_LOCK,REPEAT,REPLACE,REVERSE,RIGHT,ROUND,RPAD,RTRIM,SECOND,' +
  920. 'SEC_TO_TIME,SESSION_USER,SIGN,SIN,SOUNDEX,SPACE,SQRT,STD,STDDEV,STRCMP,' +
  921. 'SUBDATE,SUBSTRING,SUBSTRING_INDEX,SUM,SYSDATE,SYSTEM_USER,TAN,' +
  922. 'TIME_FORMAT,TIME_TO_SEC,TO_DAYS,TRIM,TRUNCATE,UCASE,UNIX_TIMESTAMP,' +
  923. 'UPPER,USER,VERSION,WEEK,WEEKDAY,WHEN,YEARWEEK,YEAR_MONTH';
  924. {begin} // JJV 2000-11-16
  925. //---Ingres---------------------------------------------------------------------
  926. // keywords
  927. IngresKW: string =
  928. 'ABORT,ACTIVATE,ADD,ADDFORM,AFTER,AGGREGATE,ALL,ALTER,AND,APPEND,ARRAY,' +
  929. 'AS,ASC,AT,AUDIT_LOG,AUTHORIZATION,AUTOCOMMIT,AVGU,BEFORE,BEGIN,BETWEEN,' +
  930. 'BREAKDISPLAY,BY,BYREF,CACHE,CALL,CALLFRAME,CALLPROC,CASCADE,CHECK,CLEAR,' +
  931. 'CLEARROW,CLOSE,COLUMN,COMMAND,COMMENT,COMMIT,CONNECT,CONSTRAINT,' +
  932. 'CONTINUE,COPY,COUNTU,CPUFACTOR,CREATE,CURRENT,CURRENT_USER,CURSOR,DATA,' +
  933. 'DATAHANDLER,DATE_FORMAT,DBEVENT,DDL_CONCURRENCY,DEADLOCK,DECLARE,' +
  934. 'DEFAULT,DEFERRED,DEFINE,DELETE,DELETEROW,DESC,DESCRIBE,DESCRIPTOR,' +
  935. 'DESTROY,DIRECT,DISABLE,DISCONNECT,DISPLAY,DISTINCT,DISTRIBUTE,DO,DOWN,' +
  936. 'DROP,ELSE,ELSEIF,ENABLE,END,ENDDATA,ENDDISPLAY,ENDFORMS,ENDIF,ENDLOOP,' +
  937. 'ENDRETRIEVE,ENDSELECT,ENDWHILE,ERROR,ESCAPE,EXCLUDE,EXCLUDING,EXEC,' +
  938. 'EXECUTE,EXISTS,EXIT,FETCH,FIELD,FINALIZE,FOR,FOREIGN,FORMDATA,FORMINIT,' +
  939. 'FORMS,FROM,FULL,GET,GETFORM,GETOPER,GETROW,GLOBAL,GOTO,GRANT,GRANTED,' +
  940. 'HAVING,HELP,HELP_FORMS,HELP_FRS,HELPFILE,IDENTIFIED,IF,IIMESSAGE,' +
  941. 'IIPRINTF,IIPROMPT,IISTATEMENT,IMMEDIATE,IMPORT,IN,INCLUDE,INDEX,' +
  942. 'INDICATOR,INGRES,INITIALIZE,INITTABLE,INNER,INQUIRE_EQUEL,INQUIRE_FORMS,' +
  943. 'INQUIRE_FRS,INQUIRE_INGRES,INSERT,INSERTROW,INSTALLATION,INTEGRITY,INTO,' +
  944. 'IO_TRACE,IS,J_FREESZ1,J_FREESZ2,J_FREESZ3,J_FREESZ4,J_SORTBUFSZ,' +
  945. 'JCPUFACTOR,JOIN,JOINOP,JOURNALING,KEY,LEVEL,LIKE,LINK,LOADTABLE,LOCAL,' +
  946. 'LOCATION,LOCK_TRACE,LOG_TRACE,LOGDBEVENTS,LOGGING,MAXCOST,MAXCPU,' +
  947. 'MAXPAGE,MENUITEM,MESSAGE,MODE,MODIFY,MODULE,MONEY_FORMAT,MONEY_PREC,' +
  948. 'MOVE,NATURAL,NEXT,NODEADLOCK,NOECHO,NOIO_TRACE,NOJIONOP,NOJOURNALING,' +
  949. 'NOLOCK_TRACE,NOLOG_TRACE,NOLOGDBEVENTS,NOLOGGING,NOMAXCOST,NOMAXCPU,' +
  950. 'NOMAXIO,NOMAXPAGE,NOMAXQUERY,NOMAXROW,NOOPTIMIZEONLY,NOPRINTDBEVENTS,' +
  951. 'NOPRINTQRY,NOPRINTRULES,NOQEP,NORULES,NOSQL,NOSTATISTICS,NOT,NOTRACE,' +
  952. 'NULL,OF,ON,ONLY,OPEN,OPTIMIZEONLY,OPTION,OR,ORDER,OUT,PARAM,PERMIT,' +
  953. 'PREPARE,PRESERVE,PRIMARY,PRINT,PRINTDBEVENTS,PRINTQRY,PRINTSCREEN,' +
  954. 'PRIVILEGES,PROCEDURE,PROMPT,PUBLIC,PUT,PUTFORM,PUTOPER,PUTROW,QBUFSIZE,' +
  955. 'QEP,QRY,QUALIFICATION,QUERY_SIZE,RAISE,RANGE,READONLY,REDISPLAY,' +
  956. 'REFERENCES,REFERENCING,REGISTER,RELOCATE,REMOVE,RENAME,REPEAT,REPEATED,' +
  957. 'REPLACE,REPLICATE,RESTRICT,RESULT_STRUCTURE,RESUME,RET_INTO,RETRIEVE,' +
  958. 'RETURN,RETURNING,REVOKE,ROLLBACK,ROWS,RULE,RUN,SAVE,SAVEPOINT,SCHEMA,' +
  959. 'SCREEN,SCROLL,SCROLLDOWN,SCROLLUP,SECTION,SECURITY_ALARM,SECURITY_AUDIT,' +
  960. 'SELECT,SESSION,SET,SET_4GL,SET_EQUAL,SET_FORMS,SET_FRS,SET_INGRES,' +
  961. 'SET_SQL,SHORT_REMARK,SLEEP,SOME,SORT,SORTBUFSIZE,SQL,STATISTICS,STOP,' +
  962. 'SUBMENU,SUMU,SYNONYM,SYSTEM,TABLE,TABLEDATA,TEWMPORARY,THEN,TO,TRACE,' +
  963. 'TRANSACTION,TYPE,UNION,UNIQUE,UNLOADTABLE,UNTIL,UP,UPDATE,USER,USING,' +
  964. 'VALIDATE,VALIDROW,VALUES,VIEW,WHEN,WHENEVER,WHERE,WHILE,WITH,WORK';
  965. // types
  966. IngresTypes: string =
  967. 'BYTE,C,CHAR,CHARACTER,DATE,DECIMAL,FLOAT,FLOAT4,FLOAT8,INTEGER,INTEGER1,' +
  968. 'INTEGER2,INTEGER4,LONG,MONEY,OBJECT_KEY,SECURITY_LABEL,SHORT,SMALLINT,' +
  969. 'TABLE_KEY,TEXT,VARCHAR,VARYING';
  970. // functions
  971. IngresFunctions: string =
  972. '_BINTIM,_CPU_MS,_DATE,_DIO_CNT,_ET_SEC,_PFAULT_CNT,_TIME,_VERSION,ABS,' +
  973. 'ANY,ATAN,AUTOCOMMIT_STATE,AVG,BIOCNT,CHAREXTRACT,COLLATION,CONCAT,' +
  974. 'CONNECT_TIME_LIMIT,COS,COUNT,CREATE_PROCEDURE,CREATE_TABLE,DATABASE,' +
  975. 'DATE_GMT,DATE_PART,DATE_TRUNC,DB_ADMIN,DB_DELIMITED_CASE,DB_NAME_CASE,' +
  976. 'DBA,DBMS_BIO,DBMS_CPU,DBMS_DIO,DBMSINFO,DOW,EXP,FLATTEN_AGGREGATE,' +
  977. 'FLATTEN_NONE,FLATTEN_OPTIMIZE,FLATTEN_SINGLETON,GROUP,HEX,' +
  978. 'IDLE_TIME_LIMIT,IFNULL,INITIAL_USER,INQUIRE_SQL,INT1,INT2,INT4,INTERVAL,' +
  979. 'LANGUAGE,LEFT,LENGTH,LOCATE,LOCKMODE,LOG,LONG_BYTE,LONG_VARCHAR,' +
  980. 'LOWERCASE,MAX,MAXCONNECT,MAXIDLE,MAXIO,MAXQUERY,MAXROW,MIN,MOD,NOTRIM,' +
  981. 'ON_ERROR_STATE,PAD,QUERY_IO_LIMIT,QUERY_LANGUAGE,QUERY_ROW_LIMIT,RIGHT,' +
  982. 'ROLE,SECURITY_AUDIT_LOG,SECURITY_AUDIT_STATE,SECURITY_PRIV,' +
  983. 'SELECT_SYSCAT,SERVER_CLASS,SESSION_ID,SESSION_PRIORITY,' +
  984. 'SESSION_PRIORITY_LIMIT,SESSION_PRIV,SESSION_SECLABEL,SESSION_USER,SHIFT,' +
  985. 'SIN,SIZE,SQRT,SQUEEZE,SUM,SYSTEM_USER,TABLE_STATISTICS,TERMINAL,' +
  986. 'TRANSACTION_STATE,TRIM,UPDATE_ROWCNT,UPDATE_SYSCAT,UPPERCASE,USERNAME,' +
  987. 'VARBYTE';
  988. {end} // JJV 2000-11-16
  989. procedure MakeIdentTable;
  990. var
  991. c: char;
  992. begin
  993. FillChar(Identifiers, SizeOf(Identifiers), 0);
  994. for c := 'a' to 'z' do
  995. Identifiers[c] := TRUE;
  996. for c := 'A' to 'Z' do
  997. Identifiers[c] := TRUE;
  998. for c := '0' to '9' do
  999. Identifiers[c] := TRUE;
  1000. Identifiers['_'] := TRUE;
  1001. Identifiers['#'] := TRUE; // DJLP 2000-09-05
  1002. Identifiers['$'] := TRUE; // DJLP 2000-09-05
  1003. FillChar(mHashTable, SizeOf(mHashTable), 0);
  1004. mHashTable['_'] := 1;
  1005. for c := 'a' to 'z' do
  1006. mHashTable[c] := 2 + Ord(c) - Ord('a');
  1007. for c := 'A' to 'Z' do
  1008. mHashTable[c] := 2 + Ord(c) - Ord('A');
  1009. Move(Identifiers, IdentifiersMSSQL7, SizeOf(Identifiers));
  1010. Move(mHashTable, mHashTableMSSQL7, SizeOf(mHashTable));
  1011. IdentifiersMSSQL7['@'] := TRUE;
  1012. mHashTableMSSQL7['@'] := mHashTableMSSQL7['Z'] + 1;
  1013. end;
  1014. function TSynSQLSyn.KeyHash(ToHash: PChar): Integer;
  1015. var
  1016. Start: PChar;
  1017. begin
  1018. Result := 0;
  1019. Start := ToHash;
  1020. while fIdentifiersPtr^[ToHash^] do begin
  1021. Result := (2 * Result + fmHashTablePtr^[ToHash^]) and $FFFFFF;
  1022. inc(ToHash);
  1023. end;
  1024. Result := Result and $FF; // 255
  1025. fStringLen := ToHash - Start;
  1026. end;
  1027. function TSynSQLSyn.KeyComp(const aKey: string): Boolean;
  1028. var
  1029. i: integer;
  1030. pKey1, pKey2: PChar;
  1031. begin
  1032. pKey1 := fToIdent;
  1033. // Note: fStringLen is always > 0 !
  1034. pKey2 := pointer(aKey);
  1035. for i := 1 to fStringLen do
  1036. begin
  1037. if mHashTable[pKey1^] <> mHashTable[pKey2^] then
  1038. begin
  1039. Result := FALSE;
  1040. exit;
  1041. end;
  1042. Inc(pKey1);
  1043. Inc(pKey2);
  1044. end;
  1045. Result := TRUE;
  1046. end;
  1047. function TSynSQLSyn.IdentKind(MayBe: PChar): TtkTokenKind;
  1048. var
  1049. Entry: TSynHashEntry;
  1050. begin
  1051. fToIdent := MayBe;
  1052. Entry := fKeywords[KeyHash(MayBe)];
  1053. while Assigned(Entry) do begin
  1054. if Entry.KeywordLen > fStringLen then
  1055. break
  1056. else if Entry.KeywordLen = fStringLen then
  1057. if KeyComp(Entry.Keyword) then begin
  1058. Result := TtkTokenKind(Entry.Kind);
  1059. exit;
  1060. end;
  1061. Entry := Entry.Next;
  1062. end;
  1063. Result := tkIdentifier;
  1064. end;
  1065. procedure TSynSQLSyn.MakeMethodTables;
  1066. var
  1067. I: Char;
  1068. begin
  1069. for I := #0 to #255 do
  1070. case I of
  1071. #0: fProcTable[I] := @NullProc;
  1072. #10: fProcTable[I] := @LFProc;
  1073. #13: fProcTable[I] := @CRProc;
  1074. #39: fProcTable[I] := @AsciiCharProc;
  1075. '=': fProcTable[I] := @EqualProc;
  1076. '>': fProcTable[I] := @GreaterProc;
  1077. '<': fProcTable[I] := @LowerProc;
  1078. '-': fProcTable[I] := @MinusProc;
  1079. '|': fProcTable[I] := @OrSymbolProc;
  1080. '+': fProcTable[I] := @PlusProc;
  1081. '/': fProcTable[I] := @SlashProc;
  1082. '&': fProcTable[I] := @AndSymbolProc;
  1083. #34: fProcTable[I] := @StringProc;
  1084. ':', '@':
  1085. fProcTable[I] := @VariableProc;
  1086. 'A'..'Z', 'a'..'z', '_':
  1087. fProcTable[I] := @IdentProc;
  1088. '0'..'9':
  1089. fProcTable[I] := @NumberProc;
  1090. #1..#9, #11, #12, #14..#32:
  1091. fProcTable[I] := @SpaceProc;
  1092. '^', '%', '*', '!':
  1093. fProcTable[I] := @SymbolAssignProc;
  1094. '{', '}', '.', ',', ';', '?', '(', ')', '[', ']', '~':
  1095. fProcTable[I] := @SymbolProc;
  1096. else
  1097. fProcTable[I] := @UnknownProc;
  1098. end;
  1099. end;
  1100. constructor TSynSQLSyn.Create(AOwner: TComponent);
  1101. begin
  1102. inherited Create(AOwner);
  1103. fKeywords := TSynHashEntryList.Create;
  1104. fTableNames := TStringList.Create;
  1105. TStringList(fTableNames).OnChange := @TableNamesChanged;
  1106. fCommentAttri := TSynHighlighterAttributes.Create(@SYNS_AttrComment, SYNS_XML_AttrComment);
  1107. fCommentAttri.Style := [fsItalic];
  1108. AddAttribute(fCommentAttri);
  1109. fDataTypeAttri := TSynHighlighterAttributes.Create(@SYNS_AttrDataType, SYNS_XML_AttrDataType);
  1110. fDataTypeAttri.Style := [fsBold];
  1111. AddAttribute(fDataTypeAttri);
  1112. {begin} // DJLP 2000-08-11
  1113. fDefaultPackageAttri :=
  1114. TSynHighlighterAttributes.Create(@SYNS_AttrDefaultPackage, SYNS_XML_AttrDefaultPackage);
  1115. fDefaultPackageAttri.Style := [fsBold];
  1116. AddAttribute(fDefaultPackageAttri);
  1117. {end} // DJLP 2000-08-11
  1118. fExceptionAttri := TSynHighlighterAttributes.Create(@SYNS_AttrException, SYNS_XML_AttrException);
  1119. fExceptionAttri.Style := [fsItalic];
  1120. AddAttribute(fExceptionAttri);
  1121. fFunctionAttri := TSynHighlighterAttributes.Create(@SYNS_AttrFunction, SYNS_XML_AttrFunction);
  1122. fFunctionAttri.Style := [fsBold];
  1123. AddAttribute(fFunctionAttri);
  1124. fIdentifierAttri := TSynHighlighterAttributes.Create(@SYNS_AttrIdentifier, SYNS_XML_AttrIdentifier);
  1125. AddAttribute(fIdentifierAttri);
  1126. fKeyAttri := TSynHighlighterAttributes.Create(@SYNS_AttrReservedWord, SYNS_XML_AttrReservedWord);
  1127. fKeyAttri.Style := [fsBold];
  1128. AddAttribute(fKeyAttri);
  1129. fNumberAttri := TSynHighlighterAttributes.Create(@SYNS_AttrNumber, SYNS_XML_AttrNumber);
  1130. AddAttribute(fNumberAttri);
  1131. {begin} // DJLP 2000-08-11
  1132. fPLSQLAttri := TSynHighlighterAttributes.Create(@SYNS_AttrPLSQL, SYNS_XML_AttrPLSQL);
  1133. fPLSQLAttri.Style := [fsBold];
  1134. AddAttribute(fPLSQLAttri);
  1135. {end} // DJLP 2000-08-11
  1136. fSpaceAttri := TSynHighlighterAttributes.Create(@SYNS_AttrSpace, SYNS_XML_AttrSpace);
  1137. AddAttribute(fSpaceAttri);
  1138. {begin} // DJLP 2000-09-05
  1139. fSQLPlusAttri:=TSynHighlighterAttributes.Create(@SYNS_AttrSQLPlus, SYNS_XML_AttrSQLPlus);
  1140. fSQLPlusAttri.Style := [fsBold];
  1141. AddAttribute(fSQLPlusAttri);
  1142. {end} // DJLP 2000-09-05
  1143. fStringAttri := TSynHighlighterAttributes.Create(@SYNS_Attrstring, SYNS_XML_Attrstring);
  1144. AddAttribute(fStringAttri);
  1145. fSymbolAttri := TSynHighlighterAttributes.Create(@SYNS_AttrSymbol, SYNS_XML_AttrSymbol);
  1146. AddAttribute(fSymbolAttri);
  1147. fTableNameAttri := TSynHighlighterAttributes.Create(@SYNS_AttrTableName, SYNS_XML_AttrTableName);
  1148. AddAttribute(fTableNameAttri);
  1149. fVariableAttri := TSynHighlighterAttributes.Create(@SYNS_AttrVariable, SYNS_XML_AttrVariable);
  1150. AddAttribute(fVariableAttri);
  1151. SetAttributesOnChange(@DefHighlightChange);
  1152. MakeMethodTables;
  1153. fDefaultFilter := SYNS_FilterSQL;
  1154. fRange := rsUnknown;
  1155. fDialect := sqlStandard;
  1156. SQLDialect := sqlSybase;
  1157. end;
  1158. destructor TSynSQLSyn.Destroy;
  1159. begin
  1160. fKeywords.Free;
  1161. fTableNames.Free;
  1162. inherited Destroy;
  1163. end;
  1164. procedure TSynSQLSyn.Assign(Source: TPersistent);
  1165. begin
  1166. inherited Assign(Source);
  1167. if (Source is TSynSQLSyn) then
  1168. SQLDialect := TSynSQLSyn(Source).SQLDialect;
  1169. end;
  1170. procedure TSynSQLSyn.SetLine(const NewValue: string; LineNumber: Integer);
  1171. begin
  1172. inherited;
  1173. fLine := PChar(NewValue);
  1174. Run := 0;
  1175. fLineNumber := LineNumber;
  1176. Next;
  1177. end;
  1178. procedure TSynSQLSyn.AndSymbolProc;
  1179. begin
  1180. fTokenID := tkSymbol;
  1181. Inc(Run);
  1182. if fLine[Run] in ['=', '&'] then Inc(Run);
  1183. end;
  1184. procedure TSynSQLSyn.AsciiCharProc;
  1185. begin
  1186. // Oracle SQL allows strings to go over multiple lines
  1187. if fLine[Run] = #0 then
  1188. NullProc
  1189. else begin
  1190. fTokenID := tkString;
  1191. // else it's end of multiline string
  1192. if SQLDialect <> sqlMySql then begin
  1193. if (Run > 0) or (fRange <> rsString) or (fLine[Run] <> #39) then begin
  1194. fRange := rsString;
  1195. repeat
  1196. Inc(Run);
  1197. until fLine[Run] in [#0, #10, #13, #39];
  1198. end;
  1199. if fLine[Run] = #39 then begin
  1200. Inc(Run);
  1201. fRange := rsUnknown;
  1202. end;
  1203. end
  1204. else begin
  1205. if (Run > 0) or (fRange <> rsString) or ((fLine[Run] <> #39) and (fLine[Run-1] <> '\')) then begin
  1206. fRange := rsString;
  1207. repeat
  1208. if (fLine[Run] <> '\') and (fLine[Run+1] = #39) then begin
  1209. Inc(Run);
  1210. break;
  1211. end;
  1212. Inc(Run);
  1213. until fLine[Run] in [#0, #10, #13];
  1214. end;
  1215. if (fLine[Run] = #39) and not(fLine[Run-1] = '\') then begin
  1216. Inc(Run);
  1217. fRange := rsUnknown;
  1218. end;
  1219. end;
  1220. end;
  1221. end;
  1222. procedure TSynSQLSyn.CRProc;
  1223. begin
  1224. fTokenID := tkSpace;
  1225. Inc(Run);
  1226. if fLine[Run] = #10 then Inc(Run);
  1227. end;
  1228. procedure TSynSQLSyn.EqualProc;
  1229. begin
  1230. fTokenID := tkSymbol;
  1231. Inc(Run);
  1232. if fLine[Run] in ['=', '>'] then Inc(Run);
  1233. end;
  1234. procedure TSynSQLSyn.GreaterProc;
  1235. begin
  1236. fTokenID := tkSymbol;
  1237. Inc(Run);
  1238. if fLine[Run] in ['=', '>'] then Inc(Run);
  1239. end;
  1240. procedure TSynSQLSyn.IdentProc;
  1241. begin
  1242. fTokenID := IdentKind((fLine + Run));
  1243. inc(Run, fStringLen);
  1244. {begin} // DJLP 2000-08-11
  1245. if fTokenID = tkComment then begin
  1246. while not (fLine[Run] in [#0, #10, #13]) do
  1247. Inc(Run);
  1248. end else
  1249. {end} // DJLP 2000-08-11
  1250. while fIdentifiersPtr^[fLine[Run]] do inc(Run);
  1251. end;
  1252. procedure TSynSQLSyn.LFProc;
  1253. begin
  1254. fTokenID := tkSpace;
  1255. inc(Run);
  1256. end;
  1257. procedure TSynSQLSyn.LowerProc;
  1258. begin
  1259. fTokenID := tkSymbol;
  1260. Inc(Run);
  1261. case fLine[Run] of
  1262. '=': Inc(Run);
  1263. '<': begin
  1264. Inc(Run);
  1265. if fLine[Run] = '=' then Inc(Run);
  1266. end;
  1267. end;
  1268. end;
  1269. procedure TSynSQLSyn.MinusProc;
  1270. begin
  1271. Inc(Run);
  1272. if fLine[Run] = '-' then begin
  1273. fTokenID := tkComment;
  1274. repeat
  1275. Inc(Run);
  1276. until fLine[Run] in [#0, #10, #13];
  1277. end else
  1278. fTokenID := tkSymbol;
  1279. end;
  1280. procedure TSynSQLSyn.NullProc;
  1281. begin
  1282. fTokenID := tkNull;
  1283. end;
  1284. procedure TSynSQLSyn.NumberProc;
  1285. begin
  1286. inc(Run);
  1287. fTokenID := tkNumber;
  1288. while FLine[Run] in ['0'..'9'] do inc(Run);
  1289. if (FLine[Run]='.') and not(fLine[Run+1]='.') then begin
  1290. inc(Run);
  1291. while FLine[Run] in ['0'..'9'] do inc(Run);
  1292. end;
  1293. if (FLine[Run]='e') or (fLine[Run]='E') then begin
  1294. inc(Run);
  1295. if (FLine[Run]='+') or (fLine[Run]='-') then inc(Run);
  1296. while FLine[Run] in ['0'..'9'] do inc(Run);
  1297. end;
  1298. end;
  1299. procedure TSynSQLSyn.OrSymbolProc;
  1300. begin
  1301. fTokenID := tkSymbol;
  1302. Inc(Run);
  1303. if fLine[Run] in ['=', '|'] then Inc(Run);
  1304. end;
  1305. procedure TSynSQLSyn.PlusProc;
  1306. begin
  1307. fTokenID := tkSymbol;
  1308. Inc(Run);
  1309. if fLine[Run] in ['=', '+'] then Inc(Run);
  1310. end;
  1311. procedure TSynSQLSyn.SlashProc;
  1312. begin
  1313. Inc(Run);
  1314. case fLine[Run] of
  1315. '*':
  1316. begin
  1317. fRange := rsComment;
  1318. fTokenID := tkComment;
  1319. repeat
  1320. Inc(Run);
  1321. if (fLine[Run] = '*') and (fLine[Run + 1] = '/') then begin
  1322. fRange := rsUnknown;
  1323. Inc(Run, 2);
  1324. break;
  1325. end;
  1326. until fLine[Run] in [#0, #10, #13];
  1327. end;
  1328. '=':
  1329. begin
  1330. Inc(Run);
  1331. fTokenID := tkSymbol;
  1332. end;
  1333. else
  1334. fTokenID := tkSymbol;
  1335. end;
  1336. end;
  1337. procedure TSynSQLSyn.SpaceProc;
  1338. begin
  1339. fTokenID := tkSpace;
  1340. repeat
  1341. Inc(Run);
  1342. until (fLine[Run] > #32) or (fLine[Run] in [#0, #10, #13]);
  1343. end;
  1344. procedure TSynSQLSyn.StringProc;
  1345. begin
  1346. fTokenID := tkString;
  1347. Inc(Run);
  1348. while not (fLine[Run] in [#0, #10, #13]) do begin
  1349. case fLine[Run] of
  1350. '\': if fLine[Run + 1] = #34 then
  1351. Inc(Run);
  1352. #34: if fLine[Run + 1] <> #34 then
  1353. begin
  1354. Inc(Run);
  1355. break;
  1356. end;
  1357. end;
  1358. Inc(Run);
  1359. end;
  1360. end;
  1361. procedure TSynSQLSyn.SymbolProc;
  1362. begin
  1363. Inc(Run);
  1364. fTokenID := tkSymbol;
  1365. end;
  1366. procedure TSynSQLSyn.SymbolAssignProc;
  1367. begin
  1368. fTokenID := tkSymbol;
  1369. Inc(Run);
  1370. if fLine[Run] = '=' then Inc(Run);
  1371. end;
  1372. procedure TSynSQLSyn.VariableProc;
  1373. var
  1374. i: integer;
  1375. begin
  1376. // MS SQL 7 uses @@ to indicate system functions/variables
  1377. if (SQLDialect = sqlMSSQL7) and (fLine[Run] = '@') and (fLine[Run + 1] = '@')
  1378. then
  1379. IdentProc
  1380. {begin} //JDR 2000-25-2000
  1381. else if (SQLDialect in [sqlMySql, sqlOracle]) and (fLine[Run] = '@') then
  1382. SymbolProc
  1383. {end} //JDR 2000-25-2000
  1384. // Oracle uses the ':' character to indicate bind variables
  1385. {begin} //JJV 2000-11-16
  1386. // Ingres II also uses the ':' character to indicate variables
  1387. else
  1388. if not (SQLDialect in [sqlOracle, sqlIngres]) and (fLine[Run] = ':') then
  1389. {end} //JJV 2000-11-16
  1390. SymbolProc
  1391. else begin
  1392. fTokenID := tkVariable;
  1393. i := Run;
  1394. repeat
  1395. Inc(i);
  1396. until not (fIdentifiersPtr^[fLine[i]]);
  1397. Run := i;
  1398. end;
  1399. end;
  1400. procedure TSynSQLSyn.UnknownProc;
  1401. begin
  1402. if (SQLDialect = sqlMySql) and (fLine[Run] = '#') and (Run = 0) then //DDH Changes from Tonci Grgin for MYSQL
  1403. begin
  1404. fTokenID := tkComment;
  1405. fRange := rsComment;
  1406. end else begin
  1407. {$IFDEF SYN_MBCSSUPPORT}
  1408. if FLine[Run] in LeadBytes then
  1409. Inc(Run,2)
  1410. else
  1411. {$ENDIF}
  1412. inc(Run);
  1413. while (fLine[Run] in [#128..#191]) OR // continued utf8 subcode
  1414. ((fLine[Run]<>#0) and (fProcTable[fLine[Run]] = @UnknownProc)) do inc(Run);
  1415. fTokenID := tkUnknown;
  1416. end;
  1417. end;
  1418. procedure TSynSQLSyn.AnsiCProc;
  1419. begin
  1420. case fLine[Run] of
  1421. #0: NullProc;
  1422. #10: LFProc;
  1423. #13: CRProc;
  1424. else begin
  1425. fTokenID := tkComment;
  1426. if (SQLDialect = sqlMySql) and (fLine[Run] = '#') then begin //DDH Changes from Tonci Grgin for MYSQL
  1427. repeat
  1428. Inc(Run);
  1429. until fLine[Run] in [#0, #10, #13];
  1430. fRange := rsUnknown;
  1431. end
  1432. else begin
  1433. repeat
  1434. if (fLine[Run] = '*') and (fLine[Run + 1] = '/') then begin
  1435. fRange := rsUnknown;
  1436. Inc(Run, 2);
  1437. break;
  1438. end;
  1439. Inc(Run);
  1440. until fLine[Run] in [#0, #10, #13];
  1441. end;
  1442. end;
  1443. end;
  1444. end;
  1445. {begin} // DJLP 2000-08-09
  1446. function TSynSQLSyn.IsKeyword(const AKeyword: string): boolean;
  1447. var
  1448. tk: TtkTokenKind;
  1449. begin
  1450. tk := IdentKind(PChar(AKeyword));
  1451. Result := tk in [tkDatatype, tkException, tkFunction, tkKey, tkPLSQL,
  1452. tkDefaultPackage];
  1453. end;
  1454. {end} // DJLP 2000-08-09
  1455. procedure TSynSQLSyn.Next;
  1456. begin
  1457. fTokenPos := Run;
  1458. case fRange of
  1459. rsComment:
  1460. AnsiCProc;
  1461. rsString:
  1462. AsciiCharProc;
  1463. else
  1464. fProcTable[fLine[Run]]();
  1465. end;
  1466. end;
  1467. function TSynSQLSyn.GetDefaultAttribute(Index: integer):
  1468. TSynHighlighterAttributes;
  1469. begin
  1470. case Index of
  1471. SYN_ATTR_COMMENT: Result := fCommentAttri;
  1472. SYN_ATTR_IDENTIFIER: Result := fIdentifierAttri;
  1473. SYN_ATTR_KEYWORD: Result := fKeyAttri;
  1474. SYN_ATTR_STRING: Result := fStringAttri;
  1475. SYN_ATTR_WHITESPACE: Result := fSpaceAttri;
  1476. SYN_ATTR_SYMBOL: Result := fSymbolAttri;
  1477. SYN_ATTR_NUMBER: Result := fNumberAttri;
  1478. SYN_ATTR_VARIABLE: Result := fVariableAttri;
  1479. else
  1480. Result := nil;
  1481. end;
  1482. end;
  1483. function TSynSQLSyn.GetEol: Boolean;
  1484. begin
  1485. Result := fTokenID = tkNull;
  1486. end;
  1487. function TSynSQLSyn.GetRange: Pointer;
  1488. begin
  1489. Result := Pointer(PtrInt(fRange));
  1490. end;
  1491. function TSynSQLSyn.GetToken: string;
  1492. var
  1493. Len: LongInt;
  1494. begin
  1495. Result := '';
  1496. Len := Run - fTokenPos;
  1497. Setstring(Result, (FLine + fTokenPos), Len);
  1498. end;
  1499. procedure TSynSQLSyn.GetTokenEx(out TokenStart: PChar; out TokenLength: integer);
  1500. begin
  1501. TokenLength:=Run-fTokenPos;
  1502. TokenStart:=FLine + fTokenPos;
  1503. end;
  1504. function TSynSQLSyn.GetTokenID: TtkTokenKind;
  1505. begin
  1506. Result := fTokenId;
  1507. end;
  1508. function TSynSQLSyn.GetTokenAttribute: TSynHighlighterAttributes;
  1509. begin
  1510. case GetTokenID of
  1511. tkComment: Result := fCommentAttri;
  1512. tkDatatype: Result := fDataTypeAttri;
  1513. tkDefaultPackage: Result := fDefaultPackageAttri; // DJLP 2000-08-11
  1514. tkException: Result := fExceptionAttri;
  1515. tkFunction: Result := fFunctionAttri;
  1516. tkIdentifier: Result := fIdentifierAttri;
  1517. tkKey: Result := fKeyAttri;
  1518. tkNumber: Result := fNumberAttri;
  1519. tkPLSQL: Result := fPLSQLAttri; // DJLP 2000-08-11
  1520. tkSpace: Result := fSpaceAttri;
  1521. tkSQLPlus: Result := fSQLPlusAttri; // DJLP 2000-08-11
  1522. tkString: Result := fStringAttri;
  1523. tkSymbol: Result := fSymbolAttri;
  1524. tkTableName: Result := fTableNameAttri;
  1525. tkVariable: Result := fVariableAttri;
  1526. tkUnknown: Result := fIdentifierAttri;
  1527. else
  1528. Result := nil;
  1529. end;
  1530. end;
  1531. function TSynSQLSyn.GetTokenKind: integer;
  1532. begin
  1533. Result := Ord(fTokenId);
  1534. end;
  1535. function TSynSQLSyn.GetTokenPos: Integer;
  1536. begin
  1537. Result := fTokenPos;
  1538. end;
  1539. procedure TSynSQLSyn.ResetRange;
  1540. begin
  1541. fRange := rsUnknown;
  1542. end;
  1543. procedure TSynSQLSyn.SetRange(Value: Pointer);
  1544. begin
  1545. fRange := TRangeState(PtrUInt(Value));
  1546. end;
  1547. function TSynSQLSyn.GetIdentChars: TSynIdentChars;
  1548. begin
  1549. Result := TSynValidStringChars;
  1550. if (fDialect = sqlMSSQL7) or (fDialect = sqlMSSQL2K) then
  1551. Include(Result, '@')
  1552. {begin} // DJLP 2000-08-11
  1553. else if fDialect = sqlOracle then begin
  1554. Include(Result, '#');
  1555. Include(Result, '$');
  1556. end;
  1557. {end} // DJLP 2000-08-11
  1558. end;
  1559. class function TSynSQLSyn.GetLanguageName: string;
  1560. begin
  1561. Result := SYNS_LangSQL;
  1562. end;
  1563. procedure TSynSQLSyn.DoAddKeyword(AKeyword: string; AKind: integer);
  1564. var
  1565. HashValue: integer;
  1566. begin
  1567. HashValue := KeyHash(PChar(AKeyword));
  1568. fKeywords[HashValue] := TSynHashEntry.Create(AKeyword, AKind);
  1569. end;
  1570. procedure TSynSQLSyn.SetTableNames(const Value: TStrings);
  1571. begin
  1572. fTableNames.Assign(Value);
  1573. end;
  1574. procedure TSynSQLSyn.TableNamesChanged(Sender: TObject);
  1575. begin
  1576. InitializeKeywordLists;
  1577. end;
  1578. procedure TSynSQLSyn.PutTableNamesInKeywordList;
  1579. var
  1580. i: Integer;
  1581. Entry: TSynHashEntry;
  1582. begin
  1583. for i := 0 to (fTableNames.Count - 1) do
  1584. begin
  1585. Entry := fKeywords[KeyHash(PChar(fTableNames[i]))];
  1586. while Assigned(Entry) do
  1587. begin
  1588. if (UpperCase(Entry.Keyword) = Uppercase(fTableNames[i])) then
  1589. Break;
  1590. Entry := Entry.Next;
  1591. end;
  1592. if not Assigned(Entry) then
  1593. DoAddKeyword(fTableNames[i], Ord(tkTableName));
  1594. end;
  1595. end;
  1596. procedure TSynSQLSyn.InitializeKeywordLists;
  1597. begin
  1598. fKeywords.Clear;
  1599. if (fDialect in [sqlMSSQL7, sqlMSSQL2K]) then
  1600. begin
  1601. fIdentifiersPtr := @IdentifiersMSSQL7;
  1602. fmHashTablePtr := @mHashTableMSSQL7;
  1603. end else begin
  1604. fIdentifiersPtr := @Identifiers;
  1605. fmHashTablePtr := @mHashTable;
  1606. end;
  1607. case fDialect of
  1608. sqlPostgres:
  1609. begin
  1610. EnumerateKeywords(Ord(tkKey), PostgresKW, IdentChars, @DoAddKeyword);
  1611. EnumerateKeywords(Ord(tkDatatype), PostgresTypes, IdentChars,
  1612. @DoAddKeyword);
  1613. EnumerateKeywords(Ord(tkFunction), PostgresFunctions, IdentChars,
  1614. @DoAddKeyword);
  1615. EnumerateKeywords(Ord(tkException), PostgresExceptions, IdentChars,
  1616. @DoAddKeyword);
  1617. end;
  1618. sqlSqlite:
  1619. begin
  1620. EnumerateKeywords(Ord(tkDatatype), SQLiteTypes, IdentChars,
  1621. @DoAddKeyword);
  1622. EnumerateKeywords(Ord(tkFunction), SQLiteFunctions, IdentChars,
  1623. @DoAddKeyword);
  1624. EnumerateKeywords(Ord(tkKey), SQLiteKW, IdentChars, @DoAddKeyword);
  1625. end;
  1626. sqlIngres:
  1627. begin
  1628. EnumerateKeywords(Ord(tkDatatype), IngresTypes, IdentChars,
  1629. @DoAddKeyword);
  1630. EnumerateKeywords(Ord(tkKey), IngresKW, IdentChars, @DoAddKeyword);
  1631. EnumerateKeywords(Ord(tkFunction), IngresFunctions, IdentChars,
  1632. @DoAddKeyword);
  1633. end;
  1634. sqlInterbase6:
  1635. begin
  1636. EnumerateKeywords(Ord(tkDatatype), Interbase6Types, IdentChars,
  1637. @DoAddKeyword);
  1638. EnumerateKeywords(Ord(tkFunction), Interbase6Functions, IdentChars,
  1639. @DoAddKeyword);
  1640. EnumerateKeywords(Ord(tkKey), Interbase6KW, IdentChars, @DoAddKeyword);
  1641. end;
  1642. sqlMSSQL7:
  1643. begin
  1644. EnumerateKeywords(Ord(tkKey), MSSQL7KW, IdentChars, @DoAddKeyword);
  1645. EnumerateKeywords(Ord(tkDatatype), MSSQL7Types, IdentChars,
  1646. @DoAddKeyword);
  1647. EnumerateKeywords(Ord(tkFunction), MSSQL7Functions, IdentChars,
  1648. @DoAddKeyword);
  1649. end;
  1650. sqlMSSQL2K:
  1651. begin
  1652. EnumerateKeywords(ord(tkKey), MSSQL2000KW, IdentChars, @DoAddKeyword);
  1653. EnumerateKeywords(ord(tkDataType), MSSQL2000Types, IdentChars, @DoAddKeyword);
  1654. EnumerateKeywords(ord(tkFunction), MSSQL2000Functions, IdentChars, @DoAddKeyword);
  1655. end;
  1656. sqlMySql:
  1657. begin
  1658. EnumerateKeywords(Ord(tkKey), MySqlKW, IdentChars, @DoAddKeyword);
  1659. EnumerateKeywords(Ord(tkDatatype), MySqlTypes, IdentChars,
  1660. @DoAddKeyword);
  1661. EnumerateKeywords(Ord(tkFunction), MySqlFunctions, IdentChars,
  1662. @DoAddKeyword);
  1663. end;
  1664. sqlOracle:
  1665. begin
  1666. EnumerateKeywords(Ord(tkKey), OracleKW, IdentChars, @DoAddKeyword);
  1667. EnumerateKeywords(Ord(tkDatatype), OracleTypes, IdentChars,
  1668. @DoAddKeyword);
  1669. EnumerateKeywords(Ord(tkException), OracleExceptions, IdentChars,
  1670. @DoAddKeyword);
  1671. EnumerateKeywords(Ord(tkFunction), OracleFunctions, IdentChars,
  1672. @DoAddKeyword);
  1673. EnumerateKeywords(Ord(tkComment), OracleCommentKW, IdentChars,
  1674. @DoAddKeyword);
  1675. EnumerateKeywords(Ord(tkDefaultPackage), OracleDefaultPackages,
  1676. IdentChars, @DoAddKeyword);
  1677. EnumerateKeywords(Ord(tkPLSQL), OraclePLSQLKW, IdentChars,
  1678. @DoAddKeyword);
  1679. EnumerateKeywords(Ord(tkSQLPlus), OracleSQLPlusCommands, IdentChars,
  1680. @DoAddKeyword);
  1681. end;
  1682. sqlStandard:
  1683. EnumerateKeywords(Ord(tkKey), StandardKW, IdentChars + ['-'], @DoAddKeyword);
  1684. sqlSybase:
  1685. EnumerateKeywords(Ord(tkKey), SybaseKW, IdentChars, @DoAddKeyword);
  1686. end;
  1687. PutTableNamesInKeywordList;
  1688. DefHighlightChange(Self);
  1689. end;
  1690. procedure TSynSQLSyn.SetDialect(Value: TSQLDialect);
  1691. begin
  1692. if (Value <> fDialect) then
  1693. begin
  1694. fDialect := Value;
  1695. InitializeKeywordLists;
  1696. end;
  1697. end;
  1698. function TSynSQLSyn.GetSampleSource: String;
  1699. begin
  1700. Result:= '';
  1701. case fDialect of
  1702. sqlPostgres:
  1703. Result := '-- PostgreSQL SQL sample source'#13#10 +
  1704. 'SELECT datname'#13#10 +
  1705. 'FROM pg_database'#13#10 +
  1706. 'WHERE datname = ''postgres'';';
  1707. sqlStandard:
  1708. Result := '-- ansi sql sample source'#13#10 +
  1709. 'select name , region'#13#10 +
  1710. 'from cia'#13#10 +
  1711. 'where area < 2000'#13#10 +
  1712. 'and gdp > 5000000000';
  1713. sqlInterbase6:
  1714. Result := '/* Interbase sample source */'#13#10 +
  1715. 'SET TERM !! ;'#13#10 +
  1716. #13#10 +
  1717. 'CREATE PROCEDURE HelloWorld(P_MSG VARCHAR(80)) AS'#13#10 +
  1718. 'BEGIN'#13#10 +
  1719. ' EXECUTE PROCEDURE WRITELN(:P_MSG);'#13#10 +
  1720. 'END !!'#13#10 +
  1721. #13#10 +
  1722. 'SET TERM ; !!';
  1723. sqlMySQL:
  1724. Result := '/* MySQL sample source*/'#13#10 +
  1725. 'SET @variable= { 1 }'#13#10 +
  1726. #13#10 +
  1727. 'CREATE TABLE sample ('#13#10 +
  1728. ' id INT NOT NULL,'#13#10 +
  1729. ' first_name CHAR(30) NOT NULL,'#13#10 +
  1730. ' PRIMARY KEY (id),'#13#10 +
  1731. ' INDEX name (first_name));'#13#10 +
  1732. #13#10 +
  1733. 'SELECT DATE_ADD("1997-12-31 23:59:59",'#13#10 +
  1734. ' INTERVAL 1 SECOND);'#13#10 +
  1735. #13#10 +
  1736. '# End of sample';
  1737. sqlOracle:
  1738. Result := 'PROMPT Oracle sample source'#13#10 +
  1739. 'declare'#13#10 +
  1740. ' x varchar2(2000);'#13#10 +
  1741. 'begin -- Show some text here'#13#10 +
  1742. ' select to_char(count(*)) into x'#13#10 +
  1743. ' from tab;'#13#10 +
  1744. #13#10 +
  1745. ' dbms_output.put_line(''Hello World: '' || x);'#13#10 +
  1746. 'exception'#13#10 +
  1747. ' when others then'#13#10 +
  1748. ' null;'#13#10 +
  1749. 'end;';
  1750. sqlSybase:
  1751. Result := '/* SyBase example source */'#13#10 +
  1752. 'declare @Integer int'#13#10 +
  1753. #13#10 +
  1754. '/* Good for positive numbers only. */'#13#10 +
  1755. 'select @Integer = 1000'#13#10 +
  1756. #13#10 +
  1757. 'select "Positives Only" ='#13#10 +
  1758. ' right(replicate("0",12) + '#13#10 +
  1759. ' convert(varchar, @Integer),12)'#13#10 +
  1760. #13#10 +
  1761. '/* Good for positive and negative numbers. */'#13#10 +
  1762. 'select @Integer = -1000'#13#10 +
  1763. #13#10 +
  1764. 'select "Both Signs" ='#13#10 +
  1765. ' substring( "- +", (sign(@Integer) + 2), 1) +'#13#10 +
  1766. ' right(replicate("0",12) + '#13#10 +
  1767. ' convert(varchar, abs(@Integer)),12)'#13#10 +
  1768. #13#10 +
  1769. 'select @Integer = 1000'#13#10 +
  1770. #13#10 +
  1771. 'select "Both Signs" ='#13#10 +
  1772. ' substring( "- +", (sign(@Integer) + 2), 1) +'#13#10 +
  1773. ' right(replicate("0",12) + '#13#10 +
  1774. ' convert(varchar, abs(@Integer)),12)'#13#10 +
  1775. #13#10 +
  1776. 'go';
  1777. sqlIngres:
  1778. Result := '/* Ingres example source */'#13#10 +
  1779. 'DELETE'#13#10 +
  1780. 'FROM t1'#13#10 +
  1781. 'WHERE EXISTS'#13#10 +
  1782. '(SELECT t2.column1, t2.column2'#13#10 +
  1783. 'FROM t2'#13#10 +
  1784. 'WHERE t1.column1 = t2.column1 and'#13#10 +
  1785. 't1.column2 = t2.column2)';
  1786. sqlMSSQL7:
  1787. Result := '/* SQL Server 7 example source */'#13#10 +
  1788. 'SET QUOTED_IDENTIFIER OFF'#13#10 +
  1789. 'GO'#13#10 +
  1790. 'SET ANSI_NULLS OFF'#13#10 +
  1791. 'GO'#13#10 +
  1792. #13#10 +
  1793. '/* Object: Stored Procedure dbo.sp_PPQInsertOrder */'#13#10 +
  1794. 'CREATE PROCEDURE sp_PPQInsertOrder'#13#10 +
  1795. ' @Name varchar(25),'#13#10 +
  1796. ' @Address varchar(255),'#13#10 +
  1797. ' @ZipCode varchar(15)'#13#10 +
  1798. 'As'#13#10 +
  1799. ' INSERT INTO PPQOrders(Name, Address, ZipCode, OrderDate)'#13#10 +
  1800. ' VALUES (@Name, @Address, @ZipCode, GetDate())'#13#10 +
  1801. #13#10 +
  1802. ' SELECT SCOPE_IDENTITY()'#13#10 +
  1803. 'GO';
  1804. sqlMSSQL2K:
  1805. Result := '/* SQL Server2000 example source */'#13#10 +
  1806. 'SET QUOTED_IDENTIFIER OFF'#13#10 +
  1807. 'GO'#13#10 +
  1808. 'SET ANSI_NULLS OFF'#13#10 +
  1809. 'GO'#13#10 +
  1810. #13#10 +
  1811. '/* Object: Stored Procedure dbo.sp_PPQInsertOrder */'#13#10 +
  1812. 'CREATE PROCEDURE sp_PPQInsertOrder'#13#10 +
  1813. ' @Name varchar(25),'#13#10 +
  1814. ' @Address varchar(255),'#13#10 +
  1815. ' @ZipCode varchar(15)'#13#10 +
  1816. 'As'#13#10 +
  1817. ' INSERT INTO PPQOrders(Name, Address, ZipCode, OrderDate)'#13#10 +
  1818. ' VALUES (@Name, @Address, @ZipCode, GetDate())'#13#10 +
  1819. #13#10 +
  1820. ' SELECT SCOPE_IDENTITY()'#13#10 +
  1821. 'GO';
  1822. end;
  1823. end;
  1824. initialization
  1825. MakeIdentTable;
  1826. RegisterPlaceableHighlighter(TSynSQLSyn);
  1827. end.