{"record":{"id":"a134ca113b51631b","repo":"prestodb/presto","slug":"invalid-session-property-a134ca","errorCode":"INVALID_SESSION_PROPERTY","errorMessage":"Invalid session property '%s'","messagePattern":"Invalid session property '(.+?)'","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/SetSessionTask.java","lineNumber":58,"sourceCode":"import static java.lang.String.format;\n\npublic class SetSessionTask\n        implements SessionTransactionControlTask<SetSession>\n{\n    @Override\n    public String getName()\n    {\n        return \"SET SESSION\";\n    }\n\n    @Override\n    public ListenableFuture<?> execute(SetSession statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine, List<Expression> parameters, String query)\n    {\n        Session session = stateMachine.getSession();\n        QualifiedName propertyName = statement.getName();\n        List<String> parts = propertyName.getParts();\n        if (parts.size() > 2) {\n            throw new SemanticException(INVALID_SESSION_PROPERTY, statement, \"Invalid session property '%s'\", propertyName);\n        }\n\n        // validate the property name\n        PropertyMetadata<?> propertyMetadata;\n        if (parts.size() == 1) {\n            accessControl.checkCanSetSystemSessionProperty(session.getIdentity(), session.getAccessControlContext(), parts.get(0));\n            propertyMetadata = metadata.getSessionPropertyManager().getSystemSessionPropertyMetadata(parts.get(0))\n                    .orElseThrow(() -> new SemanticException(INVALID_SESSION_PROPERTY, statement, \"Session property %s does not exist\", statement.getName()));\n        }\n        else {\n            ConnectorId connectorId = getConnectorIdOrThrow(stateMachine.getSession(), metadata, parts.get(0), statement, catalogError);\n            accessControl.checkCanSetCatalogSessionProperty(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), parts.get(0), parts.get(1));\n            propertyMetadata = metadata.getSessionPropertyManager().getConnectorSessionPropertyMetadata(connectorId, parts.get(1))\n                    .orElseThrow(() -> new SemanticException(INVALID_SESSION_PROPERTY, statement, \"Session property %s does not exist\", statement.getName()));\n        }\n\n        Type type = propertyMetadata.getSqlType();\n        Object objectValue;","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/SetSessionTask.java#L40-L76","documentation":"SetSessionTask validates SET SESSION property names: a property must have at most two parts (system property, or connector.property). A name with more than two dot-separated parts is rejected with SemanticException(INVALID_SESSION_PROPERTY). This enforces Presto's <catalog>.<property> or bare-property session naming scheme.","triggerScenarios":"SET SESSION a.b.c = value where the property name has three or more dot-separated parts.","commonSituations":"Copy-pasting JVM-style or hierarchical property keys (e.g. hive.storage.format.foo) into SET SESSION; tools generating property names with extra namespace segments; confusion between connector properties and catalog-level flags.","solutions":["Collapse the property to at most two parts: SET SESSION catalog.property = value.","Look up the exact session property name via SHOW SESSION and use it verbatim.","If a deeper key is intended as a connector property, check the connector docs for its flat session-property name."],"exampleFix":"-- before\nSET SESSION hive.storage.format.values = ORC\n-- after\nSET SESSION hive.orc_bloom_filter_fpp = 0.05","handlingStrategy":"validation","validationCode":"SHOW SESSION; -- confirm exact property name and its part count before SET SESSION\nif (propName.split('.').length > 2) throw new Error(`Invalid session property: ${propName}`);","typeGuard":"function isValidSessionProperty(name) {\n  return /^[A-Za-z_][\\w]*(\\.[A-Za-z_][\\w]*)?$/.test(name);\n}","tryCatchPattern":"try {\n  await run(`SET SESSION ${prop} = ${value}`);\n} catch (e) {\n  if (e.message.includes(\"Invalid session property\")) {\n    console.error(`Use at most catalog.property format; run SHOW SESSION to list valid names`);\n  }\n  throw e;\n}","preventionTips":["Run SHOW SESSION to discover valid property names before setting them.","Keep session-property configuration in checked-in, reviewed queries.","Map hierarchical config keys to their flat Presto session-property equivalents.","Validate property names in any tool that generates SET SESSION statements."],"tags":["sql","presto","session","invalid-property"],"backgroundTag":"invalid-session-property","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}