dbo.QBM_FCVStringToListSQLMo_int
Table FunctionSQL_TABLE_VALUED_FUNCTIONSandbox DB
Interpretation
- Database function. Usually supports views, validation, or calculated predicates; look at referenced-by entries for callers.
Relations
- No extracted relations.
Typed Edges
- references source dbo.QBM_FCVStringToList source text reference
- references source dbo.QBM_FTSQLKeywords source text reference
Complete Source
1CREATE FUNCTION dbo.QBM_FCVStringToListSQLMo_int(2 @SQLIn nvarchar(max),3 @CurrentLevel int,4 @Check int,5 @withLiteralTopDown BIT6) RETURNS @erg TABLE(SortOrder int,7MorphemType nvarchar(16) collate Database_default,8MorphemSubType nvarchar(16) collate Database_default,9isConflicted BIT DEFAULT 0,10CurrentLevel int DEFAULT 0,11Morphem nvarchar(max) collate Database_default,12p1 nvarchar(256) collate Database_default,13p2 nvarchar(256) collate Database_default,14LenMorphem int NOT NULL,15TargetLine int NOT NULL primary key(SortOrder)16)17AS18BEGIN19 DECLARE @Element nvarchar(max)20 DECLARE @i int21 DECLARE @len int22 DECLARE @Zustand int23 DECLARE @Nesting int24 DECLARE @NextChar nvarchar(1)25 DECLARE @Next2Char nvarchar(2)26 DECLARE @MaxlenAlias int = 1027 DECLARE @SourceCode nvarchar(max)28 SELECT29 @SourceCode = CONCAT(@sqlIn,30 nchar(13),31 nchar(10))32 SELECT @Element = N ''33 SELECT @len = len(@SourceCode)34 DECLARE @TargetLine int = 035 DECLARE @LineLength int = 036 DECLARE @LineLengthMax int = 15037 DECLARE @result QBM_YMorphemInformation38 DECLARE @TwoCharMorphem QBM_YSingleGUID39 INSERT INTO @TwoCharMorphem(UID_SingleGuid)40 VALUES('+='),41 ('-='),42 ('<>'),43 ('!='),44 ('<='),45 ('>=')46 DECLARE @OneCharMorphem QBM_YSingleGUID47 INSERT INTO @OneCharMorphem(UID_SingleGuid)48 VALUES('('),49 (')'),50 ('='),51 (','),52 (';'),53 ('+'),54 ('-'),55 ('*'),56 ('/'),57 ('%'),58 ('<'),59 ('>'),60 (':'),61 ('^'),62 ('!'),63 ('~'),64 ('&'),65 ('|')66 SELECT @Zustand = 067 SELECT @i = 168 WHILE @i <= @len69 BEGIN70 SELECT71 @Next2Char = substring(@SourceCode,72 @i,73 2)74 IF len(@Next2Char) < 275 BEGIN76 SELECT @Next2Char =77 LEFT(CONCAT(@Next2Char, nchar(13), nchar(10)),78 2)79 END80 SELECT @NextChar =81 LEFT(@Next2Char,82 1)83 IF @Zustand = 084 BEGIN85 IF @Next2Char = N '--'86 BEGIN87 SELECT @Zustand = 188 SELECT @i += 2 CONTINUE89 END90 IF @Next2Char = N '/*'91 BEGIN92 SELECT @Zustand = 293 SELECT @Nesting = 194 SELECT @i += 2 CONTINUE95 END96 IF @Next2Char = N 'N'''97 BEGIN98 SELECT @Zustand = 399 SELECT @Element += @Next2Char100 SELECT @i += 2 CONTINUE101 END102 IF @NextChar = N ''''103 BEGIN104 SELECT @Zustand = 3105 SELECT @Element += @NextChar106 SELECT @i += 1 CONTINUE107 END108 IF @next2char IN(109 SELECT UID_SingleGuid110 FROM @TwoCharMorphem)111 BEGIN112 INSERT INTO @result(Morphemtype,113 MorphemSubType,114 morphem,115 CurrentLevel,116 LenMorphem,117 TargetLine)118 VALUES('Morphem',119 '2 Chars',120 @next2char,121 @CurrentLevel,122 len(@Next2Char),123 @TargetLine)124 SELECT @LineLength += len(@Next2Char) +1125 IF @LineLength > @LineLengthMax126 BEGIN127 SELECT @LineLength = 0128 SELECT @TargetLine += 1129 END130 SELECT @i += 2131 SELECT @Zustand = 0132 SELECT @element = N '' CONTINUE133 END134 IF @nextChar IN(135 SELECT UID_SingleGuid136 FROM @OneCharMorphem)137 BEGIN138 INSERT INTO @result(Morphemtype,139 MorphemSubType,140 morphem,141 CurrentLevel,142 LenMorphem,143 TargetLine)144 VALUES('Morphem',145 '1 Char',146 @NextChar,147 @CurrentLevel,148 len(@NextChar),149 @TargetLine)150 SELECT @LineLength += len(@NextChar) +1151 IF @LineLength > @LineLengthMax152 BEGIN153 SELECT @LineLength = 0154 SELECT @TargetLine += 1155 END156 SELECT @i += 1157 SELECT @Zustand = 0158 SELECT @element = N '' CONTINUE159 END160 IF @NextChar IN(N ' ',161 nchar(9))162 BEGIN163 SELECT @Zustand = 4164 SELECT @i += 1 CONTINUE165 END166 IF @NextChar = nchar(13)167 BEGIN168 SELECT @i += 1 CONTINUE169 END170 IF @NextChar = nchar(10)171 BEGIN172 SELECT @i += 1 CONTINUE173 END174 SELECT @Zustand = 5175 SELECT @i += 1176 SELECT @Element += @NextChar CONTINUE177 END178 IF @Zustand = 1179 BEGIN180 IF @nextchar IN(nchar(13),181 nchar(10))182 BEGIN183 SELECT @Zustand = 0 CONTINUE184 END185 SELECT @i += 1 CONTINUE186 END187 IF @Zustand = 2188 BEGIN189 IF @next2char = N '/*'190 BEGIN191 SELECT @Nesting += 1192 SELECT @i = @i+2 CONTINUE193 END194 IF @next2char = N '*/'195 BEGIN196 SELECT @Nesting -= 1197 IF @nesting = 0198 BEGIN199 SELECT @Zustand = 0200 END201 SELECT @i = @i+2 CONTINUE202 END203 SELECT @i += 1 CONTINUE204 END205 IF @Zustand = 3206 BEGIN207 IF @Next2Char = N ''''''208 BEGIN209 SELECT @Element += @next2char210 SELECT @i += 2 CONTINUE211 END212 IF @nextchar = N ''''213 BEGIN214 SELECT @Zustand = 0215 SELECT @i += 1216 SELECT @Element += @nextchar217 INSERT INTO @result(Morphemtype,218 MorphemSubType,219 morphem,220 CurrentLevel,221 LenMorphem,222 TargetLine)223 VALUES('Literal',224 'String',225 @Element,226 @CurrentLevel,227 len(@Element),228 @TargetLine)229 SELECT @LineLength += len(@Element) +1230 IF @LineLength > @LineLengthMax231 BEGIN232 SELECT @LineLength = 0233 SELECT @TargetLine += 1234 END235 IF @withLiteralTopDown = 1236 BEGIN237 IF238 LEFT(@element,239 2) = 'N'''240 BEGIN241 SELECT242 @element = substring(@element,243 3,244 len(@element) - 3)245 END246 ELSE247 BEGIN248 SELECT249 @element = substring(@element,250 2,251 len(@element) - 2)252 END253 SELECT254 @element = replace(@element,255 '''''',256 '''')257 INSERT INTO @result(Morphemtype,258 MorphemSubType,259 morphem,260 CurrentLevel,261 LenMorphem,262 TargetLine)263 SELECT264 x.Morphemtype,265 x.MorphemSubType,266 x.morphem,267 x.CurrentLevel,268 len(x.morphem),269 @TargetLine270 FROM dbo.QBM_FCVStringToListSQLMo_int(@element,271 @CurrentLevel + 1,272 @Check,273 @withLiteralTopDown) x274 END275 SELECT @element = N '' CONTINUE276 END277 SELECT @i += 1278 SELECT @Element += @nextchar CONTINUE279 END280 IF @Zustand = 4281 BEGIN282 IF @nextchar IN(N ' ',283 nchar(9),284 nchar(13),285 nchar(10))286 BEGIN287 SELECT @i += 1 CONTINUE288 END289 SELECT @zustand = 0 CONTINUE290 END291 IF @zustand = 5292 BEGIN293 IF @next2Char IN(N '--',294 N '/*') OR @nextchar IN(N '''',295 nchar(10),296 nchar(13),297 N ' ',298 nchar(9)) OR @next2char IN(299 SELECT UID_SingleGuid300 FROM @TwoCharMorphem) OR @nextChar IN(301 SELECT UID_SingleGuid302 FROM @OneCharMorphem)303 BEGIN304 SELECT @Zustand = 0305 INSERT INTO @result(Morphemtype,306 MorphemSubType,307 morphem,308 CurrentLevel,309 LenMorphem,310 TargetLine)311 VALUES('Morphem',312 NULL,313 @Element,314 @CurrentLevel,315 len(@element),316 @TargetLine)317 SELECT @LineLength += len(@Element) +1318 IF @LineLength > @LineLengthMax319 BEGIN320 SELECT @LineLength = 0321 SELECT @TargetLine += 1322 END323 SELECT @element = N '' CONTINUE324 END325 SELECT @i += 1326 SELECT @Element += @nextchar CONTINUE327 END328 END329 IF @Check = -1330 BEGIN331 GOTO EndLabel332 END333 UPDATE @result334 SET p1 = substring(Morphem,335 1,336 PATINDEX(N '%..%', Morphem) -1),337 p2 = substring(Morphem,338 PATINDEX(N '%..%', Morphem) +2,339 256)340 WHERE341 morphemtype = 'Morphem' AND morphemsubtype IS NULL AND PATINDEX(N '%..%',342 Morphem) > 0 AND CurrentLevel = @CurrentLevel343 UPDATE @result344 SET p1 = substring(Morphem,345 1,346 PATINDEX(N '%.%', Morphem) -1),347 p2 = substring(Morphem,348 PATINDEX(N '%.%', Morphem) +1,349 256)350 WHERE351 morphemtype = 'Morphem' AND morphemsubtype IS NULL AND p1 IS NULL AND PATINDEX(N '%.%',352 Morphem) > 0 AND CurrentLevel = @CurrentLevel353 UPDATE @result354 SET MorphemType = 'Literal',355 MorphemSubType = 'Float',356 p1 = NULL,357 p2 = NULL358 WHERE359 morphemtype = 'Morphem' AND morphemSubtype IS NULL AND isnumeric(p1) = 1 AND isnumeric(p2) = 1 AND CurrentLevel = @CurrentLevel360 UPDATE @result361 SET morphemType = 'Literal',362 MorphemSubtype = 'Int'363 WHERE364 morphemtype = 'Morphem' AND isnumeric(morphem) = 1 AND morphemSubtype IS NULL AND CurrentLevel = @CurrentLevel365 UPDATE @result366 SET morphemType = 'Literal',367 MorphemSubtype = 'binary'368 WHERE369 morphemtype = 'Morphem' AND morphem LIKE '0' + 'x%' AND morphemSubtype IS NULL AND CurrentLevel = @CurrentLevel370 UPDATE @result371 SET morphemType = 'Variable',372 MorphemSubtype = ''373 WHERE374 morphemtype = 'Morphem' AND375 LEFT(Morphem,376 1) = '@' AND substring(Morphem,377 2,378 1) <> '@' AND CurrentLevel = @CurrentLevel379 IF @Check = 0380 BEGIN381 GOTO endLabel382 END383 UPDATE @result384 SET Morphemtype = 'KeyWord',385 MorphemSubtype = x.KeywordArea386 FROM @Result r387 JOIN dbo.QBM_FTSQLKeywords(1) x388 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND r.Morphem = x.Keyword AND x.KeywordArea = 'T-SQL'389 WHERE390 r.CurrentLevel = @CurrentLevel391 UPDATE @result392 SET Morphemtype = CASE393 WHEN x.system_type_id = x.user_type_id THEN394 'SystemObject'395 ELSE 'SchemaObject'396 END,397 MorphemSubtype = 'Type'398 FROM @Result r399 JOIN sys.types x400 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)401 WHERE402 r.CurrentLevel = @CurrentLevel403 IF @Check = 2404 BEGIN405 GOTO EndLabel406 END407 UPDATE @result408 SET Morphemtype = 'SchemaObject',409 MorphemSubtype = 'Table'410 FROM @Result r411 JOIN sys.tables x412 WITH(readpast)413 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)414 WHERE415 r.CurrentLevel = @CurrentLevel416 UPDATE @result417 SET Morphemtype = 'SchemaObject',418 MorphemSubtype = 'Table'419 FROM @Result r420 WHERE421 r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem LIKE '#%' OR r.p2 LIKE '#%') AND r.CurrentLevel = @CurrentLevel422 UPDATE @result423 SET Morphemtype = 'SchemaObject',424 MorphemSubtype = 'View'425 FROM @Result r426 JOIN sys.views x427 WITH(readpast)428 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)429 WHERE430 r.CurrentLevel = @CurrentLevel431 UPDATE @result432 SET Morphemtype = 'SchemaObject',433 MorphemSubtype = 'TableFunction'434 FROM @Result r435 JOIN sys.objects x436 WITH(readpast)437 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)438 WHERE439 x.type IN('IF',440 'TF') AND r.CurrentLevel = @CurrentLevel441 UPDATE @result442 SET Morphemtype = 'SchemaObject',443 MorphemSubtype = 'Function'444 FROM @Result r445 JOIN sys.objects x446 WITH(readpast)447 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)448 WHERE449 x.type IN('FN') AND r.CurrentLevel = @CurrentLevel450 UPDATE @result451 SET Morphemtype = 'SchemaObject',452 MorphemSubtype = 'Procedure'453 FROM @Result r454 JOIN sys.objects x455 WITH(readpast)456 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)457 WHERE458 x.type IN('P') AND r.CurrentLevel = @CurrentLevel459 UPDATE @result460 SET morphemtype = 'SystemObject',461 MorphemSubType = 'Table'462 WHERE463 p1 IN(464 SELECT name465 FROM sys.schemas466 WITH(readpast)) AND p1 <> 'dbo' AND p2 > ' ' AND CurrentLevel = @CurrentLevel AND p2 NOT LIKE 'sp[_]%' AND morphemtype = 'Morphem' AND morphemsubtype467 IS NULL468 UPDATE @result469 SET morphemtype = 'SystemObject',470 MorphemSubType = 'Table'471 WHERE472 EXISTS(473 SELECT TOP 1 1474 FROM sys.databases sd475 WHERE476 p1 = sd.name collate database_default) AND p2 > ' ' AND CurrentLevel = @CurrentLevel AND p2 NOT LIKE 'sp[_]%' AND morphemtype = 'Morphem' AND477 morphemsubtype IS NULL478 UPDATE @result479 SET MorphemSubtype = 'Table'480 WHERE481 MorphemType = 'Variable' AND morphem IN(482 SELECT r1.Morphem483 FROM @Result r1484 JOIN @Result r2485 ON r1.SortOrder + 1 = r2.SortOrder AND r1.Morphemtype = 'Variable' AND r2.Morphem = 'Table'486 JOIN @Result r3487 ON r2.SortOrder + 1 = r3.SortOrder AND r3.Morphem = '(') AND CurrentLevel = @CurrentLevel488 UPDATE @result489 SET Morphemtype = 'ProgramElement',490 MorphemSubtype = 'Label'491 FROM @Result r492 JOIN(493 SELECT *494 FROM @result495 WHERE496 CurrentLevel = @CurrentLevel) AS r2497 ON r.SortOrder +1 = r2.SortOrder498 WHERE499 r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND r2.Morphem = ':' AND r.CurrentLevel = @CurrentLevel500 UPDATE @result501 SET Morphemtype = 'ProgramElement',502 MorphemSubtype = 'Label'503 FROM @Result r2504 JOIN(505 SELECT *506 FROM @result507 WHERE508 CurrentLevel = @CurrentLevel) AS r1509 ON r1.SortOrder +1 = r2.SortOrder510 WHERE511 r2.MorphemType = 'Morphem' AND r2.MorphemSubtype IS NULL AND r1.Morphem = 'Goto' AND r2.CurrentLevel = @CurrentLevel512 UPDATE @result513 SET Morphemtype = r1.Morphemtype,514 MorphemSubtype = 'TableAlias1'515 FROM @Result r2516 JOIN(517 SELECT *518 FROM @result519 WHERE520 CurrentLevel = @CurrentLevel) AS r1521 ON r1.morphemSubtype IN('Table',522 'view',523 'TableFunction') AND r1.SortOrder + 1 = r2.SortOrder524 WHERE525 r2.MorphemType = 'Morphem' AND r2.MorphemSubtype IS NULL AND len(r2.morphem) <= @MaxlenAlias AND r2.p1 IS NULL AND r2.CurrentLevel = @CurrentLevel526 UPDATE @result527 SET Morphemtype = r1.Morphemtype,528 MorphemSubtype = 'TableAlias2'529 FROM @Result r3530 JOIN(531 SELECT *532 FROM @result533 WHERE534 CurrentLevel = @CurrentLevel) AS r1535 ON r1.morphemSubtype IN('Table',536 'view',537 'TableFunction')538 JOIN(539 SELECT *540 FROM @result541 WHERE542 CurrentLevel = @CurrentLevel) AS r2543 ON r2.Morphem = 'AS' AND r1.SortOrder + 1 = r2.SortOrder AND r2.SortOrder +1 = r3.SortOrder544 WHERE545 r3.MorphemType = 'Morphem' AND r3.MorphemSubtype IS NULL AND len(r3.morphem) <= @MaxlenAlias AND r3.p1 IS NULL AND r3.CurrentLevel = @CurrentLevel546 UPDATE @result547 SET Morphemtype = r1.Morphemtype,548 MorphemSubtype = 'TableAlias3'549 FROM @Result r2550 JOIN(551 SELECT *552 FROM @result553 WHERE554 CurrentLevel = @CurrentLevel) r1555 ON r1.morphem = ')' AND r1.SortOrder + 1 = r2.SortOrder556 WHERE557 r2.MorphemType = 'Morphem' AND r2.MorphemSubtype IS NULL AND len(r2.morphem) <= @MaxlenAlias AND r2.p1 IS NULL AND r2.CurrentLevel = @CurrentLevel AND558 r2.morphem <> 'returns'559 UPDATE @result560 SET Morphemtype = r1.Morphemtype,561 MorphemSubtype = 'TableAlias4'562 FROM @Result r3563 JOIN(564 SELECT *565 FROM @result566 WHERE567 CurrentLevel = @CurrentLevel) AS r1568 ON r1.morphem = ')'569 JOIN(570 SELECT *571 FROM @result572 WHERE573 CurrentLevel = @CurrentLevel) AS r2574 ON r2.Morphem = 'AS' AND r1.SortOrder + 1 = r2.SortOrder AND r2.SortOrder +1 = r3.SortOrder575 WHERE576 r3.MorphemType = 'Morphem' AND r3.MorphemSubtype IS NULL AND len(r3.morphem) <= @MaxlenAlias AND r3.p1 IS NULL AND r3.CurrentLevel = @CurrentLevel577 UPDATE @Result578 SET Morphemtype = b.Morphemtype,579 MorphemSubtype = 'TableAlias5'580 FROM @Result a581 JOIN(582 SELECT *583 FROM @result584 WHERE585 CurrentLevel = @CurrentLevel) AS b586 ON b.MorphemSubtype LIKE 'TableAlias_' AND b.Morphem = a.Morphem587 WHERE588 a.MorphemType = 'Morphem' AND a.MorphemSubtype IS NULL AND NOT EXISTS(589 SELECT TOP 1 1590 FROM @Result c591 WHERE592 c.Morphem = a.Morphem AND(c.MorphemSubtype NOT LIKE 'TableAlias_')) AND a.CurrentLevel = @CurrentLevel593 UPDATE @result594 SET Morphemtype = te.Morphemtype,595 MorphemSubtype = 'Column'596 FROM @Result r597 JOIN sys.columns x598 WITH(readpast)599 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND(r.Morphem = x.name OR r.p2 = x.name)600 JOIN sys.objects t601 WITH(readpast)602 ON x.Object_id = t.Object_id603 JOIN(604 SELECT *605 FROM @result606 WHERE607 CurrentLevel = @CurrentLevel) AS te608 ON te.MorphemSubtype IN('table',609 'View',610 'TableFunction') AND(te.morphem = t.name OR te.p2 = t.name)611 WHERE612 r.CurrentLevel = @CurrentLevel613 UPDATE @result614 SET Morphemtype = ta.Morphemtype,615 MorphemSubtype = 'Column'616 FROM @Result r617 JOIN(618 SELECT *619 FROM @result620 WHERE621 CurrentLevel = @CurrentLevel) AS ta622 ON ta.MorphemSubtype LIKE('tableAlias_') AND r.p1 = ta.morphem623 WHERE624 r.CurrentLevel = @CurrentLevel625 UPDATE @Result626 SET Morphemtype = r1.Morphemtype,627 MorphemSubtype = 'ColumnAlias'628 FROM @Result r3629 JOIN(630 SELECT *631 FROM @result632 WHERE633 CurrentLevel = @CurrentLevel) AS r2634 ON r2.SortOrder +1 = r3.SortOrder635 JOIN(636 SELECT *637 FROM @result638 WHERE639 CurrentLevel = @CurrentLevel) AS r1640 ON r1.SortOrder +1 = r2.SortOrder641 WHERE642 r1.MorphemSubtype = 'Column' AND r2.Morphem = 'as' AND r3.MorphemType = 'Morphem' AND r3.MorphemSubtype IS NULL AND r3.CurrentLevel = @CurrentLevel643 UPDATE @Result644 SET Morphemtype = r1.Morphemtype,645 MorphemSubtype = 'ColumnAlias'646 FROM @Result r2647 JOIN(648 SELECT *649 FROM @result650 WHERE651 CurrentLevel = @CurrentLevel) AS r1652 ON r1.SortOrder +1 = r1.SortOrder653 WHERE654 r1.MorphemSubtype = 'Column' AND r2.MorphemType = 'Morphem' AND r2.MorphemSubtype IS NULL AND r2.CurrentLevel = @CurrentLevel655 UPDATE @result656 SET Morphemtype = 'ProgramElement',657 MorphemSubtype = 'Cur' + 'sor'658 FROM @Result r659 WHERE660 r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND EXISTS(661 SELECT TOP 1 1662 FROM @Result r1663 JOIN @result r2664 ON r1.SortOrder +1 = r2.SortOrder AND r1.CurrentLevel = @CurrentLevel AND r2.CurrentLevel = @CurrentLevel665 WHERE666 r2.Morphem = r.Morphem AND r2.MorphemType = 'Morphem' AND r2.MorphemSubType IS NULL AND r1.MorphemType = 'Keyword' AND r1.Morphem = 'DECLARE'667 ) AND EXISTS(668 SELECT TOP 1 1669 FROM @Result r1670 JOIN @result r2671 ON r1.SortOrder +1 = r2.SortOrder AND r1.CurrentLevel = @CurrentLevel AND r2.CurrentLevel = @CurrentLevel672 WHERE673 r2.Morphem = r.Morphem AND r2.MorphemType = 'Morphem' AND r2.MorphemSubType IS NULL AND r1.MorphemType = 'Keyword' AND r1.Morphem = 'OPEN'674 ) AND EXISTS(675 SELECT TOP 1 1676 FROM @Result r1677 JOIN @result r2678 ON r1.SortOrder +1 = r2.SortOrder AND r1.CurrentLevel = @CurrentLevel AND r2.CurrentLevel = @CurrentLevel679 WHERE680 r2.Morphem = r.Morphem AND r2.MorphemType = 'Morphem' AND r2.MorphemSubType IS NULL AND r1.MorphemType = 'Keyword' AND r1.Morphem = 'FROM'681 ) AND EXISTS(682 SELECT TOP 1 1683 FROM @Result r1684 JOIN @result r2685 ON r1.SortOrder +1 = r2.SortOrder AND r1.CurrentLevel = @CurrentLevel AND r2.CurrentLevel = @CurrentLevel686 WHERE687 r2.Morphem = r.Morphem AND r2.MorphemType = 'Morphem' AND r2.MorphemSubType IS NULL AND r1.MorphemType = 'Keyword' AND r1.Morphem = 'Close'688 ) AND EXISTS(689 SELECT TOP 1 1690 FROM @Result r1691 JOIN @result r2692 ON r1.SortOrder +1 = r2.SortOrder AND r1.CurrentLevel = @CurrentLevel AND r2.CurrentLevel = @CurrentLevel693 WHERE694 r2.Morphem = r.Morphem AND r2.MorphemType = 'Morphem' AND r2.MorphemSubType IS NULL AND r1.MorphemType = 'Keyword' AND r1.Morphem = 'deallocate'695 ) AND r.CurrentLevel = @CurrentLevel696 UPDATE @result697 SET Morphemtype = 'KeyWord',698 MorphemSubtype = x.KeywordArea699 FROM @Result r700 JOIN dbo.QBM_FTSQLKeywords(1) x701 ON r.MorphemType = 'Morphem' AND r.MorphemSubtype IS NULL AND r.Morphem = x.Keyword702 WHERE703 r.CurrentLevel = @CurrentLevel704 UPDATE @result705 SET isConflicted = 1706 FROM @Result r707 JOIN dbo.QBM_FTSQLKeywords(1) x708 ON r.MorphemType <> 'KeyWord' AND r.Morphem = x.Keyword709 WHERE710 r.Morphemtype NOT IN('SystemObject') AND r.CurrentLevel = @CurrentLevel endLabel:711 INSERT INTO @erg(SortOrder,712 MorphemType,713 MorphemSubType,714 isConflicted,715 CurrentLevel,716 Morphem,717 p1,718 p2,719 LenMorphem,720 TargetLine)721 SELECT722 SortOrder,723 MorphemType,724 MorphemSubType,725 isConflicted,726 CurrentLevel,727 Morphem,728 p1,729 p2,730 LenMorphem,731 TargetLine732 FROM @result733 RETURN734END
Open raw exported source
1create function dbo.QBM_FCVStringToListSQLMo_int(@SQLIn nvarchar(max) , @CurrentLevel int , @Check int , @withLiteralTopDown bit ) returns @erg table2 ( SortOrder int , MorphemType nvarchar(16) collate Database_default , MorphemSubType nvarchar(16) collate Database_default , isConflicted bit default 30 , CurrentLevel int default 0 , Morphem nvarchar(max) collate Database_default , p1 nvarchar(256) collate Database_default , p2 nvarchar(256) collate4 Database_default , LenMorphem int not null , TargetLine int not null primary key (SortOrder) ) as begin declare @Element nvarchar(max) declare @i int5 declare @len int declare @Zustand int declare @Nesting int declare @NextChar nvarchar(1) declare @Next2Char nvarchar(2) declare @MaxlenAlias int = 106 declare @SourceCode nvarchar(max) select @SourceCode = concat(@sqlIn , nchar(13) , nchar(10)) select @Element = N'' select @len = len(@SourceCode) declare7 @TargetLine int = 0 declare @LineLength int = 0 declare @LineLengthMax int = 150 declare @result QBM_YMorphemInformation declare @TwoCharMorphem QBM_YSingleGUID8 insert into @TwoCharMorphem(UID_SingleGuid ) values ('+=') , ('-=') , ('<>') , ('!=') , ('<=') , ('>=') declare @OneCharMorphem QBM_YSingleGUID insert9 into @OneCharMorphem(UID_SingleGuid ) Values ( '(') ,(')') ,('=') ,(',') ,(';') ,('+') ,('-') ,('*') ,('/') ,('%') ,('<') ,('>') ,(':') ,('^') ,('!'10) ,('~') ,('&') ,('|') select @Zustand = 0 select @i = 1 while @i <= @len begin select @Next2Char = substring(@SourceCode , @i, 2) if len(@Next2Char) 11< 2 begin select @Next2Char = left(concat(@Next2Char , nchar(13) , nchar(10)), 2) end select @NextChar = left(@Next2Char, 1) if @Zustand = 0 begin if12 @Next2Char = N'--' begin select @Zustand = 1 select @i += 2 continue end if @Next2Char = N'/*' begin select @Zustand = 2 select @Nesting = 1 select @i13 += 2 continue end if @Next2Char = N'N''' begin select @Zustand = 3 select @Element += @Next2Char select @i += 2 continue end if @NextChar = N'''' begin14 select @Zustand = 3 select @Element += @NextChar select @i += 1 continue end if @next2char in (select UID_SingleGuid from @TwoCharMorphem) begin insert15 into @result(Morphemtype, MorphemSubType, morphem, CurrentLevel, LenMorphem, TargetLine) values( 'Morphem' , '2 Chars', @next2char, @CurrentLevel, len16(@Next2Char), @TargetLine) select @LineLength += len(@Next2Char) +1 if @LineLength > @LineLengthMax begin select @LineLength = 0 select @TargetLine +=17 1 end select @i += 2 select @Zustand = 0 select @element = N'' continue end if @nextChar in (select UID_SingleGuid from @OneCharMorphem) begin insert18 into @result(Morphemtype, MorphemSubType, morphem, CurrentLevel, LenMorphem, TargetLine) values( 'Morphem', '1 Char', @NextChar, @CurrentLevel, len(@NextChar19), @TargetLine) select @LineLength += len(@NextChar)+1 if @LineLength > @LineLengthMax begin select @LineLength = 0 select @TargetLine += 1 end select20 @i += 1 select @Zustand = 0 select @element = N'' continue end if @NextChar in (N' ', nchar(9)) begin select @Zustand = 4 select @i += 1 continue end21 if @NextChar = nchar(13) begin select @i += 1 continue end if @NextChar = nchar(10) begin select @i += 1 continue end select @Zustand = 5 select @i22 += 1 select @Element += @NextChar continue end if @Zustand = 1 begin if @nextchar in ( nchar(13), nchar(10)) begin select @Zustand = 0 continue end 23select @i += 1 continue end if @Zustand = 2 begin if @next2char = N'/*' begin select @Nesting += 1 select @i = @i+2 continue end if @next2char = N'*/'24 begin select @Nesting -= 1 if @nesting = 0 begin select @Zustand = 0 end select @i = @i+2 continue end select @i += 1 continue end if @Zustand = 3 25begin if @Next2Char = N'''''' begin select @Element += @next2char select @i += 2 continue end if @nextchar = N'''' begin select @Zustand = 0 select @i 26+= 1 select @Element += @nextchar insert into @result(Morphemtype,MorphemSubType, morphem, CurrentLevel, LenMorphem, TargetLine) values( 'Literal', 'String'27, @Element, @CurrentLevel, len(@Element), @TargetLine) select @LineLength += len(@Element)+1 if @LineLength > @LineLengthMax begin select @LineLength 28= 0 select @TargetLine += 1 end if @withLiteralTopDown = 1 begin if left(@element, 2) = 'N''' begin select @element = substring(@element, 3,len(@element29) - 3) end else begin select @element = substring(@element, 2,len(@element) - 2) end select @element = replace(@element, '''''', '''') insert into @result30(Morphemtype, MorphemSubType, morphem, CurrentLevel, LenMorphem, TargetLine) select x.Morphemtype, x.MorphemSubType, x.morphem, x.CurrentLevel, len(x.morphem31), @TargetLine from dbo.QBM_FCVStringToListSQLMo_int (@element , @CurrentLevel + 1, @Check, @withLiteralTopDown) x end select @element = N'' continue32 end select @i += 1 select @Element += @nextchar continue end if @Zustand = 4 begin if @nextchar in (N' ', nchar(9), nchar(13), nchar(10) ) begin select33 @i += 1 continue end select @zustand = 0 continue end if @zustand = 5 begin if @next2Char in (N'--', N'/*') or @nextchar in (N'''', nchar(10), nchar34(13), N' ', nchar(9)) or @next2char in (select UID_SingleGuid from @TwoCharMorphem) or @nextChar in (select UID_SingleGuid from @OneCharMorphem) begin35 select @Zustand = 0 insert into @result(Morphemtype, MorphemSubType, morphem, CurrentLevel, LenMorphem, TargetLine) values( 'Morphem', null, @Element36, @CurrentLevel, len(@element), @TargetLine) select @LineLength += len(@Element)+1 if @LineLength > @LineLengthMax begin select @LineLength = 0 select37 @TargetLine += 1 end select @element = N'' continue end select @i += 1 select @Element += @nextchar continue end end if @Check = -1 begin goto 38EndLabel end update @result set p1 = substring(Morphem, 1, PATINDEX(N'%..%', Morphem)-1) , p2 = substring(Morphem, PATINDEX(N'%..%', Morphem)+2, 256) 39 where morphemtype = 'Morphem' and morphemsubtype is null and PATINDEX(N'%..%', Morphem) > 0 and CurrentLevel = @CurrentLevel update @result set p1 = substring40(Morphem, 1, PATINDEX(N'%.%', Morphem)-1) , p2 = substring(Morphem, PATINDEX(N'%.%', Morphem)+1, 256) where morphemtype = 'Morphem' and morphemsubtype41 is null and p1 is null and PATINDEX(N'%.%', Morphem) > 0 and CurrentLevel = @CurrentLevel update @result set MorphemType = 'Literal' , MorphemSubType42 = 'Float' , p1 = null ,p2 = null where morphemtype = 'Morphem' and morphemSubtype is null and isnumeric(p1) = 1 and isnumeric(p2) = 1 and CurrentLevel43 = @CurrentLevel update @result set morphemType = 'Literal' , MorphemSubtype = 'Int' where morphemtype = 'Morphem' and isnumeric(morphem) = 1 and morphemSubtype44 is null and CurrentLevel = @CurrentLevel update @result set morphemType = 'Literal' , MorphemSubtype = 'binary' where morphemtype = 'Morphem' and morphem45 like '0' + 'x%' and morphemSubtype is null and CurrentLevel = @CurrentLevel update @result set morphemType = 'Variable' , MorphemSubtype = '' where morphemtype46 = 'Morphem' and left(Morphem, 1) = '@' and substring(Morphem, 2,1) <> '@' and CurrentLevel = @CurrentLevel if @Check = 0 begin goto endLabel end update47 @result set Morphemtype = 'KeyWord' , MorphemSubtype = x.KeywordArea from @Result r join dbo.QBM_FTSQLKeywords(1) x on r.MorphemType = 'Morphem' and r.MorphemSubtype48 is null and r.Morphem = x.Keyword and x.KeywordArea = 'T-SQL' where r.CurrentLevel = @CurrentLevel update @result set Morphemtype = case when x.system_type_id49 = x.user_type_id then 'SystemObject' else 'SchemaObject' end , MorphemSubtype = 'Type' from @Result r join sys.types x on r.MorphemType = 'Morphem' and50 r.MorphemSubtype is null and (r.Morphem = x.name or r.p2 = x.name ) where r.CurrentLevel = @CurrentLevel if @Check = 2 begin goto EndLabel end update 51@result set Morphemtype = 'SchemaObject' , MorphemSubtype = 'Table' from @Result r join sys.tables x with (readpast) on r.MorphemType = 'Morphem' and r.MorphemSubtype52 is null and (r.Morphem = x.name or r.p2 = x.name ) where r.CurrentLevel = @CurrentLevel update @result set Morphemtype = 'SchemaObject' , MorphemSubtype53 = 'Table' from @Result r where r.MorphemType = 'Morphem' and r.MorphemSubtype is null and (r.Morphem like '#%' or r.p2 like '#%' ) and r.CurrentLevel 54= @CurrentLevel update @result set Morphemtype = 'SchemaObject' , MorphemSubtype = 'View' from @Result r join sys.views x with (readpast) on r.MorphemType55 = 'Morphem' and r.MorphemSubtype is null and (r.Morphem = x.name or r.p2 = x.name ) where r.CurrentLevel = @CurrentLevel update @result set Morphemtype56 = 'SchemaObject' , MorphemSubtype = 'TableFunction' from @Result r join sys.objects x with (readpast) on r.MorphemType = 'Morphem' and r.MorphemSubtype57 is null and (r.Morphem = x.name or r.p2 = x.name ) where x.type in ('IF', 'TF') and r.CurrentLevel = @CurrentLevel update @result set Morphemtype = 'SchemaObject'58 , MorphemSubtype = 'Function' from @Result r join sys.objects x with (readpast) on r.MorphemType = 'Morphem' and r.MorphemSubtype is null and (r.Morphem59 = x.name or r.p2 = x.name ) where x.type in ('FN') and r.CurrentLevel = @CurrentLevel update @result set Morphemtype = 'SchemaObject' , MorphemSubtype60 = 'Procedure' from @Result r join sys.objects x with (readpast) on r.MorphemType = 'Morphem' and r.MorphemSubtype is null and (r.Morphem = x.name or r.p261 = x.name ) where x.type in ('P') and r.CurrentLevel = @CurrentLevel update @result set morphemtype = 'SystemObject' , MorphemSubType = 'Table' where 62p1 in (select name from sys.schemas with (readpast) ) and p1 <> 'dbo' and p2 > ' ' and CurrentLevel = @CurrentLevel and p2 not like 'sp[_]%' and morphemtype63 = 'Morphem' and morphemsubtype is null update @result set morphemtype = 'SystemObject' , MorphemSubType = 'Table' where exists (select top 1 1 from sys.databases64 sd where p1 = sd.name collate database_default ) and p2 > ' ' and CurrentLevel = @CurrentLevel and p2 not like 'sp[_]%' and morphemtype = 'Morphem' 65and morphemsubtype is null update @result set MorphemSubtype = 'Table' where MorphemType = 'Variable' and morphem in (select r1.Morphem from @Result r166 join @Result r2 on r1.SortOrder + 1 = r2.SortOrder and r1.Morphemtype = 'Variable' and r2.Morphem = 'Table' join @Result r3 on r2.SortOrder + 1 = r3.SortOrder67 and r3.Morphem = '(' ) and CurrentLevel = @CurrentLevel update @result set Morphemtype = 'ProgramElement' , MorphemSubtype = 'Label' from @Result r join68 (select * from @result where CurrentLevel = @CurrentLevel) as r2 on r.SortOrder +1 = r2.SortOrder where r.MorphemType = 'Morphem' and r.MorphemSubtype69 is null and r2.Morphem = ':' and r.CurrentLevel = @CurrentLevel update @result set Morphemtype = 'ProgramElement' , MorphemSubtype = 'Label' from @Result70 r2 join (select * from @result where CurrentLevel = @CurrentLevel) as r1 on r1.SortOrder +1 = r2.SortOrder where r2.MorphemType = 'Morphem' and r2.MorphemSubtype71 is null and r1.Morphem = 'Goto' and r2.CurrentLevel = @CurrentLevel update @result set Morphemtype = r1.Morphemtype , MorphemSubtype = 'TableAlias1'72 from @Result r2 join (select * from @result where CurrentLevel = @CurrentLevel) as r1 on r1.morphemSubtype in ('Table', 'view', 'TableFunction') and r1.SortOrder73 + 1 = r2.SortOrder where r2.MorphemType = 'Morphem' and r2.MorphemSubtype is null and len(r2.morphem) <= @MaxlenAlias and r2.p1 is null and r2.CurrentLevel74 = @CurrentLevel update @result set Morphemtype = r1.Morphemtype , MorphemSubtype = 'TableAlias2' from @Result r3 join (select * from @result where CurrentLevel75 = @CurrentLevel) as r1 on r1.morphemSubtype in ('Table', 'view', 'TableFunction') join (select * from @result where CurrentLevel = @CurrentLevel) as r276 on r2.Morphem = 'AS' and r1.SortOrder + 1 = r2.SortOrder and r2.SortOrder +1 = r3.SortOrder where r3.MorphemType = 'Morphem' and r3.MorphemSubtype is 77null and len(r3.morphem) <= @MaxlenAlias and r3.p1 is null and r3.CurrentLevel = @CurrentLevel update @result set Morphemtype = r1.Morphemtype , MorphemSubtype78 = 'TableAlias3' from @Result r2 join (select * from @result where CurrentLevel = @CurrentLevel) r1 on r1.morphem = ')' and r1.SortOrder + 1 = r2.SortOrder79 where r2.MorphemType = 'Morphem' and r2.MorphemSubtype is null and len(r2.morphem) <= @MaxlenAlias and r2.p1 is null and r2.CurrentLevel = @CurrentLevel80 and r2.morphem <> 'returns' update @result set Morphemtype = r1.Morphemtype , MorphemSubtype = 'TableAlias4' from @Result r3 join (select * from @result81 where CurrentLevel = @CurrentLevel) as r1 on r1.morphem = ')' join (select * from @result where CurrentLevel = @CurrentLevel) as r2 on r2.Morphem = 'AS'82 and r1.SortOrder + 1 = r2.SortOrder and r2.SortOrder +1 = r3.SortOrder where r3.MorphemType = 'Morphem' and r3.MorphemSubtype is null and len(r3.morphem83) <= @MaxlenAlias and r3.p1 is null and r3.CurrentLevel = @CurrentLevel update @Result set Morphemtype = b.Morphemtype , MorphemSubtype = 'TableAlias5'84 from @Result a join (select * from @result where CurrentLevel = @CurrentLevel) as b on b.MorphemSubtype like 'TableAlias_' and b.Morphem = a.Morphem where85 a.MorphemType = 'Morphem' and a.MorphemSubtype is null and not exists (select top 1 1 from @Result c where c.Morphem = a.Morphem and (c.MorphemSubtype86 not like 'TableAlias_' ) ) and a.CurrentLevel = @CurrentLevel update @result set Morphemtype = te.Morphemtype , MorphemSubtype = 'Column' from @Result87 r join sys.columns x with (readpast) on r.MorphemType = 'Morphem' and r.MorphemSubtype is null and (r.Morphem = x.name or r.p2 = x.name ) join sys.objects88 t with (readpast) on x.Object_id = t.Object_id join (select * from @result where CurrentLevel = @CurrentLevel) as te on te.MorphemSubtype in ('table',89 'View', 'TableFunction') and ( te.morphem = t.name or te.p2 = t.name ) where r.CurrentLevel = @CurrentLevel update @result set Morphemtype = ta.Morphemtype90 , MorphemSubtype = 'Column' from @Result r join (select * from @result where CurrentLevel = @CurrentLevel) as ta on ta.MorphemSubtype like ('tableAlias_'91) and r.p1 = ta.morphem where r.CurrentLevel = @CurrentLevel update @Result set Morphemtype = r1.Morphemtype , MorphemSubtype = 'ColumnAlias' from @Result92 r3 join (select * from @result where CurrentLevel = @CurrentLevel) as r2 on r2.SortOrder +1 = r3.SortOrder join (select * from @result where CurrentLevel93 = @CurrentLevel) as r1 on r1.SortOrder +1 = r2.SortOrder where r1.MorphemSubtype = 'Column' and r2.Morphem = 'as' and r3.MorphemType = 'Morphem' and r3.MorphemSubtype94 is null and r3.CurrentLevel = @CurrentLevel update @Result set Morphemtype = r1.Morphemtype , MorphemSubtype = 'ColumnAlias' from @Result r2 join (select95 * from @result where CurrentLevel = @CurrentLevel) as r1 on r1.SortOrder +1 = r1.SortOrder where r1.MorphemSubtype = 'Column' and r2.MorphemType = 'Morphem'96 and r2.MorphemSubtype is null and r2.CurrentLevel = @CurrentLevel update @result set Morphemtype = 'ProgramElement' , MorphemSubtype = 'Cur' + 'sor' from97 @Result r where r.MorphemType = 'Morphem' and r.MorphemSubtype is null and exists (select top 1 1 from @Result r1 join @result r2 on r1.SortOrder +1 =98 r2.SortOrder and r1.CurrentLevel = @CurrentLevel and r2.CurrentLevel = @CurrentLevel where r2.Morphem = r.Morphem and r2.MorphemType = 'Morphem' and r2.MorphemSubType99 is null and r1.MorphemType = 'Keyword' and r1.Morphem = 'DECLARE' ) and exists (select top 1 1 from @Result r1 join @result r2 on r1.SortOrder +1 = r2.SortOrder100 and r1.CurrentLevel = @CurrentLevel and r2.CurrentLevel = @CurrentLevel where r2.Morphem = r.Morphem and r2.MorphemType = 'Morphem' and r2.MorphemSubType101 is null and r1.MorphemType = 'Keyword' and r1.Morphem = 'OPEN' ) and exists (select top 1 1 from @Result r1 join @result r2 on r1.SortOrder +1 = r2.SortOrder102 and r1.CurrentLevel = @CurrentLevel and r2.CurrentLevel = @CurrentLevel where r2.Morphem = r.Morphem and r2.MorphemType = 'Morphem' and r2.MorphemSubType103 is null and r1.MorphemType = 'Keyword' and r1.Morphem = 'FROM' ) and exists (select top 1 1 from @Result r1 join @result r2 on r1.SortOrder +1 = r2.SortOrder104 and r1.CurrentLevel = @CurrentLevel and r2.CurrentLevel = @CurrentLevel where r2.Morphem = r.Morphem and r2.MorphemType = 'Morphem' and r2.MorphemSubType105 is null and r1.MorphemType = 'Keyword' and r1.Morphem = 'Close' ) and exists (select top 1 1 from @Result r1 join @result r2 on r1.SortOrder +1 = r2.SortOrder106 and r1.CurrentLevel = @CurrentLevel and r2.CurrentLevel = @CurrentLevel where r2.Morphem = r.Morphem and r2.MorphemType = 'Morphem' and r2.MorphemSubType107 is null and r1.MorphemType = 'Keyword' and r1.Morphem = 'deallocate' ) and r.CurrentLevel = @CurrentLevel update @result set Morphemtype = 'KeyWord' 108, MorphemSubtype = x.KeywordArea from @Result r join dbo.QBM_FTSQLKeywords(1) x on r.MorphemType = 'Morphem' and r.MorphemSubtype is null and r.Morphem109 = x.Keyword where r.CurrentLevel = @CurrentLevel update @result set isConflicted = 1 from @Result r join dbo.QBM_FTSQLKeywords(1) x on r.MorphemType <>110 'KeyWord' and r.Morphem = x.Keyword where r.Morphemtype not in ('SystemObject') and r.CurrentLevel = @CurrentLevel endLabel: insert into @erg( SortOrder111 , MorphemType , MorphemSubType , isConflicted , CurrentLevel , Morphem , p1 , p2 , LenMorphem , TargetLine ) select SortOrder , MorphemType , MorphemSubType112 , isConflicted , CurrentLevel , Morphem , p1 , p2 , LenMorphem , TargetLine from @result return end 113