Manitou Core - SQL Query - QuickSearch Repair Script

This script is used to repair quick search not populating entries on an active Manitou System. Run Query against Manitou database.

OK to run while Manitou is running.

USE MANITOU;
GO
IF OBJECT_ID(N'QUICKSEARCH',N'TF') IS NOT NULL DROP FUNCTION QUICKSEARCH;
GO

CREATE FUNCTION dbo.QUICKSEARCH (@SEARCH NVARCHAR(50), 
                                @CONTTYPE INT, 
                                @SERIALNO INT, 
                                @INLIST NVARCHAR(MAX), 
                                @PAGE INT, 
                                @ROWS INT)
        RETURNS @SEARCHRESULTS TABLE (SEARCHKEY INT NOT NULL, 
                                        SERIALNO INT NOT NULL, 
                                        RESULT1 NVARCHAR(50) NULL, 
                                        RESULT2 NVARCHAR(50) NULL, 
                                        TOTAL INT NOT NULL)
        WITH ENCRYPTION AS 
        BEGIN
                DECLARE @CNT AS INT;
                DECLARE @ALL TABLE (SEARCHKEY INT NOT NULL, 
                                        SERIALNO INT NOT NULL, 
                                        VAL1 NVARCHAR(50) NULL, 
                                        VAL2 NVARCHAR(50) NULL);

                SET @SEARCH=N'%'+@SEARCH+N'%';

                INSERT INTO @ALL (SEARCHKEY,SERIALNO) 
                SELECT 0x1,SERIALNO 
                FROM CONTACT 
                WHERE CONTTYPE=1 AND FULLNAME LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO) 
                SELECT 0x2,SERIALNO 
                FROM [ADDRESS] 
                WHERE CONTTYPE=1 AND ADDR1 LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO,VAL2) 
                SELECT 0x4,SERIALNO,PASSWD 
                FROM CUSTPW 
                WHERE PASSWD LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO,VAL2) 
                SELECT 0x8,SERIALNO,CONTPOINT 
                FROM CONTPOINT 
                WHERE CONTTYPE=1 AND FILEAS LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO,VAL1,VAL2) 
                SELECT 0x10,L.SERIALNO,ISNULL(T.FULLNAME,N''),L.PASSWD 
                FROM CONTLIST L 
                JOIN CONTACT T ON L.REFCONTTYPE=T.CONTTYPE AND L.REFSERIALNO=T.SERIALNO 
                WHERE L.CONTTYPE=1 AND L.REFCONTTYPE=100 AND PASSWD LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO,VAL1,VAL2) 
                SELECT 0x20,L.SERIALNO,ISNULL(T.FULLNAME,N''),P.CONTPOINT 
                FROM CONTLIST L 
                JOIN CONTPOINT P ON L.REFCONTTYPE=100 AND L.REFCONTTYPE=P.CONTTYPE AND L.REFSERIALNO=P.SERIALNO 
                JOIN CONTACT T ON L.REFCONTTYPE=T.CONTTYPE AND L.REFSERIALNO=T.SERIALNO 
                WHERE L.CONTTYPE = 1 AND P.FILEAS LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO,VAL1) 
                SELECT 0x40,L.SERIALNO,T.FULLNAME 
                FROM CONTLIST L 
                JOIN CONTACT T ON L.REFCONTTYPE=100 AND L.REFCONTTYPE=T.CONTTYPE AND L.REFSERIALNO=T.SERIALNO 
                WHERE L.CONTTYPE = 1 AND T.FULLNAME LIKE @SEARCH;

                INSERT INTO @ALL (SEARCHKEY,SERIALNO) 
                SELECT 0x80,SERIALNO 
                FROM CUSTOMER 
                WHERE CONTID LIKE @SEARCH;

                IF @CONTTYPE = 1
                                DELETE FROM @ALL WHERE [@ALL].SERIALNO <> @SERIALNO;
                ELSE
                                BEGIN
                        IF @CONTTYPE = 2
                                        BEGIN
                                IF LEN(ISNULL(@INLIST, N'')) = 0
                                                DELETE @ALL FROM @ALL JOIN CUSTOMER ON CUSTOMER.SERIALNO = [@ALL].SERIALNO WHERE CUSTOMER.INSTNO <> @SERIALNO;
                                ELSE
                                                BEGIN
                                                DECLARE @IN TABLE (SERIALNO INT NOT NULL);
                                                DECLARE @I INT;
                                                DECLARE @NO INT;
                                                AGAIN:
                                                SET @I = CHARINDEX(N',', @INLIST);
                                                IF @I > 0
                                                        BEGIN
                                                        SET @NO = CAST(LEFT(@INLIST, @I-1) AS INT);
                                                        SET @INLIST = RIGHT(@INLIST, LEN(@INLIST)-@I);
                                                        INSERT INTO @IN VALUES (@NO);
                                                        GOTO AGAIN;
                                                        END;
                                                SET @NO = CAST(@INLIST AS INT);
                                                INSERT INTO @IN VALUES (@NO);
                                                DELETE @ALL FROM @ALL JOIN CUSTOMER ON CUSTOMER.SERIALNO = [@ALL].SERIALNO WHERE CUSTOMER.INSTNO NOT IN ( SELECT [@IN].SERIALNO FROM @IN );
                                                END;
                                        END;
                        ELSE
                                        BEGIN
                                IF @CONTTYPE = 3
                                                DELETE @ALL FROM @ALL JOIN CUSTOMER ON CUSTOMER.SERIALNO = [@ALL].SERIALNO WHERE CUSTOMER.BRANCHNO <> @SERIALNO;
                                ELSE
                                                BEGIN
                                        IF @CONTTYPE = 4
                                                        DELETE FROM @ALL WHERE NOT EXISTS (SELECT * FROM CONTLIST WHERE CONTLIST.CONTTYPE = 1 AND CONTLIST.SERIALNO = [@ALL].SERIALNO);
                                                END;
                                        END;
                                END;

                SET @CNT = (SELECT COUNT (*) FROM @ALL);

                INSERT INTO @SEARCHRESULTS (SEARCHKEY,SERIALNO,RESULT1,RESULT2,TOTAL) 
                SELECT SEARCHKEY,SERIALNO,VAL1,VAL2,@CNT 
                FROM (SELECT ROW_NUMBER () OVER (ORDER BY SEARCHKEY, VAL1, VAL2) AS ROWNUM,* FROM @ALL) AS O 
                WHERE ROWNUM BETWEEN (@PAGE*@ROWS)+1 AND (@PAGE*@ROWS)+@ROWS;
                RETURN;
        END;
GO

IF EXISTS (SELECT OPTINT FROM MOPTIONS WHERE OPTIONNO = 121) 
        BEGIN
                UPDATE MOPTIONS SET LASTUPD = CURRENT_TIMESTAMP, OPTIONTXT = 'QUICKSEARCHVER', DATATYPE = 1, OPTINT = 2 WHERE OPTIONNO = 121;
        END;
ELSE
        BEGIN
                INSERT INTO MOPTIONS (LASTUPD, CREDATE, OPTIONNO, OPTIONTXT, DATATYPE, OPTBOOL, OPTINT, OPTCHAR, OPTDATE) 
                        VALUES(CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 121, 'QUICKSEARCHVER', 1, 0, 2, NULL, NULL);
        END;
GO

Was this article helpful?
Thank you for your feedback!
User Icon

Thank you! Your comment has been submitted for approval.