{"record":{"id":"b8cf53a43e995b1d","repo":"ToolJet/ToolJet","slug":"no-component-id-provided-for-control-component-act","errorCode":null,"errorMessage":"No component ID provided for control-component action.","messagePattern":"No component ID provided for control-component action\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"frontend/src/AppBuilder/_stores/slices/eventsSlice.js","lineNumber":953,"sourceCode":"              const { getComponentDefinition } = get();\n              // let component = Object.values(getCurrentState()?.components ?? {}).filter(\n              //   (component) => component.id === event.componentId\n              // )[0];\n              if (!event.componentSpecificActionHandle) {\n                throw new Error('No component-specific action handle provided.');\n              }\n              const componentDefinition = getComponentDefinition(event.componentId, moduleId);\n              const componentName = componentDefinition?.component?.name;\n              const parent = componentDefinition?.component?.parent;\n              const parentDefinition = getComponentDefinition(parent, moduleId);\n              const parentType = parentDefinition?.component?.component;\n              let component = getExposedValueOfComponent(event.componentId, moduleId);\n              if (parentType === 'Form' && componentName) {\n                component = getExposedValueOfComponent(parent, moduleId)?.children?.[componentName];\n              }\n\n              if (!event.componentId || !Object.keys(component).length) {\n                throw new Error('No component ID provided for control-component action.');\n              }\n              const action = component?.[event.componentSpecificActionHandle];\n              // let action = '';\n              // let actionArguments = '';\n              // check if component id not found then try to find if its available as child widget else continue\n              //  with normal flow finding action\n              // if (component == undefined) {\n              //   component = _ref.appDefinition.pages[getCurrentState()?.page?.id].components[event.componentId].component;\n              //   const parent = Object.values(getCurrentState()?.components ?? {}).find(\n              //     (item) => item.id === component.parent\n              //   );\n              //   const child = Object.values(parent?.children).find((item) => item.id === event.componentId);\n              //   if (child) {\n              //     action = child[event.componentSpecificActionHandle];\n              //   }\n              // } else {\n              //   //normal component outside a container ex : form\n              //   action = component?.[event.componentSpecificActionHandle];","sourceCodeStart":935,"sourceCodeEnd":971,"githubUrl":"https://github.com/ToolJet/ToolJet/blob/20602a8e101f2e59686c9afde0d1402aac2c8871/frontend/src/AppBuilder/_stores/slices/eventsSlice.js#L935-L971","documentation":"The catch in buildTestConnection() for the direct (non-SSH) single-connection path. This wraps actual connection establishment failures from mariadb.createConnection(). Unlike the pool catches (633/634), this fires on real connection errors because createConnection() connects immediately: wrong host/port, authentication failure, TLS mismatch, or network unreachable.","triggerScenarios":"Triggered when the MariaDB server is unreachable (wrong host/port, firewall, DNS failure), authentication fails (wrong user/password), the database name doesn't exist, or the SSL/TLS configuration doesn't match the server's requirements.","commonSituations":"The most common datasource setup error. Happens with typos in host/port, wrong credentials, server not configured to accept remote connections (bind-address), SSL required by server but not configured in client, or firewall/network ACLs blocking the port.","solutions":["Verify host and port are correct and reachable from the ToolJet server: `telnet <host> <port>` or `nc -zv <host> <port>`.","Test credentials with a MariaDB client: `mysql -h <host> -P <port> -u <user> -p<password>`.","If the server requires SSL, set sourceOptions.ssl_enabled and configure the certificate type (ca_certificate or self_signed).","Ensure the MariaDB server's bind-address allows connections from the ToolJet server's IP.","Check cloud security groups / firewall rules permit inbound traffic on the database port."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"function validateDirectConnectionConfig(sourceOptions) {\n  if (!sourceOptions.host) return { valid: false, reason: 'host is required' };\n  if (!sourceOptions.port) return { valid: false, reason: 'port is required' };\n  if (!sourceOptions.user) return { valid: false, reason: 'user is required' };\n  if (!sourceOptions.database) return { valid: false, reason: 'database is required' };\n  return { valid: true };\n}","typeGuard":null,"tryCatchPattern":"try {\n  await mariadb.testConnection(sourceOptions);\n} catch (e) {\n  if (e instanceof QueryError) {\n    const msg = e.data || e.message;\n    if (/access denied/i.test(msg)) { /* wrong credentials */ }\n    if (/unknown database/i.test(msg)) { /* wrong database name */ }\n    if (/ECONNREFUSED|ENOTFOUND|ETIMEDOUT/i.test(msg)) { /* network/firewall issue */ }\n    if (/ssl|tls/i.test(msg)) { /* SSL mismatch — toggle ssl_enabled */ }\n  }\n  throw e;\n}","preventionTips":["Test connectivity from the ToolJet server: `nc -zv <host> <port>` before configuring.","Verify credentials with `mysql -h <host> -P <port> -u <user> -p`.","Match SSL settings to the server's requirements (ssl_enabled + certificate type).","Ensure cloud security groups / firewalls allow inbound traffic on the database port from the ToolJet server's IP.","Check that the MariaDB server's bind-address permits remote connections if the ToolJet server is on a different host."],"tags":["mariadb","connection","authentication","network","tls"],"backgroundTag":null,"analyzedSha":"20602a8e101f2e59686c9afde0d1402aac2c8871","analyzedAt":"2026-08-13T05:58:54.221Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}