Задача 102.118332

Задача :102.118332

Краткое описание :
При некоторых условиях не выполняется цикл _loop на Postgres, а должен.
Описание :
Логические таблицы
Что измененно :


PostgreSQL

----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
При некоторых условиях не выполняется цикл _loop на Postgres, а должен.
Контрольный пример во вложении. В контрольном примере цикл _loop должен быть выполнен хотя бы один раз. А в реальности на Postgres не выполняется ни разу. На Oracle все работает нормально. Анализ протокола выполнения оператора loop, полученного с помощью протокольной версии драйвера pg90drv.dll показал, что где-то перепутались параметры запроса (параметр P1=12 используется с полем T2."FTIPMODE", а P2=208 - с полем T0."FCSELECTION", а должно быть наоборот). В результате для loop выборка неудачна:
-------------------------------------------------------------------------------
Cache::AllocateNewRecord
Cache::using deleted
Cache::Append
--GetFirst Ok
CheckPosition SELPICKS 268832016
--CheckPosition Ok
GetSpecialDriverFunction
MarkRequiredTables 1
SetRowsetSize 65535
GetFirst SELPICKS 268832016
In SubSelect::O P T I M I Z A T I O N
loop operation
SELECT T0."ROWID",T0."SYS#UL",T0."FCSELECTION",T0."FCREC",T0."FNREC",T0."FATL_LASTDATE",T0."FATL_LASTTIME",T0."FATL_LASTUSER",T0."FATL_ORIGINOFFICE",T0."FATL_OWNER",T0."FATL_BRANCH",T0."FPICKKOL",T0."FPICKNUM",T1."ROWID",T1."SYS#UL",T1."FNREC",T1."FCOWNER",T1."FATL_LASTDATE",T1."FATL_LASTTIME",T1."FATL_LASTUSER",T1."FATL_ORIGINOFFICE",T1."FATL_OWNER",T1."FATL_BRANCH",T1."FLASTUSER",T1."FLASTTIME",T1."FLASTDATE",T1."FFILIALNO",T1."FCMNSPADD",T1."FTYPEHIER",T1."FTYPEOWN",T1."FRESCOMP[1]",T1."FRESCOMP[2]",T1."FRESCOMP[3]",T1."FRESCOMP[4]",T1."FRESCOMP[5]",T1."FRESCOMP[6]",T1."FRESCOMP[7]",T1."FRESCOMP[8]",T1."FRESCOMP[9]",T1."FRESCOMP[10]",T1."FRESWORD[1]",T1."FRESWORD[2]",T1."FRESWORD[3]",T1."FRESWORD[4]",T1."FRESWORD[5]",T1."FRESWORD[6]",T1."FRESWORD[7]",T1."FRESWORD[8]",T1."FRESWORD[9]",T1."FRESWORD[10]",T1."FRESLONG[1]",T1."FRESLONG[2]",T1."FRESLONG[3]",T1."FRESLONG[4]",T1."FRESLONG[5]",T1."FRESDATE[1]",T1."FRESDATE[2]",T1."FRESDATE[3]",T1."FRESDATE[4]",T1."FRESDATE[5]",T1."FWKODGR[1]",T1."FWKODGR[2]",T1."FWKODGR[3]",T1."FWKODGR[4]",T1."FWKODGR[5]",T1."FWKODGR[6]",T1."FWKODGR[7]",T1."FWKODGR[8]",T1."FWKODGR[9]",T1."FWKODGR[10]",T1."FCROLEAN[1]",T1."FCROLEAN[2]",T1."FCROLEAN[3]",T1."FCROLEAN[4]",T1."FCROLEAN[5]",T1."FCROLEAN[6]",T1."FCROLEAN[7]",T1."FCROLEAN[8]",T1."FCROLEAN[9]",T1."FCROLEAN[10]",T1."FCANVAL[1]",T1."FCANVAL[2]",T1."FCANVAL[3]",T1."FCANVAL[4]",T1."FCANVAL[5]",T1."FCANVAL[6]",T1."FCANVAL[7]",T1."FCANVAL[8]",T1."FCANVAL[9]",T1."FCANVAL[10]",T1."FCROLEAN1",T1."FWKODGR1",T1."FCANVAL1",T1."FCROLEAN2",T1."FWKODGR2",T1."FCANVAL2",T1."FCROLEAN3",T1."FWKODGR3",T1."FCANVAL3",T1."FCROLEAN4",T1."FWKODGR4",T1."FCANVAL4",T1."FCROLEAN5",T1."FWKODGR5",T1."FCANVAL5",T2."ROWID",T2."SYS#UL",T2."FTIPMODE",T2."FNREC",T2."FATL_LASTDATE",T2."FATL_LASTTIME",T2."FATL_LASTUSER",T2."FATL_ORIGINOFFICE",T2."FATL_OWNER",T2."FATL_BRANCH",T2."FCPERSONS",T2."FFIO",T2."FGALDEP",T2."FTABNMB",T2."FSTRTABN" FROM "TEST1"."SELPICKS" T0 LEFT OUTER JOIN "TEST1"."MNSPADD" T1 ON T0."FCREC" =T1."FNREC" LEFT OUTER JOIN "TEST1"."PERSPOD" T2 ON T1."FCOWNER" =T2."FNREC" AND ( T2."FTIPMODE"= ? ) WHERE ( T0."FCSELECTION"= ? ) ORDER BY T0."FCSELECTION",T0."FPICKNUM",T0."ROWID"
Parameters : 2
P1 BigInt(8) : 12
P2 Word(2) : 208
-------------------------------------------------------------------------------
Fetch:SELECT T0."ROWID",T0."SYS#UL",T0."FCSELECTION",T0."FCREC",T0."FNREC",T0."FATL_LASTDATE",T0."FATL_LASTTIME",T0."FATL_LASTUSER",T0."FATL_ORIGINOFFICE",T0."FATL_OWNER",T0."FATL_BRANCH",T0."FPICKKOL",T0."FPICKNUM",T1."ROWID",T1."SYS#UL",T1."FNREC",T1."FCOWNER",T1."FATL_LASTDATE",T1."FATL_LASTTIME",T1."FATL_LASTUSER",T1."FATL_ORIGINOFFICE",T1."FATL_OWNER",T1."FATL_BRANCH",T1."FLASTUSER",T1."FLASTTIME",T1."FLASTDATE",T1."FFILIALNO",T1."FCMNSPADD",T1."FTYPEHIER",T1."FTYPEOWN",T1."FRESCOMP[1]",T1."FRESCOMP[2]",T1."FRESCOMP[3]",T1."FRESCOMP[4]",T1."FRESCOMP[5]",T1."FRESCOMP[6]",T1."FRESCOMP[7]",T1."FRESCOMP[8]",T1."FRESCOMP[9]",T1."FRESCOMP[10]",T1."FRESWORD[1]",T1."FRESWORD[2]",T1."FRESWORD[3]",T1."FRESWORD[4]",T1."FRESWORD[5]",T1."FRESWORD[6]",T1."FRESWORD[7]",T1."FRESWORD[8]",T1."FRESWORD[9]",T1."FRESWORD[10]",T1."FRESLONG[1]",T1."FRESLONG[2]",T1."FRESLONG[3]",T1."FRESLONG[4]",T1."FRESLONG[5]",T1."FRESDATE[1]",T1."FRESDATE[2]",T1."FRESDATE[3]",T1."FRESDATE[4]",T1."FRESDATE[5]",T1."FWKODGR[1]",T1."FWKODGR[2]",T1."FWKODGR[3]",T1."FWKODGR[4]",T1."FWKODGR[5]",T1."FWKODGR[6]",T1."FWKODGR[7]",T1."FWKODGR[8]",T1."FWKODGR[9]",T1."FWKODGR[10]",T1."FCROLEAN[1]",T1."FCROLEAN[2]",T1."FCROLEAN[3]",T1."FCROLEAN[4]",T1."FCROLEAN[5]",T1."FCROLEAN[6]",T1."FCROLEAN[7]",T1."FCROLEAN[8]",T1."FCROLEAN[9]",T1."FCROLEAN[10]",T1."FCANVAL[1]",T1."FCANVAL[2]",T1."FCANVAL[3]",T1."FCANVAL[4]",T1."FCANVAL[5]",T1."FCANVAL[6]",T1."FCANVAL[7]",T1."FCANVAL[8]",T1."FCANVAL[9]",T1."FCANVAL[10]",T1."FCROLEAN1",T1."FWKODGR1",T1."FCANVAL1",T1."FCROLEAN2",T1."FWKODGR2",T1."FCANVAL2",T1."FCROLEAN3",T1."FWKODGR3",T1."FCANVAL3",T1."FCROLEAN4",T1."FWKODGR4",T1."FCANVAL4",T1."FCROLEAN5",T1."FWKODGR5",T1."FCANVAL5",T2."ROWID",T2."SYS#UL",T2."FTIPMODE",T2."FNREC",T2."FATL_LASTDATE",T2."FATL_LASTTIME",T2."FATL_LASTUSER",T2."FATL_ORIGINOFFICE",T2."FATL_OWNER",T2."FATL_BRANCH",T2."FCPERSONS",T2."FFIO",T2."FGALDEP",T2."FTABNMB",T2."FSTRTABN" FROM "TEST1"."SELPICKS" T0 LEFT OUTER JOIN "TEST1"."MNSPADD" T1 ON T0."FCREC" =T1."FNREC" LEFT OUTER JOIN "TEST1"."PERSPOD" T2 ON T1."FCOWNER" =T2."FNREC" AND ( T2."FTIPMODE"= ? ) WHERE ( T0."FCSELECTION"= ? ) ORDER BY T0."FCSELECTION",T0."FPICKNUM",T0."ROWID"
ERRORCODE = 02000
--GetFirst 4
SetRowsetSize 1
MarkRequiredTables 0

Как измененно :

Доработан алгоритм построение select запроса для _loop для ситуации, когда есть подцепка в логической таблице через константу.

Название продукта Название компонента Тип Последняя версия Дата выхода
pg90drvPG90DRVDLL5.5.12.0