[JBoss JIRA] (TEIIDSB-147) Caching and materialization changes for JDG / OpenShift
by Steven Hawkins (Jira)
[ https://issues.jboss.org/browse/TEIIDSB-147?page=com.atlassian.jira.plugi... ]
Steven Hawkins updated TEIIDSB-147:
-----------------------------------
Description:
Started this as a higher level issue in Teiid Spring Boot rather than core Teiid since the work won't align well to Teiid 13.1, but some things may need addressed there as well.
Things break down roughly into:
* Single-pod support
** Define the expectations for how we'll be configured to hit a JDG instance - will it be a user exercise to create if it doesn't exist, will we need to create, will the be a crd strategy for creation, and will it be multi-tenet? There is also the issue / assumption of cache sharing based upon vdb name - is that sufficient for now?
** Result set caching needs to directly write batches / results to JDG rather than relying upon on demand replication.
** validate external materialization to JDG likely using a transactional upsert strategy to avoid issues like TEIID-5436
* Multi-pod support
** everything from single-pod support
** requires replacing the logic that detect failed materialization loads
** internal materialization replacement needs to based upon something more like external materialization, but that can be seen as a next step that is turnkey internal materialization to JDG (little to no user setup required)
was:
Started this as a higher level issue in Teiid Spring Boot rather than core Teiid since the work won't align well to Teiid 13.1, but some things may need addressed there as well.
Things break down roughly into:
* Single-pod support
- Define the expectations for how we'll be configured to hit a JDG instance - will it be a user exercise to create if it doesn't exist, will we need to create, will the be a crd strategy for creation, and will it be multi-tenet? There is also the issue / assumption of cache sharing based upon vdb name - is that sufficient for now?
- Result set caching needs to directly write batches / results to JDG rather than relying upon on demand replication.
- validate external materialization to JDG likely using a transactional upsert strategy to avoid issues like TEIID-5436
* Multi-pod support
- everything from single-pod support
- requires replacing the logic that detect failed materialization loads
- internal materialization replacement needs to based upon something more like external materialization, but that can be seen as a next step that is turnkey internal materialization to JDG (little to no user setup required)
> Caching and materialization changes for JDG / OpenShift
> -------------------------------------------------------
>
> Key: TEIIDSB-147
> URL: https://issues.jboss.org/browse/TEIIDSB-147
> Project: Teiid Spring Boot
> Issue Type: Enhancement
> Components: core, OpenShift
> Reporter: Steven Hawkins
> Assignee: Ramesh Reddy
> Priority: Major
> Fix For: 1.3.0
>
>
> Started this as a higher level issue in Teiid Spring Boot rather than core Teiid since the work won't align well to Teiid 13.1, but some things may need addressed there as well.
> Things break down roughly into:
> * Single-pod support
> ** Define the expectations for how we'll be configured to hit a JDG instance - will it be a user exercise to create if it doesn't exist, will we need to create, will the be a crd strategy for creation, and will it be multi-tenet? There is also the issue / assumption of cache sharing based upon vdb name - is that sufficient for now?
> ** Result set caching needs to directly write batches / results to JDG rather than relying upon on demand replication.
> ** validate external materialization to JDG likely using a transactional upsert strategy to avoid issues like TEIID-5436
> * Multi-pod support
> ** everything from single-pod support
> ** requires replacing the logic that detect failed materialization loads
> ** internal materialization replacement needs to based upon something more like external materialization, but that can be seen as a next step that is turnkey internal materialization to JDG (little to no user setup required)
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5862) TEIID-5314 does not account for env key name restrictions
by Steven Hawkins (Jira)
Steven Hawkins created TEIID-5862:
-------------------------------------
Summary: TEIID-5314 does not account for env key name restrictions
Key: TEIID-5862
URL: https://issues.jboss.org/browse/TEIID-5862
Project: Teiid
Issue Type: Quality Risk
Components: Common
Reporter: Steven Hawkins
Assignee: Steven Hawkins
Fix For: 13.0
The logic introduced in TEIID-5314 assumes that env variables can be referenced with existing teiid keys. This was supposed to work with thorntail, but I think that it would have needed to either preprocess the env and populate additional system properties, or otherwise manipulate the env keys. In any event the logic is not sound in general.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5858) Orcale collation issue with Teiid 9.1.1
by Steven Hawkins (Jira)
[ https://issues.jboss.org/browse/TEIID-5858?page=com.atlassian.jira.plugin... ]
Steven Hawkins commented on TEIID-5858:
---------------------------------------
Setting the java system property should be sufficient. In later versions you can also use an environment variable.
You can also use EmbeddedConfiguration.getProperties to see/set property values.
> Orcale collation issue with Teiid 9.1.1
> ---------------------------------------
>
> Key: TEIID-5858
> URL: https://issues.jboss.org/browse/TEIID-5858
> Project: Teiid
> Issue Type: Bug
> Components: JDBC Connector
> Affects Versions: 9.1.1
> Reporter: Ivan Chan
> Assignee: Steven Hawkins
> Priority: Major
>
> One of customers run into this following error:
> org.teiid.core.TeiidComponentException: TEIID31202 Detected that an already sorted set of values was not in the expected order (typically UTF-16 / UCS-2). Please check the translator settings to ensure character columns used for joining are sorted as expected.
> And they were trying to join multiple oracle databases together. And they are running Teiid 9.1.1
> It seems like I need to change the collation. And I tried to change those values, but it didn't seem to do anything.
> org.teiid.requireTeiidCollation
> org.teiid.collationLocale
> org.teiid.assumeMatchingCollation
> Here is how we create the tables in Oracle:
> CREATE TABLE "DWH_MSFL"."MW_CATEGORY" CREATE TABLE "DWH_MSFL"."MW_CATEGORY" ( "CAT_ID" NUMBER(*,0), "CAT_TITLE" VARCHAR2(255 CHAR), "CAT_TITLE_ORIGIN" VARCHAR2(255 CHAR), "CAT_PAGES" NUMBER(*,0), "CAT_SUBCATS" NUMBER(*,0), "CAT_FILES" NUMBER(*,0) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DWH_MSFL" ;
>
>
> --------------------------
>
> CREATE TABLE "DWH_MSFL"."MW_CATEGORYLINKS" CREATE TABLE "DWH_MSFL"."MW_CATEGORYLINKS" ( "CL_FROM" NUMBER(*,0), "CL_TO" VARCHAR2(255 CHAR), "CL_SORTKEY" VARCHAR2(230 CHAR), "CL_TIMESTAMP" TIMESTAMP (0), "CL_SORTKEY_PREFIX" VARCHAR2(255 CHAR), "CL_COLLATION" VARCHAR2(32 CHAR), "CL_TYPE" VARCHAR2(10 CHAR) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DWH_MSFL" ;
> Notwithstanding, can't the issue somehow be related to categorylinks>category relation or Column-Level Collation (CI_COLLATION)which is set to Uppercase(see insert to categorylinks table in DWH_MSFL.sql). We have an issue exactly with a category and title column(CAT_TITLE)
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5858) Orcale collation issue with Teiid 9.1.1
by Ivan Chan (Jira)
[ https://issues.jboss.org/browse/TEIID-5858?page=com.atlassian.jira.plugin... ]
Ivan Chan commented on TEIID-5858:
----------------------------------
We are embedding Teiid inside our application with Tomcat, I have tried to set assumeMatchingCollation through -Dorg.teiid.assumeMatchingCollation=false in setenv.sh. It didn't seem to do anything. Is it possible to set it through EmbeddedConfiguration or other way we can pass it to org.teiid.runtime.EmbeddedServer. Thanks.
> Orcale collation issue with Teiid 9.1.1
> ---------------------------------------
>
> Key: TEIID-5858
> URL: https://issues.jboss.org/browse/TEIID-5858
> Project: Teiid
> Issue Type: Bug
> Components: JDBC Connector
> Affects Versions: 9.1.1
> Reporter: Ivan Chan
> Assignee: Steven Hawkins
> Priority: Major
>
> One of customers run into this following error:
> org.teiid.core.TeiidComponentException: TEIID31202 Detected that an already sorted set of values was not in the expected order (typically UTF-16 / UCS-2). Please check the translator settings to ensure character columns used for joining are sorted as expected.
> And they were trying to join multiple oracle databases together. And they are running Teiid 9.1.1
> It seems like I need to change the collation. And I tried to change those values, but it didn't seem to do anything.
> org.teiid.requireTeiidCollation
> org.teiid.collationLocale
> org.teiid.assumeMatchingCollation
> Here is how we create the tables in Oracle:
> CREATE TABLE "DWH_MSFL"."MW_CATEGORY" CREATE TABLE "DWH_MSFL"."MW_CATEGORY" ( "CAT_ID" NUMBER(*,0), "CAT_TITLE" VARCHAR2(255 CHAR), "CAT_TITLE_ORIGIN" VARCHAR2(255 CHAR), "CAT_PAGES" NUMBER(*,0), "CAT_SUBCATS" NUMBER(*,0), "CAT_FILES" NUMBER(*,0) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DWH_MSFL" ;
>
>
> --------------------------
>
> CREATE TABLE "DWH_MSFL"."MW_CATEGORYLINKS" CREATE TABLE "DWH_MSFL"."MW_CATEGORYLINKS" ( "CL_FROM" NUMBER(*,0), "CL_TO" VARCHAR2(255 CHAR), "CL_SORTKEY" VARCHAR2(230 CHAR), "CL_TIMESTAMP" TIMESTAMP (0), "CL_SORTKEY_PREFIX" VARCHAR2(255 CHAR), "CL_COLLATION" VARCHAR2(32 CHAR), "CL_TYPE" VARCHAR2(10 CHAR) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DWH_MSFL" ;
> Notwithstanding, can't the issue somehow be related to categorylinks>category relation or Column-Level Collation (CI_COLLATION)which is set to Uppercase(see insert to categorylinks table in DWH_MSFL.sql). We have an issue exactly with a category and title column(CAT_TITLE)
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5861) Salesforce translator should support nested joins
by Steven Hawkins (Jira)
[ https://issues.jboss.org/browse/TEIID-5861?page=com.atlassian.jira.plugin... ]
Steven Hawkins updated TEIID-5861:
----------------------------------
Original Estimate: 2 days
Remaining Estimate: 2 days
> Salesforce translator should support nested joins
> -------------------------------------------------
>
> Key: TEIID-5861
> URL: https://issues.jboss.org/browse/TEIID-5861
> Project: Teiid
> Issue Type: Enhancement
> Components: Salesforce Connector
> Reporter: Renat Eskenin
> Assignee: Steven Hawkins
> Priority: Major
> Fix For: 13.1
>
> Original Estimate: 2 days
> Remaining Estimate: 2 days
>
> For this SQL we have wrong generated SOQL
> {code}
> select
> price.Id,
> price.IsActive__c,
> price.name,
> price.PriceBook__c,
> book.DefaultCurrency__c,
> price.Price__c,
> price.ProductCode__c,
> price.ProductName__c,
> price.Product__c,
> product.Id,
> product.Name,
> product.Description
> from
> MSRP__c as price
> left outer join /*+ MAKEDEP */ Product2 as product on
> price.Product__c = product.id
> left outer join /*+ MAKEDEP */ Pricebook2 as book on
> price.PriceBook__c = book.id
> where
> price.PriceBook__c =:priceBookId
> and ProductCode__c in(
> :productCodes
> )
> and IsActive__c = true"
> {code}
> {code}
> START DATA SRC COMMAND: startTime=2019-12-02 12:43:54.368 requestID=9MPiB/GOwB5f.0 sourceCommandID=3 executionID=2 txID=null modelName=sf translatorName=salesforce sessionID=9MPiB/GOwB5f principal=anonymous sql=SELECT sf.Pricebook2.DefaultCurrency__c FROM sf.Pricebook2 WHERE sf.Pricebook2.Id = 'xxxxx'
> [2019-12-02 12:43:54,368 MSK] DEBUG [salesforce-failover-facade,,,] org.teiid.COMMAND_LOG.SOURCE [Worker0_QueryProcessorQueue1]: SOURCE SRC COMMAND: endTime=2019-12-02 12:43:54.368 requestID=9MPiB/GOwB5f.0 sourceCommandID=2 executionID=1 txID=null modelName=sf translatorName=salesforce sessionID=9MPiB/GOwB5f principal=anonymous sourceCommand=[SELECT MSRP__c.Id, MSRP__c.IsActive__c, MSRP__c.Name, MSRP__c.PriceBook__c, MSRP__c.Price__c, MSRP__c.ProductCode__c, MSRP__c.ProductName__c, MSRP__c.Product__c, Product__r.Id, Product__r.Name, Product__r.Description FROM MSRP__c WHERE (MSRP__c.PriceBook__c = 'xxxx') AND ((MSRP__c.ProductCode__c IN(xxxxx)) AND (MSRP__c.IsActive__c = true))]
> [2019-12-02 12:43:54,368 MSK] DEBUG [salesforce-failover-facade,,,] org.teiid.CONNECTOR [Worker1_QueryProcessorQueue2]: salesforce.9MPiB/GOwB5f.9MPiB/GOwB5f.0.3: Incoming Query: SELECT Pricebook2.DefaultCurrency__c FROM Pricebook2 WHERE Pricebook2.Id = 'xxxx'
> [2019-12-02 12:43:54,368 MSK] DEBUG [salesforce-failover-facade,,,] org.teiid.COMMAND_LOG.SOURCE [Worker1_QueryProcessorQueue2]: SOURCE SRC COMMAND: endTime=2019-12-02 12:43:54.368 requestID=9MPiB/GOwB5f.0 sourceCommandID=3 executionID=2 txID=null modelName=sf translatorName=salesforce sessionID=9MPiB/GOwB5f principal=anonymous sourceCommand=[Using retrieve: Pricebook2.DefaultCurrency__c Pricebook2 [xxxx]]
> {code}
> But need to generate one. Because we have two relations in MSRP__c
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5861) Salesforce translator should support nested joins
by Steven Hawkins (Jira)
[ https://issues.jboss.org/browse/TEIID-5861?page=com.atlassian.jira.plugin... ]
Steven Hawkins updated TEIID-5861:
----------------------------------
Fix Version/s: 13.1
Story Points: 2
Summary: Salesforce translator should support nested joins (was: Need to properly generate SOQL for multiple nested joins)
An early simplifying assumption of the translator was to limit things to a single join level. That made things easy in the logic to identify the parent and the child, and then make decisions about the SOQL query structure. To support arbitrary joins we'll need to validate what join structures are supported (left linear vs. a full tree). Multiple child-to-parent joins should be no problem - that appears to be the query type highlighted in this issue. Multiple parent-to-child joins will imply some join result expansion that the translator would have to perform. It may be necessary to add more capabilities to capture the necessary restrictions on what is supported.
> Salesforce translator should support nested joins
> -------------------------------------------------
>
> Key: TEIID-5861
> URL: https://issues.jboss.org/browse/TEIID-5861
> Project: Teiid
> Issue Type: Enhancement
> Components: Salesforce Connector
> Reporter: Renat Eskenin
> Assignee: Steven Hawkins
> Priority: Major
> Fix For: 13.1
>
>
> For this SQL we have wrong generated SOQL
> {code}
> select
> price.Id,
> price.IsActive__c,
> price.name,
> price.PriceBook__c,
> book.DefaultCurrency__c,
> price.Price__c,
> price.ProductCode__c,
> price.ProductName__c,
> price.Product__c,
> product.Id,
> product.Name,
> product.Description
> from
> MSRP__c as price
> left outer join /*+ MAKEDEP */ Product2 as product on
> price.Product__c = product.id
> left outer join /*+ MAKEDEP */ Pricebook2 as book on
> price.PriceBook__c = book.id
> where
> price.PriceBook__c =:priceBookId
> and ProductCode__c in(
> :productCodes
> )
> and IsActive__c = true"
> {code}
> {code}
> START DATA SRC COMMAND: startTime=2019-12-02 12:43:54.368 requestID=9MPiB/GOwB5f.0 sourceCommandID=3 executionID=2 txID=null modelName=sf translatorName=salesforce sessionID=9MPiB/GOwB5f principal=anonymous sql=SELECT sf.Pricebook2.DefaultCurrency__c FROM sf.Pricebook2 WHERE sf.Pricebook2.Id = 'xxxxx'
> [2019-12-02 12:43:54,368 MSK] DEBUG [salesforce-failover-facade,,,] org.teiid.COMMAND_LOG.SOURCE [Worker0_QueryProcessorQueue1]: SOURCE SRC COMMAND: endTime=2019-12-02 12:43:54.368 requestID=9MPiB/GOwB5f.0 sourceCommandID=2 executionID=1 txID=null modelName=sf translatorName=salesforce sessionID=9MPiB/GOwB5f principal=anonymous sourceCommand=[SELECT MSRP__c.Id, MSRP__c.IsActive__c, MSRP__c.Name, MSRP__c.PriceBook__c, MSRP__c.Price__c, MSRP__c.ProductCode__c, MSRP__c.ProductName__c, MSRP__c.Product__c, Product__r.Id, Product__r.Name, Product__r.Description FROM MSRP__c WHERE (MSRP__c.PriceBook__c = 'xxxx') AND ((MSRP__c.ProductCode__c IN(xxxxx)) AND (MSRP__c.IsActive__c = true))]
> [2019-12-02 12:43:54,368 MSK] DEBUG [salesforce-failover-facade,,,] org.teiid.CONNECTOR [Worker1_QueryProcessorQueue2]: salesforce.9MPiB/GOwB5f.9MPiB/GOwB5f.0.3: Incoming Query: SELECT Pricebook2.DefaultCurrency__c FROM Pricebook2 WHERE Pricebook2.Id = 'xxxx'
> [2019-12-02 12:43:54,368 MSK] DEBUG [salesforce-failover-facade,,,] org.teiid.COMMAND_LOG.SOURCE [Worker1_QueryProcessorQueue2]: SOURCE SRC COMMAND: endTime=2019-12-02 12:43:54.368 requestID=9MPiB/GOwB5f.0 sourceCommandID=3 executionID=2 txID=null modelName=sf translatorName=salesforce sessionID=9MPiB/GOwB5f principal=anonymous sourceCommand=[Using retrieve: Pricebook2.DefaultCurrency__c Pricebook2 [xxxx]]
> {code}
> But need to generate one. Because we have two relations in MSRP__c
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5856) Teiid generate wrong request to salesforce
by Steven Hawkins (Jira)
[ https://issues.jboss.org/browse/TEIID-5856?page=com.atlassian.jira.plugin... ]
Steven Hawkins commented on TEIID-5856:
---------------------------------------
> It is "wrong plan", but now i understand to this true plan but wrong generated SOQL by salesforce translator.
I think things are clear. You are looking for two enhancements. The current plans are not wrong in the sense that they generate the wrong results, just that they are not optimal. The self join issue should be easy to fix. Supporting more than 2 tables in a join will be a larger change as that was an early simplifying assumption in its logic.
> Teiid generate wrong request to salesforce
> ------------------------------------------
>
> Key: TEIID-5856
> URL: https://issues.jboss.org/browse/TEIID-5856
> Project: Teiid
> Issue Type: Bug
> Components: Salesforce Connector
> Environment: spring-boot teiid salesforce-connector
> Reporter: Renat Eskenin
> Assignee: Steven Hawkins
> Priority: Major
>
> When i call request to salesforce teiid get very long wrong request and then OOM, because teiid request all data in salesforce object.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month
[JBoss JIRA] (TEIID-5860) Salesforce translator should support self joins
by Steven Hawkins (Jira)
[ https://issues.jboss.org/browse/TEIID-5860?page=com.atlassian.jira.plugin... ]
Steven Hawkins updated TEIID-5860:
----------------------------------
Description:
In this query
{code}
SELECT originalLicense.Id,originalLicense.Status__c,originalLicense.ReplacementLicenseID__c,originalLicense.LicenseId__c,originalLicense.vlic_Contract_Number__c,replacementLicense.LicenseId__c as replacementLicenseId ,replacementLicense.LicenseId__c as replacementLicenseLicenseId FROM Product_License__c originalLicense LEFT OUTER JOIN /*+ MAKEDEP */ Product_License__c replacementLicense ON originalLicense.ReplacementLicenseID__c = replacementLicense.Id where originalLicense.vlic_Contract_Number__c = :contractNumber
{code}
We have two requests to salesforce, but could generate a single SOQL query.
was:
In this query
{code}
SELECT originalLicense.Id,originalLicense.Status__c,originalLicense.ReplacementLicenseID__c,originalLicense.LicenseId__c,originalLicense.vlic_Contract_Number__c,replacementLicense.LicenseId__c as replacementLicenseId ,replacementLicense.LicenseId__c as replacementLicenseLicenseId FROM Product_License__c originalLicense LEFT OUTER JOIN /*+ MAKEDEP */ Product_License__c replacementLicense ON originalLicense.ReplacementLicenseID__c = replacementLicense.Id where originalLicense.vlic_Contract_Number__c = :contractNumber
{code}
We have wrong two requests to salesforce but need one.
Fix Version/s: 13.1
Summary: Salesforce translator should support self joins (was: Need to properly generate SOQL for self joins)
> Salesforce translator should support self joins
> -----------------------------------------------
>
> Key: TEIID-5860
> URL: https://issues.jboss.org/browse/TEIID-5860
> Project: Teiid
> Issue Type: Enhancement
> Components: Salesforce Connector
> Reporter: Renat Eskenin
> Assignee: Steven Hawkins
> Priority: Major
> Fix For: 13.1
>
>
> In this query
> {code}
> SELECT originalLicense.Id,originalLicense.Status__c,originalLicense.ReplacementLicenseID__c,originalLicense.LicenseId__c,originalLicense.vlic_Contract_Number__c,replacementLicense.LicenseId__c as replacementLicenseId ,replacementLicense.LicenseId__c as replacementLicenseLicenseId FROM Product_License__c originalLicense LEFT OUTER JOIN /*+ MAKEDEP */ Product_License__c replacementLicense ON originalLicense.ReplacementLicenseID__c = replacementLicense.Id where originalLicense.vlic_Contract_Number__c = :contractNumber
> {code}
> We have two requests to salesforce, but could generate a single SOQL query.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
5 years, 1 month