(
&self,
session: &mut Session,
plan: plan::SetVariablePlan,
)
| 1890 | |
| 1891 | #[instrument] |
| 1892 | pub(super) fn sequence_set_variable( |
| 1893 | &self, |
| 1894 | session: &mut Session, |
| 1895 | plan: plan::SetVariablePlan, |
| 1896 | ) -> Result<ExecuteResponse, AdapterError> { |
| 1897 | let (name, local) = (plan.name, plan.local); |
| 1898 | if &name == TRANSACTION_ISOLATION_VAR_NAME { |
| 1899 | self.validate_set_isolation_level(session)?; |
| 1900 | } |
| 1901 | if &name == vars::CLUSTER.name() { |
| 1902 | self.validate_set_cluster(session)?; |
| 1903 | } |
| 1904 | |
| 1905 | let vars = session.vars_mut(); |
| 1906 | let values = match plan.value { |
| 1907 | plan::VariableValue::Default => None, |
| 1908 | plan::VariableValue::Values(values) => Some(values), |
| 1909 | }; |
| 1910 | |
| 1911 | match values { |
| 1912 | Some(values) => { |
| 1913 | vars.set( |
| 1914 | self.catalog().system_config(), |
| 1915 | &name, |
| 1916 | VarInput::SqlSet(&values), |
| 1917 | local, |
| 1918 | )?; |
| 1919 | |
| 1920 | let vars = session.vars(); |
| 1921 | |
| 1922 | // Emit a warning when deprecated variables are used. |
| 1923 | // TODO(database-issues#8069) remove this after sufficient time has passed |
| 1924 | if name == vars::OLD_AUTO_ROUTE_CATALOG_QUERIES { |
| 1925 | session.add_notice(AdapterNotice::AutoRouteIntrospectionQueriesUsage); |
| 1926 | } else if name == vars::CLUSTER.name() |
| 1927 | && values[0] == vars::OLD_CATALOG_SERVER_CLUSTER |
| 1928 | { |
| 1929 | session.add_notice(AdapterNotice::IntrospectionClusterUsage); |
| 1930 | } |
| 1931 | |
| 1932 | // Database or cluster value does not correspond to a catalog item. |
| 1933 | if name.as_str() == vars::DATABASE.name() |
| 1934 | && matches!( |
| 1935 | self.catalog().resolve_database(vars.database()), |
| 1936 | Err(CatalogError::UnknownDatabase(_)) |
| 1937 | ) |
| 1938 | && session.vars().current_object_missing_warnings() |
| 1939 | { |
| 1940 | let name = vars.database().to_string(); |
| 1941 | session.add_notice(AdapterNotice::DatabaseDoesNotExist { name }); |
| 1942 | } else if name.as_str() == vars::CLUSTER.name() |
| 1943 | && matches!( |
| 1944 | self.catalog().resolve_cluster(vars.cluster()), |
| 1945 | Err(CatalogError::UnknownCluster(_)) |
| 1946 | ) |
| 1947 | && session.vars().current_object_missing_warnings() |
| 1948 | { |
| 1949 | let name = vars.cluster().to_string(); |
no test coverage detected