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