Class DMSqlQuery

    • Field Detail

      • LOG_MARKER

        protected static final Marker LOG_MARKER
      • isValid

        protected transient Boolean isValid
    • Constructor Detail

      • DMSqlQuery

        public DMSqlQuery()
    • Method Detail

      • getUseCache

        public boolean getUseCache()
      • setUseCache

        public void setUseCache​(Boolean useCache)
        If caching is disabled, the query will always be executed in the DB
        Parameters:
        useCache -
      • addSource

        public DMSqlQuery addSource​(DatamartContext.Query sourceQuery)
        Adds a DatamartContext.Query as a source for this SQL query. Convenience method which generates the alias for you, starting with "T1", and then incrementing for each additional source query and with clause.
        Parameters:
        sourceQuery - query to use as a source for this sql query
        Returns:
        this query
      • addSource

        public DMSqlQuery addSource​(DatamartContext.Query sourceQuery,
                                    @NotNull
                                    String alias)
        Adds a DatamartContext.Query as a source for this SQL query.
        Parameters:
        sourceQuery - query to use as a source for this sql query
        alias - the alias to assign to this source query
        Returns:
        this query
      • addSource

        public DMSqlQuery addSource​(DMQuery sourceQuery)
        Adds a DMQuery as a source for this SQL query. Convenience method which generates the alias for you, starting with "T1", and then incrementing for each additional source query and with clause.
        Parameters:
        sourceQuery - query to use as a source for this sql query
        Returns:
        this query
      • addSource

        public DMSqlQuery addSource​(DMQuery sourceQuery,
                                    @NotNull
                                    String alias)
        Adds a DMSqlQuery as a source for this SQL query.
        Parameters:
        sourceQuery - query to use as a source for this sql query
        alias - the alias to assign to this source query
        Returns:
        this query
      • addWith

        public DMSqlQuery addWith​(String withClause,
                                  Object... bindings)
        Adds a with clause to the SQL query, where every "?" char gets replaced by the values provided as additional parameters. This avoids type conversions that would typically happen if the whole query was constructed as a single String. Convenience method which generates the alias for you, starting with "T1", and then incrementing for each additional source query and with clause.

        Example:

             def with = """SELECT T1.product, T1.revenue AS ActualRevenue, T2.revenue AS ForecastRevenue
                                   T1.volume AS ActualVolume, T2.volume AS ForecastVolume
                                   FROM T1 LEFT OUTER JOIN T2 USING (product)
                                   WHERE T1.PG = ?"""
             sqlQuery.addWith(with, "PG-ABC")   // binding some product group value;  with-clause gets assigned the T3 alias
         
        Parameters:
        withClause - sql SELECT code to use as WITH clause in this query
        bindings - parameters to insert for every "?" that appears in the with clause
        Returns:
        this query
      • addWith

        public DMSqlQuery addWith​(String withClause,
                                  @NotNull
                                  String alias,
                                  Object... bindings)
        Adds a with clause to the SQL query, where every "?" char gets replaced by the values provided as additional parameters. This avoids type conversions that would typically happen if the whole query was constructed as a single String.

        Convenience method which generate the alias for you, starting with "T1", and then incrementing for each additional source query and with clause.

        Example:

             def with = """SELECT T1.product, T1.revenue AS ActualRevenue, T2.revenue AS ForecastRevenue
                                   T1.volume AS ActualVolume, T2.volume AS ForecastVolume
                                   FROM T1 LEFT OUTER JOIN T2 USING (product)
                                   WHERE T1.PG = ?"""
             sqlQuery.addWith(with, "W1", "PG-ABC")     // binding some product group value
         
        Parameters:
        withClause - sql SELECT code to use as WITH clause in this query
        alias - the alias to assign to this with clause
        bindings - parameters to insert for every "?" that appears in the with clause
        Returns:
        this query
      • setQuery

        public DMSqlQuery setQuery​(String sql,
                                   Object... bindings)
        Sets the main SQL SELECT clause of this query, where every "?" char gets replaced by the values provided as additional parameters. This avoids type conversions that would typically happen if the whole query was constructed as a single String.

        Example:

             def sql = "SELECT SUM(ActualRevenue) - SUM(ForecastRevenue) FROM T3"
             sqlQuery.setQuery(sql)
         
        Parameters:
        sql - main SELECT clause of this query
        bindings - parameters to insert for every "?" that appears in the with clause
        Returns:
        this query
      • getSourceDmQueries

        public Map<String,​DMQuery> getSourceDmQueries()
      • hasSources

        public boolean hasSources()
      • hasWiths

        public boolean hasWiths()
      • isPrivileged

        public boolean isPrivileged()
      • isValid

        public boolean isValid()
      • setIsValid

        protected void setIsValid​(Boolean isValid)
      • revalidate

        public boolean revalidate​(ValidationVisitor validationVisitor,
                                  PersistedObjectService objService)
      • validate

        public boolean validate​(PersistedObjectService objService)
      • validate

        public boolean validate​(ValidationVisitor validationVisitor,
                                PersistedObjectService objService)
      • preprocessForExecution

        public void preprocessForExecution​(PersistedObjectService pos)
        performs validation of the sql query, and crucially, converts the sources to DMQueries, required for subsequent execution