Символ отброшен в выражении BIND - PullRequest
1 голос
/ 02 апреля 2020

Я столкнулся с интересной ситуацией при обновлении устаревшего кода с CF10 до CF2018. Запрос сегментируется на куски строки на веб-странице и передается с помощью оператора CFGRID BIND в запрос в файле .cf c.

.CF C обрабатывает несколько веб-страниц для CFGRID. Различные веб-страницы предоставляют поля ввода для фильтрации данных в сетке, такие как поиск, даты и т. Д. c.

В некоторых запросах используется сокращенная запись JOIN (+) в операторе WHERE.

Моя проблема в том, что где-то между CFGRID и .CF C, "+" сбрасывается и заменяется пробелом.

DisplayHistoryReceived.cfm

Conditions = "t.CPNId = pn.CPNId(+) 
    AND t.PartId = p.PartId 
    AND t.POId = po.POId(+) 
    AND t.LocationId = l.LocationId 
    AND l.BuildingId = b.BuildingId 
    AND t.StatusCodeId = sc.StatusCodeId(+) 
    AND t.TransTypesId = 1 
    AND po.OwnerId = o.OwnerId"

DisplayGrid- HTML .cfm

<CFGRID
    BIND="cfc:#application.area#.Components.Global.DrillDown.SearchGrid({dSource},{queryFieldNames},
{tableNames},{Conditions},{SearchField@change},SearchInput@keyup},{BooleanSelect@change},{BoolField},
{DFilters},DFilterLine1},{DFilterLine2},{DFilterLine3},{DateRange},{DateAfter},{DateBefore},{OrderBy},
{GroupBy},{pSize},{cfgridsortcolumn},{cfgridsortdirection},{cfgridpage},{cfgridpagesize})"

DrillDown.cf c

<CFQUERY NAME="grd" DATASOURCE="#dSource#">
    SELECT DISTINCT #Fields#
    FROM #PreserveSingleQuotes(Tables)#
    WHERE #PreserveSingleQuotes(Conditions)#
    <!--- Used to filter based on a TEXT search --->
    <cfif '#sInput#' neq ''>
        AND #sField# like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#sInput#%"/>
    </cfif>

[следуют другие инструкции CFIF]

Сообщение об ошибке, которое я получаю это: [Macromedia] [Oracle JDB C Драйвер] [Oracle] ORA-00904: «S C». «STATUSCODEID»: неверный идентификатор

Но эта выдержка из сообщения об ошибке приводит меня думать, что что-то могло произойти в CF2018 вместо этого:

WHERE t.CPNId = pn.CPNId( ) 
    AND t.PartId = p.PartId 
    AND t.POId = po.POId( ) 
    AND t.LocationId = l.LocationId 
    AND l.BuildingId = b.BuildingId 
    AND t.StatusCodeId = sc.StatusCodeId( ) 
    AND t.TransTypesId = 1 
    AND po.OwnerId = o.OwnerId

Какие-нибудь идеи, кроме переписывания всех запросов стандартными JOINS? Есть несколько страниц, разбросанных по всему сайту, которые используют это.

...