Ejemplo n.º 1
0
    def _init_global(cls, config, dialect):
        """Initializes any global state.

        May be overridden by subclasses to apply global configuration, initialize
        logger state in child processes, etc.
        """
        Lexer(dialect=dialect)
        dialect_selector(dialect)
Ejemplo n.º 2
0
def test_snowflake_queries(segment_cls, raw, caplog):
    """Test snowflake specific queries parse."""
    lnt = Linter(dialect="snowflake")
    parsed = lnt.parse_string(raw)
    print(parsed.violations)
    assert len(parsed.violations) == 0

    # Find any unparsable statements
    typs = parsed.tree.type_set()
    assert "unparsable" not in typs

    # Find the expected type in the parsed segment
    seg_type = dialect_selector("snowflake").get_segment(segment_cls).type
    child_segments = [seg for seg in parsed.tree.recursive_crawl(seg_type)]
    assert len(child_segments) > 0
Ejemplo n.º 3
0
    def __init__(
        self, configs: Optional[dict] = None, overrides: Optional[dict] = None
    ):
        self._overrides = overrides  # We only store this for child configs
        defaults = ConfigLoader.get_global().load_default_config_file()
        self._configs = nested_combine(
            defaults, configs or {"core": {}}, {"core": overrides or {}}
        )
        # Some configs require special treatment
        self._configs["core"]["color"] = (
            False if self._configs["core"].get("nocolor", False) else None
        )
        # Deal with potential ignore parameters
        if self._configs["core"].get("ignore", None):
            self._configs["core"]["ignore"] = self._configs["core"]["ignore"].split(",")
        else:
            self._configs["core"]["ignore"] = []
        # Whitelists and blacklists
        if self._configs["core"].get("rules", None):
            self._configs["core"]["rule_whitelist"] = self._configs["core"][
                "rules"
            ].split(",")
        else:
            self._configs["core"]["rule_whitelist"] = None
        if self._configs["core"].get("exclude_rules", None):
            self._configs["core"]["rule_blacklist"] = self._configs["core"][
                "exclude_rules"
            ].split(",")
        else:
            self._configs["core"]["rule_blacklist"] = None
        # Configure Recursion
        if self._configs["core"].get("recurse", 0) == 0:
            self._configs["core"]["recurse"] = True

        # Dialect and Template selection.
        # NB: We import here to avoid a circular references.
        from sqlfluff.core.dialects import dialect_selector
        from sqlfluff.core.templaters import templater_selector

        self._configs["core"]["dialect_obj"] = dialect_selector(
            self._configs["core"]["dialect"]
        )
        self._configs["core"]["templater_obj"] = templater_selector(
            self._configs["core"]["templater"]
        )
Ejemplo n.º 4
0
def test_exasol_queries(segment_cls, raw, stmt_count,
                        validate_dialect_specific_statements):
    """Test exasol specific queries with parse."""
    seg_cls = dialect_selector(TEST_DIALECT).get_segment(segment_cls)
    validate_dialect_specific_statements(TEST_DIALECT, seg_cls, raw,
                                         stmt_count)
Ejemplo n.º 5
0
    def __init__(
        self,
        configs: Optional[dict] = None,
        extra_config_path: Optional[str] = None,
        ignore_local_config: bool = False,
        overrides: Optional[dict] = None,
        plugin_manager: Optional[pluggy.PluginManager] = None,
        # Ideally a dialect should be set when config is read but sometimes
        # it might only be set in nested .sqlfluff config files, so allow it
        # to be not required.
        require_dialect: bool = True,
    ):
        self._extra_config_path = (
            extra_config_path  # We only store this for child configs
        )
        self._ignore_local_config = (
            ignore_local_config  # We only store this for child configs
        )
        self._overrides = overrides  # We only store this for child configs

        # Fetch a fresh plugin manager if we weren't provided with one
        self._plugin_manager = plugin_manager or get_plugin_manager()

        defaults = nested_combine(*self._plugin_manager.hook.load_default_config())
        self._configs = nested_combine(
            defaults, configs or {"core": {}}, {"core": overrides or {}}
        )
        # Some configs require special treatment
        self._configs["core"]["color"] = (
            False if self._configs["core"].get("nocolor", False) else None
        )
        # Deal with potential ignore parameters
        if self._configs["core"].get("ignore", None):
            self._configs["core"]["ignore"] = _split_comma_separated_string(
                self._configs["core"]["ignore"]
            )
        else:
            self._configs["core"]["ignore"] = []
        # Allowlists and denylists
        if self._configs["core"].get("rules", None):
            self._configs["core"]["rule_allowlist"] = _split_comma_separated_string(
                self._configs["core"]["rules"]
            )
        else:
            self._configs["core"]["rule_allowlist"] = None
        if self._configs["core"].get("exclude_rules", None):
            self._configs["core"]["rule_denylist"] = _split_comma_separated_string(
                self._configs["core"]["exclude_rules"]
            )
        else:
            self._configs["core"]["rule_denylist"] = None
        # Configure Recursion
        if self._configs["core"].get("recurse", 0) == 0:
            self._configs["core"]["recurse"] = True

        # Dialect and Template selection.
        # NB: We import here to avoid a circular references.
        from sqlfluff.core.dialects import dialect_selector

        dialect: Optional[str] = self._configs["core"]["dialect"]
        if dialect is not None:
            self._configs["core"]["dialect_obj"] = dialect_selector(
                self._configs["core"]["dialect"]
            )
        elif require_dialect:
            self.verify_dialect_specified()
        self._configs["core"]["templater_obj"] = self.get_templater(
            self._configs["core"]["templater"]
        )
Ejemplo n.º 6
0
def fresh_ansi_dialect():
    """Expand the ansi dialect for use."""
    return dialect_selector("ansi")
Ejemplo n.º 7
0
def test_exasol_scripts_functions(segment_cls, raw, stmt_count,
                                  validate_dialect_specific_statements):
    """Test exasol specific scripts and functions with parse."""
    seg_cls = dialect_selector(TEST_DIALECT).get_segment(segment_cls)
    validate_dialect_specific_statements(TEST_DIALECT, seg_cls, raw,
                                         stmt_count)