R/SqlStatementSelect.R

#' Classe para manipulação de String SQL para a função SELECT
#'
#' @aliases SqlStatementSelect
#' @importFrom methods setRefClass
#' @export SqlStatementSelect SqlStatementSelect
#' @exportClass SqlStatementSelect
#'
SqlStatementSelect <- setRefClass(
    "SqlStatementSelect",
    
    contains = c("SqlStatement"),
    
    fields = list(
      
        object = "ANY",
        sSql   = "character"
        
    ),
    
    methods = list(
        
        initialize = function(Object = NULL) {
            object <<- Object
            sSql   <<- character(1)
        },
        
        createSql = function(isList) {
            tryCatch({
                objectContext <- ObjectContext$new(object)
                listProps     <- objectContext$getProperties()
                
                if (!isList) {
                    countPks <- 0
                    
                    for (prop in listProps) {
                        if (length(prop$value) > 0) {
                            if (prop$primaryKey) {
                                countPks <- countPks + 1
                            }
                        }
                    }
                    
                    if (countPks == 0)
                        stop ("Informar pelo menos 1 Primary Key")
                }
                
                selectQueryBuilder <- SelectQueryBuilder$new()
                selectQueryBuilder$addFrom(objectContext$getTableName())
                
                for (prop in listProps) {
                    selectQueryBuilder$addField(prop$fieldName)
                    
                    if (length(prop$value) > 0) {
                        selectQueryBuilder$addWhere(paste0(prop$fieldName, " ", getQuotedValue(as.character(prop$value), prop$type)))
                    }
                }
                
                sSql <<- selectQueryBuilder$toString()
            }, error = function(ex) {
                stop (ex$message)
            })
        },
        
        getSql = function(isList = F) {
            tryCatch({
                createSql(isList)
                
                return (sSql)
            }, error = function(ex) {
                stop (ex$message)
            })
        }
        
    )
)
aleDsz/rarframeworkR documentation built on March 7, 2020, 2:22 p.m.