def _get_crud_params(compiler, stmt, **kw):
        """ extract values from crud parameters

        taken from SQLAlchemy's crud module (since 1.0.x) and
        adapted for Crate dialect"""

        compiler.postfetch = []
        compiler.prefetch = []
        compiler.returning = []
    
        # no parameters in the statement, no parameters in the
        # compiled params - return binds for all columns
        if compiler.column_keys is None and stmt.parameters is None:
            return [
                (c, _create_bind_param(
                    compiler, c, None, required=True))
                for c in stmt.table.columns
            ]
    
        if stmt._has_multi_parameters:
            stmt_parameters = stmt.parameters[0]
        else:
            stmt_parameters = stmt.parameters
    
        # getters - these are normally just column.key,
        # but in the case of mysql multi-table update, the rules for
        # .key must conditionally take tablename into account
        _column_as_key, _getattr_col_key, _col_bind_name = \
            crud._key_getters_for_crud_column(compiler)
    
        # if we have statement parameters - set defaults in the
        # compiled params
        if compiler.column_keys is None:
            parameters = {}
        else:
            parameters = dict((_column_as_key(key), crud.REQUIRED)
                              for key in compiler.column_keys
                              if not stmt_parameters or
                              key not in stmt_parameters)
    
        # create a list of column assignment clauses as tuples
        values = []
    
        if stmt_parameters is not None:
            crud._get_stmt_parameters_params(
                compiler,
                parameters, stmt_parameters, _column_as_key, values, kw)
    
        check_columns = {}
    
        crud._scan_cols(
                compiler, stmt, parameters,
                _getattr_col_key, _column_as_key,
                _col_bind_name, check_columns, values, kw)
    
        if stmt._has_multi_parameters:
            values = crud._extend_values_for_multiparams(compiler, stmt, values, kw)
    
        return values
Beispiel #2
0
    def _get_crud_params(compiler, stmt, **kw):
        """ extract values from crud parameters

        taken from SQLAlchemy's crud module (since 1.0.x) and
        adapted for Crate dialect"""

        compiler.postfetch = []
        compiler.prefetch = []
        compiler.returning = []

        # no parameters in the statement, no parameters in the
        # compiled params - return binds for all columns
        if compiler.column_keys is None and stmt.parameters is None:
            return [(c,
                     crud._create_bind_param(compiler, c, None, required=True))
                    for c in stmt.table.columns]

        if stmt._has_multi_parameters:
            stmt_parameters = stmt.parameters[0]
        else:
            stmt_parameters = stmt.parameters

        # getters - these are normally just column.key,
        # but in the case of mysql multi-table update, the rules for
        # .key must conditionally take tablename into account
        _column_as_key, _getattr_col_key, _col_bind_name = \
            crud._key_getters_for_crud_column(compiler)

        # if we have statement parameters - set defaults in the
        # compiled params
        if compiler.column_keys is None:
            parameters = {}
        else:
            parameters = dict(
                (_column_as_key(key), crud.REQUIRED)
                for key in compiler.column_keys
                if not stmt_parameters or key not in stmt_parameters)

        # create a list of column assignment clauses as tuples
        values = []

        if stmt_parameters is not None:
            crud._get_stmt_parameters_params(compiler, parameters,
                                             stmt_parameters, _column_as_key,
                                             values, kw)

        check_columns = {}

        crud._scan_cols(compiler, stmt, parameters, _getattr_col_key,
                        _column_as_key, _col_bind_name, check_columns, values,
                        kw)

        if stmt._has_multi_parameters:
            values = crud._extend_values_for_multiparams(
                compiler, stmt, values, kw)

        return values