@@ -21,8 +21,29 @@ func (e *Executor) ensureSQLManager() *sqllib.Manager {
2121 return e .sqlMgr
2222}
2323
24+ // getOrAutoConnect returns an existing connection or auto-connects using connections.yaml.
25+ func (e * Executor ) getOrAutoConnect (alias string ) (* sqllib.Connection , error ) {
26+ mgr := e .ensureSQLManager ()
27+ conn , err := mgr .Get (alias )
28+ if err == nil {
29+ return conn , nil
30+ }
31+
32+ // Not connected yet — try auto-connect from config
33+ if acErr := e .autoConnect (alias ); acErr != nil {
34+ return nil , fmt .Errorf ("no connection '%s' (and auto-connect failed: %v)" , alias , acErr )
35+ }
36+ return mgr .Get (alias )
37+ }
38+
2439// execSQLConnect handles SQL CONNECT <driver> '<dsn>' AS <alias>
40+ // and SQL CONNECT <alias> (resolve from connections.yaml).
2541func (e * Executor ) execSQLConnect (s * ast.SQLConnectStmt ) error {
42+ if s .DSN == "" && s .Driver == "" {
43+ // Short form: SQL CONNECT <alias> — resolve from config
44+ return e .autoConnect (s .Alias )
45+ }
46+
2647 driver , err := sqllib .ParseDriver (s .Driver )
2748 if err != nil {
2849 return err
@@ -37,6 +58,23 @@ func (e *Executor) execSQLConnect(s *ast.SQLConnectStmt) error {
3758 return nil
3859}
3960
61+ // autoConnect resolves a connection alias from env vars or .mxcli/connections.yaml
62+ // and connects automatically.
63+ func (e * Executor ) autoConnect (alias string ) error {
64+ rc , err := sqllib .ResolveConnection (sqllib.ResolveOptions {Alias : alias })
65+ if err != nil {
66+ return fmt .Errorf ("cannot resolve connection '%s': %w\n Add it to .mxcli/connections.yaml or use: SQL CONNECT <driver> '<dsn>' AS %s" , alias , err , alias )
67+ }
68+
69+ mgr := e .ensureSQLManager ()
70+ if err := mgr .Connect (rc .Driver , rc .DSN , alias ); err != nil {
71+ return err
72+ }
73+
74+ fmt .Fprintf (e .output , "Connected to %s database as '%s' (from config)\n " , rc .Driver , alias )
75+ return nil
76+ }
77+
4078// execSQLDisconnect handles SQL DISCONNECT <alias>
4179func (e * Executor ) execSQLDisconnect (s * ast.SQLDisconnectStmt ) error {
4280 mgr := e .ensureSQLManager ()
@@ -75,8 +113,7 @@ func (e *Executor) execSQLConnections() error {
75113
76114// execSQLQuery handles SQL <alias> <raw-sql>
77115func (e * Executor ) execSQLQuery (s * ast.SQLQueryStmt ) error {
78- mgr := e .ensureSQLManager ()
79- conn , err := mgr .Get (s .Alias )
116+ conn , err := e .getOrAutoConnect (s .Alias )
80117 if err != nil {
81118 return err
82119 }
@@ -96,8 +133,7 @@ func (e *Executor) execSQLQuery(s *ast.SQLQueryStmt) error {
96133
97134// execSQLShowTables handles SQL <alias> SHOW TABLES
98135func (e * Executor ) execSQLShowTables (s * ast.SQLShowTablesStmt ) error {
99- mgr := e .ensureSQLManager ()
100- conn , err := mgr .Get (s .Alias )
136+ conn , err := e .getOrAutoConnect (s .Alias )
101137 if err != nil {
102138 return err
103139 }
@@ -117,8 +153,7 @@ func (e *Executor) execSQLShowTables(s *ast.SQLShowTablesStmt) error {
117153
118154// execSQLShowViews handles SQL <alias> SHOW VIEWS
119155func (e * Executor ) execSQLShowViews (s * ast.SQLShowViewsStmt ) error {
120- mgr := e .ensureSQLManager ()
121- conn , err := mgr .Get (s .Alias )
156+ conn , err := e .getOrAutoConnect (s .Alias )
122157 if err != nil {
123158 return err
124159 }
@@ -138,8 +173,7 @@ func (e *Executor) execSQLShowViews(s *ast.SQLShowViewsStmt) error {
138173
139174// execSQLShowFunctions handles SQL <alias> SHOW FUNCTIONS
140175func (e * Executor ) execSQLShowFunctions (s * ast.SQLShowFunctionsStmt ) error {
141- mgr := e .ensureSQLManager ()
142- conn , err := mgr .Get (s .Alias )
176+ conn , err := e .getOrAutoConnect (s .Alias )
143177 if err != nil {
144178 return err
145179 }
@@ -159,8 +193,7 @@ func (e *Executor) execSQLShowFunctions(s *ast.SQLShowFunctionsStmt) error {
159193
160194// execSQLGenerateConnector handles SQL <alias> GENERATE CONNECTOR INTO <module> [TABLES (...)] [VIEWS (...)] [EXEC]
161195func (e * Executor ) execSQLGenerateConnector (s * ast.SQLGenerateConnectorStmt ) error {
162- mgr := e .ensureSQLManager ()
163- conn , err := mgr .Get (s .Alias )
196+ conn , err := e .getOrAutoConnect (s .Alias )
164197 if err != nil {
165198 return err
166199 }
@@ -216,8 +249,7 @@ func (e *Executor) executeGeneratedMDL(mdl string) error {
216249
217250// execSQLDescribeTable handles SQL <alias> DESCRIBE <table>
218251func (e * Executor ) execSQLDescribeTable (s * ast.SQLDescribeTableStmt ) error {
219- mgr := e .ensureSQLManager ()
220- conn , err := mgr .Get (s .Alias )
252+ conn , err := e .getOrAutoConnect (s .Alias )
221253 if err != nil {
222254 return err
223255 }
0 commit comments