From ad5c14958c7261b8a31338f6feb336562ecdaf6d Mon Sep 17 00:00:00 2001 From: zx06 <12474586+zx06@users.noreply.github.com> Date: Sun, 22 Mar 2026 19:40:25 +0800 Subject: [PATCH 1/6] fix: MCP HTTP timeout and graceful shutdown - Add request timeout wrapper to StreamableHTTP handler (60s default) - Add signal handling for graceful shutdown (SIGINT/SIGTERM) - Add NewStreamableHTTPHandlerWithTimeout for custom timeout - Fix ignored json.MarshalIndent error in output writer Security: prevents unbounded HTTP request handling Robustness: proper server shutdown on interrupt signals --- cmd/xsql/mcp.go | 14 + cover_app | 54 ++ coverage.out | 922 ++++++++++++++++++++++++++++++++ internal/mcp/streamable_http.go | 20 +- internal/mcp/tools.go | 5 +- internal/output/writer.go | 9 +- 6 files changed, 1018 insertions(+), 6 deletions(-) create mode 100644 cover_app create mode 100644 coverage.out diff --git a/cmd/xsql/mcp.go b/cmd/xsql/mcp.go index 3cfd32e..d47bad1 100644 --- a/cmd/xsql/mcp.go +++ b/cmd/xsql/mcp.go @@ -4,6 +4,9 @@ import ( "context" "net/http" "os" + "os/signal" + "syscall" + "time" "github.com/modelcontextprotocol/go-sdk/mcp" "github.com/spf13/cobra" @@ -86,6 +89,17 @@ func runMCPServer(opts *mcpServerOptions) error { Addr: resolved.httpAddr, Handler: handler, } + + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) + + go func() { + <-sigChan + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + _ = httpServer.Shutdown(ctx) + }() + return httpServer.ListenAndServe() default: return errors.New(errors.CodeCfgInvalid, "unsupported mcp transport", map[string]any{"transport": resolved.transport}) diff --git a/cover_app b/cover_app new file mode 100644 index 0000000..249af7c --- /dev/null +++ b/cover_app @@ -0,0 +1,54 @@ +mode: set +github.com/zx06/xsql/internal/app/app.go:15.44,17.2 1 1 +github.com/zx06/xsql/internal/app/app.go:19.36,80.2 2 1 +github.com/zx06/xsql/internal/app/app.go:88.40,90.2 1 1 +github.com/zx06/xsql/internal/app/conn.go:21.36,23.17 2 1 +github.com/zx06/xsql/internal/app/conn.go:23.17,24.38 1 0 +github.com/zx06/xsql/internal/app/conn.go:24.38,26.4 1 0 +github.com/zx06/xsql/internal/app/conn.go:28.2,28.24 1 1 +github.com/zx06/xsql/internal/app/conn.go:28.24,29.45 1 0 +github.com/zx06/xsql/internal/app/conn.go:29.45,31.4 1 0 +github.com/zx06/xsql/internal/app/conn.go:33.2,33.34 1 1 +github.com/zx06/xsql/internal/app/conn.go:33.34,34.16 1 1 +github.com/zx06/xsql/internal/app/conn.go:34.16,36.4 1 1 +github.com/zx06/xsql/internal/app/conn.go:38.2,38.19 1 1 +github.com/zx06/xsql/internal/app/conn.go:38.19,40.3 1 0 +github.com/zx06/xsql/internal/app/conn.go:41.2,41.12 1 1 +github.com/zx06/xsql/internal/app/conn.go:50.99,54.20 3 1 +github.com/zx06/xsql/internal/app/conn.go:54.20,56.16 2 1 +github.com/zx06/xsql/internal/app/conn.go:56.16,58.4 1 1 +github.com/zx06/xsql/internal/app/conn.go:59.3,59.16 1 1 +github.com/zx06/xsql/internal/app/conn.go:62.2,63.35 2 1 +github.com/zx06/xsql/internal/app/conn.go:63.35,65.23 2 0 +github.com/zx06/xsql/internal/app/conn.go:65.23,67.17 2 0 +github.com/zx06/xsql/internal/app/conn.go:67.17,69.5 1 0 +github.com/zx06/xsql/internal/app/conn.go:70.4,70.19 1 0 +github.com/zx06/xsql/internal/app/conn.go:73.3,83.16 3 0 +github.com/zx06/xsql/internal/app/conn.go:83.16,85.4 1 0 +github.com/zx06/xsql/internal/app/conn.go:86.3,86.17 1 0 +github.com/zx06/xsql/internal/app/conn.go:89.2,90.9 2 1 +github.com/zx06/xsql/internal/app/conn.go:90.9,91.23 1 1 +github.com/zx06/xsql/internal/app/conn.go:91.23,93.4 1 0 +github.com/zx06/xsql/internal/app/conn.go:94.3,94.121 1 1 +github.com/zx06/xsql/internal/app/conn.go:97.2,105.38 2 1 +github.com/zx06/xsql/internal/app/conn.go:105.38,106.17 1 1 +github.com/zx06/xsql/internal/app/conn.go:106.17,108.5 1 1 +github.com/zx06/xsql/internal/app/conn.go:111.2,111.22 1 1 +github.com/zx06/xsql/internal/app/conn.go:111.22,113.3 1 0 +github.com/zx06/xsql/internal/app/conn.go:115.2,116.15 2 1 +github.com/zx06/xsql/internal/app/conn.go:116.15,117.23 1 1 +github.com/zx06/xsql/internal/app/conn.go:117.23,119.4 1 0 +github.com/zx06/xsql/internal/app/conn.go:120.3,120.33 1 1 +github.com/zx06/xsql/internal/app/conn.go:120.33,121.17 1 1 +github.com/zx06/xsql/internal/app/conn.go:121.17,123.5 1 1 +github.com/zx06/xsql/internal/app/conn.go:125.3,125.17 1 1 +github.com/zx06/xsql/internal/app/conn.go:128.2,133.8 1 1 +github.com/zx06/xsql/internal/app/conn.go:136.131,137.30 1 1 +github.com/zx06/xsql/internal/app/conn.go:137.30,139.3 1 1 +github.com/zx06/xsql/internal/app/conn.go:141.2,142.22 2 1 +github.com/zx06/xsql/internal/app/conn.go:142.22,144.16 2 1 +github.com/zx06/xsql/internal/app/conn.go:144.16,146.4 1 1 +github.com/zx06/xsql/internal/app/conn.go:147.3,147.18 1 1 +github.com/zx06/xsql/internal/app/conn.go:150.2,161.15 3 1 +github.com/zx06/xsql/internal/app/conn.go:161.15,163.3 1 1 +github.com/zx06/xsql/internal/app/conn.go:165.2,165.16 1 0 diff --git a/coverage.out b/coverage.out new file mode 100644 index 0000000..9c173ea --- /dev/null +++ b/coverage.out @@ -0,0 +1,922 @@ +mode: set +github.com/zx06/xsql/internal/app/app.go:15.44,17.2 1 1 +github.com/zx06/xsql/internal/app/app.go:19.36,80.2 2 1 +github.com/zx06/xsql/internal/app/app.go:88.40,90.2 1 1 +github.com/zx06/xsql/internal/db/query.go:17.88,18.14 1 1 +github.com/zx06/xsql/internal/db/query.go:18.14,20.3 1 1 +github.com/zx06/xsql/internal/db/query.go:21.2,21.32 1 1 +github.com/zx06/xsql/internal/db/query.go:35.109,37.27 1 0 +github.com/zx06/xsql/internal/db/query.go:37.27,39.3 1 0 +github.com/zx06/xsql/internal/db/query.go:43.2,43.52 1 0 +github.com/zx06/xsql/internal/db/query.go:43.52,45.3 1 0 +github.com/zx06/xsql/internal/db/query.go:47.2,47.57 1 0 +github.com/zx06/xsql/internal/db/query.go:51.119,53.16 2 0 +github.com/zx06/xsql/internal/db/query.go:53.16,55.3 1 0 +github.com/zx06/xsql/internal/db/query.go:56.2,56.15 1 0 +github.com/zx06/xsql/internal/db/query.go:56.15,59.3 1 0 +github.com/zx06/xsql/internal/db/query.go:61.2,62.16 2 0 +github.com/zx06/xsql/internal/db/query.go:62.16,64.3 1 0 +github.com/zx06/xsql/internal/db/query.go:65.2,67.23 2 0 +github.com/zx06/xsql/internal/db/query.go:71.97,73.16 2 0 +github.com/zx06/xsql/internal/db/query.go:73.16,75.3 1 0 +github.com/zx06/xsql/internal/db/query.go:76.2,78.23 2 0 +github.com/zx06/xsql/internal/db/query.go:82.62,84.16 2 0 +github.com/zx06/xsql/internal/db/query.go:84.16,86.3 1 0 +github.com/zx06/xsql/internal/db/query.go:88.2,89.18 2 0 +github.com/zx06/xsql/internal/db/query.go:89.18,92.23 3 0 +github.com/zx06/xsql/internal/db/query.go:92.23,94.4 1 0 +github.com/zx06/xsql/internal/db/query.go:95.3,95.44 1 0 +github.com/zx06/xsql/internal/db/query.go:95.44,97.4 1 0 +github.com/zx06/xsql/internal/db/query.go:98.3,99.26 2 0 +github.com/zx06/xsql/internal/db/query.go:99.26,101.4 1 0 +github.com/zx06/xsql/internal/db/query.go:102.3,102.41 1 0 +github.com/zx06/xsql/internal/db/query.go:104.2,104.35 1 0 +github.com/zx06/xsql/internal/db/query.go:104.35,106.3 1 0 +github.com/zx06/xsql/internal/db/query.go:107.2,107.20 1 0 +github.com/zx06/xsql/internal/db/query.go:110.30,111.25 1 1 +github.com/zx06/xsql/internal/db/query.go:112.14,113.21 1 1 +github.com/zx06/xsql/internal/db/query.go:114.10,115.13 1 1 +github.com/zx06/xsql/internal/db/readonly.go:77.47,79.15 2 1 +github.com/zx06/xsql/internal/db/readonly.go:79.15,81.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:85.2,86.19 2 1 +github.com/zx06/xsql/internal/db/readonly.go:86.19,88.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:89.2,89.41 1 1 +github.com/zx06/xsql/internal/db/readonly.go:89.41,91.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:94.2,95.16 2 1 +github.com/zx06/xsql/internal/db/readonly.go:95.16,97.3 1 0 +github.com/zx06/xsql/internal/db/readonly.go:100.2,100.40 1 1 +github.com/zx06/xsql/internal/db/readonly.go:100.40,102.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:105.2,106.29 2 1 +github.com/zx06/xsql/internal/db/readonly.go:106.29,107.31 1 1 +github.com/zx06/xsql/internal/db/readonly.go:107.31,109.9 2 1 +github.com/zx06/xsql/internal/db/readonly.go:113.2,113.24 1 1 +github.com/zx06/xsql/internal/db/readonly.go:113.24,115.3 1 0 +github.com/zx06/xsql/internal/db/readonly.go:118.2,118.41 1 1 +github.com/zx06/xsql/internal/db/readonly.go:118.41,120.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:123.2,123.29 1 1 +github.com/zx06/xsql/internal/db/readonly.go:123.29,124.63 1 1 +github.com/zx06/xsql/internal/db/readonly.go:124.63,127.4 1 1 +github.com/zx06/xsql/internal/db/readonly.go:131.2,131.32 1 1 +github.com/zx06/xsql/internal/db/readonly.go:131.32,133.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:136.2,136.28 1 1 +github.com/zx06/xsql/internal/db/readonly.go:136.28,137.28 1 1 +github.com/zx06/xsql/internal/db/readonly.go:137.28,139.4 1 0 +github.com/zx06/xsql/internal/db/readonly.go:142.2,142.27 1 1 +github.com/zx06/xsql/internal/db/readonly.go:145.49,147.29 2 1 +github.com/zx06/xsql/internal/db/readonly.go:147.29,148.31 1 1 +github.com/zx06/xsql/internal/db/readonly.go:148.31,150.4 1 1 +github.com/zx06/xsql/internal/db/readonly.go:153.2,154.64 1 1 +github.com/zx06/xsql/internal/db/readonly.go:157.63,158.47 1 1 +github.com/zx06/xsql/internal/db/readonly.go:158.47,160.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:161.2,161.47 1 1 +github.com/zx06/xsql/internal/db/readonly.go:161.47,163.22 2 1 +github.com/zx06/xsql/internal/db/readonly.go:163.22,164.31 1 1 +github.com/zx06/xsql/internal/db/readonly.go:164.31,166.10 2 1 +github.com/zx06/xsql/internal/db/readonly.go:169.3,169.12 1 1 +github.com/zx06/xsql/internal/db/readonly.go:169.12,171.4 1 1 +github.com/zx06/xsql/internal/db/readonly.go:173.2,173.14 1 1 +github.com/zx06/xsql/internal/db/readonly.go:177.52,178.6 1 1 +github.com/zx06/xsql/internal/db/readonly.go:178.6,181.33 3 1 +github.com/zx06/xsql/internal/db/readonly.go:181.33,182.47 1 1 +github.com/zx06/xsql/internal/db/readonly.go:182.47,184.13 2 1 +github.com/zx06/xsql/internal/db/readonly.go:186.4,186.13 1 1 +github.com/zx06/xsql/internal/db/readonly.go:188.3,188.33 1 1 +github.com/zx06/xsql/internal/db/readonly.go:188.33,189.43 1 1 +github.com/zx06/xsql/internal/db/readonly.go:189.43,191.13 2 1 +github.com/zx06/xsql/internal/db/readonly.go:193.4,193.13 1 0 +github.com/zx06/xsql/internal/db/readonly.go:195.3,195.11 1 1 +github.com/zx06/xsql/internal/db/readonly.go:199.72,200.22 1 1 +github.com/zx06/xsql/internal/db/readonly.go:200.22,202.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:203.2,204.8 2 1 +github.com/zx06/xsql/internal/db/readonly.go:204.8,206.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:207.2,207.112 1 1 +github.com/zx06/xsql/internal/db/readonly.go:211.47,216.17 4 1 +github.com/zx06/xsql/internal/db/readonly.go:216.17,220.25 2 1 +github.com/zx06/xsql/internal/db/readonly.go:220.25,222.12 2 1 +github.com/zx06/xsql/internal/db/readonly.go:226.3,226.20 1 1 +github.com/zx06/xsql/internal/db/readonly.go:226.20,228.12 2 0 +github.com/zx06/xsql/internal/db/readonly.go:232.3,232.50 1 1 +github.com/zx06/xsql/internal/db/readonly.go:232.50,234.37 1 1 +github.com/zx06/xsql/internal/db/readonly.go:234.37,236.5 1 1 +github.com/zx06/xsql/internal/db/readonly.go:237.4,237.12 1 1 +github.com/zx06/xsql/internal/db/readonly.go:241.3,241.50 1 1 +github.com/zx06/xsql/internal/db/readonly.go:241.50,244.21 2 1 +github.com/zx06/xsql/internal/db/readonly.go:244.21,245.41 1 1 +github.com/zx06/xsql/internal/db/readonly.go:245.41,247.11 2 1 +github.com/zx06/xsql/internal/db/readonly.go:249.5,249.8 1 1 +github.com/zx06/xsql/internal/db/readonly.go:251.4,251.12 1 1 +github.com/zx06/xsql/internal/db/readonly.go:255.3,255.16 1 1 +github.com/zx06/xsql/internal/db/readonly.go:255.16,259.12 4 1 +github.com/zx06/xsql/internal/db/readonly.go:263.3,263.15 1 1 +github.com/zx06/xsql/internal/db/readonly.go:263.15,267.12 4 1 +github.com/zx06/xsql/internal/db/readonly.go:271.3,271.15 1 1 +github.com/zx06/xsql/internal/db/readonly.go:271.15,275.12 4 1 +github.com/zx06/xsql/internal/db/readonly.go:279.3,279.15 1 1 +github.com/zx06/xsql/internal/db/readonly.go:279.15,280.62 1 1 +github.com/zx06/xsql/internal/db/readonly.go:280.62,283.13 3 1 +github.com/zx06/xsql/internal/db/readonly.go:288.3,288.15 1 1 +github.com/zx06/xsql/internal/db/readonly.go:288.15,291.12 3 1 +github.com/zx06/xsql/internal/db/readonly.go:295.3,295.90 1 1 +github.com/zx06/xsql/internal/db/readonly.go:295.90,297.139 2 1 +github.com/zx06/xsql/internal/db/readonly.go:297.139,299.5 1 1 +github.com/zx06/xsql/internal/db/readonly.go:300.4,301.12 2 1 +github.com/zx06/xsql/internal/db/readonly.go:305.3,305.38 1 1 +github.com/zx06/xsql/internal/db/readonly.go:305.38,307.122 2 1 +github.com/zx06/xsql/internal/db/readonly.go:307.122,309.5 1 1 +github.com/zx06/xsql/internal/db/readonly.go:310.4,313.28 3 1 +github.com/zx06/xsql/internal/db/readonly.go:313.28,315.5 1 1 +github.com/zx06/xsql/internal/db/readonly.go:315.10,317.5 1 1 +github.com/zx06/xsql/internal/db/readonly.go:318.4,318.12 1 1 +github.com/zx06/xsql/internal/db/readonly.go:322.3,322.24 1 1 +github.com/zx06/xsql/internal/db/readonly.go:322.24,324.51 2 1 +github.com/zx06/xsql/internal/db/readonly.go:324.51,326.5 1 1 +github.com/zx06/xsql/internal/db/readonly.go:327.4,328.12 2 1 +github.com/zx06/xsql/internal/db/readonly.go:332.3,333.6 2 1 +github.com/zx06/xsql/internal/db/readonly.go:336.2,337.20 2 1 +github.com/zx06/xsql/internal/db/readonly.go:341.67,346.17 4 1 +github.com/zx06/xsql/internal/db/readonly.go:346.17,348.17 2 1 +github.com/zx06/xsql/internal/db/readonly.go:348.17,350.47 1 1 +github.com/zx06/xsql/internal/db/readonly.go:350.47,353.13 3 0 +github.com/zx06/xsql/internal/db/readonly.go:356.4,356.33 1 1 +github.com/zx06/xsql/internal/db/readonly.go:359.3,359.59 1 1 +github.com/zx06/xsql/internal/db/readonly.go:359.59,362.12 3 0 +github.com/zx06/xsql/internal/db/readonly.go:364.3,365.6 2 1 +github.com/zx06/xsql/internal/db/readonly.go:369.2,369.27 1 0 +github.com/zx06/xsql/internal/db/readonly.go:373.73,375.23 2 1 +github.com/zx06/xsql/internal/db/readonly.go:375.23,377.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:380.2,382.123 3 1 +github.com/zx06/xsql/internal/db/readonly.go:382.123,384.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:386.2,386.44 1 1 +github.com/zx06/xsql/internal/db/readonly.go:386.44,388.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:390.2,395.41 4 1 +github.com/zx06/xsql/internal/db/readonly.go:395.41,396.76 1 1 +github.com/zx06/xsql/internal/db/readonly.go:396.76,399.4 2 1 +github.com/zx06/xsql/internal/db/readonly.go:402.2,402.25 1 1 +github.com/zx06/xsql/internal/db/readonly.go:406.34,409.61 2 1 +github.com/zx06/xsql/internal/db/readonly.go:409.61,411.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:413.2,426.36 2 1 +github.com/zx06/xsql/internal/db/readonly.go:426.36,427.18 1 1 +github.com/zx06/xsql/internal/db/readonly.go:427.18,429.4 1 1 +github.com/zx06/xsql/internal/db/readonly.go:431.2,431.14 1 1 +github.com/zx06/xsql/internal/db/readonly.go:435.34,439.2 1 1 +github.com/zx06/xsql/internal/db/readonly.go:442.57,446.29 3 1 +github.com/zx06/xsql/internal/db/readonly.go:446.29,447.19 1 1 +github.com/zx06/xsql/internal/db/readonly.go:448.64,449.31 1 1 +github.com/zx06/xsql/internal/db/readonly.go:450.23,451.28 1 1 +github.com/zx06/xsql/internal/db/readonly.go:451.28,454.5 2 1 +github.com/zx06/xsql/internal/db/readonly.go:459.2,459.26 1 1 +github.com/zx06/xsql/internal/db/readonly.go:459.26,461.3 1 1 +github.com/zx06/xsql/internal/db/readonly.go:463.2,463.22 1 1 +github.com/zx06/xsql/internal/db/readonly.go:467.44,471.29 3 1 +github.com/zx06/xsql/internal/db/readonly.go:471.29,472.26 1 1 +github.com/zx06/xsql/internal/db/readonly.go:472.26,474.12 2 1 +github.com/zx06/xsql/internal/db/readonly.go:476.3,476.13 1 1 +github.com/zx06/xsql/internal/db/readonly.go:476.13,477.12 1 0 +github.com/zx06/xsql/internal/db/readonly.go:481.3,481.20 1 1 +github.com/zx06/xsql/internal/db/readonly.go:482.12,483.16 1 1 +github.com/zx06/xsql/internal/db/readonly.go:484.12,487.44 2 1 +github.com/zx06/xsql/internal/db/readonly.go:487.44,489.26 2 1 +github.com/zx06/xsql/internal/db/readonly.go:490.39,491.17 1 1 +github.com/zx06/xsql/internal/db/readonly.go:492.19,493.18 1 1 +github.com/zx06/xsql/internal/db/readonly.go:496.11,498.22 1 1 +github.com/zx06/xsql/internal/db/readonly.go:498.22,499.22 1 1 +github.com/zx06/xsql/internal/db/readonly.go:500.39,501.17 1 1 +github.com/zx06/xsql/internal/db/readonly.go:506.2,506.14 1 0 +github.com/zx06/xsql/internal/db/registry.go:40.38,43.16 3 1 +github.com/zx06/xsql/internal/db/registry.go:43.16,44.35 1 1 +github.com/zx06/xsql/internal/db/registry.go:46.2,46.14 1 1 +github.com/zx06/xsql/internal/db/registry.go:46.14,47.35 1 1 +github.com/zx06/xsql/internal/db/registry.go:49.2,49.40 1 1 +github.com/zx06/xsql/internal/db/registry.go:49.40,50.50 1 1 +github.com/zx06/xsql/internal/db/registry.go:52.2,52.19 1 1 +github.com/zx06/xsql/internal/db/registry.go:55.38,60.2 4 1 +github.com/zx06/xsql/internal/db/registry.go:62.33,66.25 4 1 +github.com/zx06/xsql/internal/db/registry.go:66.25,68.3 1 1 +github.com/zx06/xsql/internal/db/registry.go:69.2,69.12 1 1 +github.com/zx06/xsql/internal/db/schema.go:18.74,19.36 1 1 +github.com/zx06/xsql/internal/db/schema.go:19.36,21.3 1 1 +github.com/zx06/xsql/internal/db/schema.go:23.2,24.29 2 1 +github.com/zx06/xsql/internal/db/schema.go:24.29,29.31 5 1 +github.com/zx06/xsql/internal/db/schema.go:29.31,38.4 1 1 +github.com/zx06/xsql/internal/db/schema.go:41.2,41.33 1 1 +github.com/zx06/xsql/internal/db/schema.go:96.119,98.9 2 1 +github.com/zx06/xsql/internal/db/schema.go:98.9,100.3 1 1 +github.com/zx06/xsql/internal/db/schema.go:102.2,103.9 2 0 +github.com/zx06/xsql/internal/db/schema.go:103.9,105.3 1 0 +github.com/zx06/xsql/internal/db/schema.go:107.2,107.37 1 0 +github.com/zx06/xsql/internal/config/load.go:12.59,14.19 2 1 +github.com/zx06/xsql/internal/config/load.go:14.19,16.3 1 1 +github.com/zx06/xsql/internal/config/load.go:17.2,17.19 1 1 +github.com/zx06/xsql/internal/config/load.go:17.19,19.3 1 1 +github.com/zx06/xsql/internal/config/load.go:20.2,20.14 1 1 +github.com/zx06/xsql/internal/config/load.go:23.51,25.16 2 1 +github.com/zx06/xsql/internal/config/load.go:25.16,26.25 1 1 +github.com/zx06/xsql/internal/config/load.go:26.25,28.4 1 1 +github.com/zx06/xsql/internal/config/load.go:29.3,29.117 1 0 +github.com/zx06/xsql/internal/config/load.go:31.2,32.46 2 1 +github.com/zx06/xsql/internal/config/load.go:32.46,34.3 1 1 +github.com/zx06/xsql/internal/config/load.go:35.2,35.23 1 1 +github.com/zx06/xsql/internal/config/load.go:35.23,37.3 1 0 +github.com/zx06/xsql/internal/config/load.go:38.2,38.25 1 1 +github.com/zx06/xsql/internal/config/load.go:38.25,40.3 1 1 +github.com/zx06/xsql/internal/config/load.go:41.2,41.15 1 1 +github.com/zx06/xsql/internal/config/load.go:45.62,47.19 2 1 +github.com/zx06/xsql/internal/config/load.go:47.19,50.3 2 1 +github.com/zx06/xsql/internal/config/load.go:51.2,51.24 1 1 +github.com/zx06/xsql/internal/config/load.go:51.24,52.46 1 1 +github.com/zx06/xsql/internal/config/load.go:52.46,54.4 1 1 +github.com/zx06/xsql/internal/config/load.go:57.2,57.27 1 1 +github.com/zx06/xsql/internal/config/load.go:57.27,59.27 2 1 +github.com/zx06/xsql/internal/config/load.go:59.27,61.4 1 1 +github.com/zx06/xsql/internal/config/load.go:62.3,63.16 2 1 +github.com/zx06/xsql/internal/config/load.go:63.16,65.4 1 1 +github.com/zx06/xsql/internal/config/load.go:66.3,66.21 1 1 +github.com/zx06/xsql/internal/config/load.go:69.2,69.62 1 1 +github.com/zx06/xsql/internal/config/load.go:69.62,71.16 2 1 +github.com/zx06/xsql/internal/config/load.go:71.16,72.41 1 1 +github.com/zx06/xsql/internal/config/load.go:72.41,73.13 1 1 +github.com/zx06/xsql/internal/config/load.go:75.4,75.25 1 1 +github.com/zx06/xsql/internal/config/load.go:77.3,77.19 1 1 +github.com/zx06/xsql/internal/config/load.go:80.2,80.89 1 1 +github.com/zx06/xsql/internal/config/resolve.go:11.55,13.19 2 1 +github.com/zx06/xsql/internal/config/resolve.go:13.19,16.3 2 0 +github.com/zx06/xsql/internal/config/resolve.go:17.2,17.24 1 1 +github.com/zx06/xsql/internal/config/resolve.go:17.24,18.46 1 0 +github.com/zx06/xsql/internal/config/resolve.go:18.46,20.4 1 0 +github.com/zx06/xsql/internal/config/resolve.go:24.2,26.27 3 1 +github.com/zx06/xsql/internal/config/resolve.go:26.27,28.27 2 1 +github.com/zx06/xsql/internal/config/resolve.go:28.27,30.4 1 1 +github.com/zx06/xsql/internal/config/resolve.go:31.3,32.16 2 1 +github.com/zx06/xsql/internal/config/resolve.go:32.16,34.4 1 1 +github.com/zx06/xsql/internal/config/resolve.go:35.3,36.16 2 0 +github.com/zx06/xsql/internal/config/resolve.go:37.8,38.63 1 1 +github.com/zx06/xsql/internal/config/resolve.go:38.63,40.17 2 1 +github.com/zx06/xsql/internal/config/resolve.go:40.17,41.42 1 1 +github.com/zx06/xsql/internal/config/resolve.go:41.42,42.14 1 1 +github.com/zx06/xsql/internal/config/resolve.go:44.5,44.26 1 0 +github.com/zx06/xsql/internal/config/resolve.go:46.4,48.9 3 1 +github.com/zx06/xsql/internal/config/resolve.go:53.2,54.24 2 1 +github.com/zx06/xsql/internal/config/resolve.go:54.24,56.3 1 1 +github.com/zx06/xsql/internal/config/resolve.go:56.8,56.34 1 1 +github.com/zx06/xsql/internal/config/resolve.go:56.34,58.3 1 0 +github.com/zx06/xsql/internal/config/resolve.go:58.8,59.43 1 1 +github.com/zx06/xsql/internal/config/resolve.go:59.43,61.4 1 1 +github.com/zx06/xsql/internal/config/resolve.go:65.2,66.19 2 1 +github.com/zx06/xsql/internal/config/resolve.go:66.19,68.10 2 1 +github.com/zx06/xsql/internal/config/resolve.go:68.10,71.4 1 1 +github.com/zx06/xsql/internal/config/resolve.go:72.3,74.37 2 1 +github.com/zx06/xsql/internal/config/resolve.go:74.37,75.65 1 1 +github.com/zx06/xsql/internal/config/resolve.go:75.65,77.5 1 1 +github.com/zx06/xsql/internal/config/resolve.go:77.10,80.5 1 1 +github.com/zx06/xsql/internal/config/resolve.go:83.3,83.32 1 1 +github.com/zx06/xsql/internal/config/resolve.go:83.32,84.30 1 1 +github.com/zx06/xsql/internal/config/resolve.go:85.17,86.32 1 1 +github.com/zx06/xsql/internal/config/resolve.go:87.14,88.32 1 1 +github.com/zx06/xsql/internal/config/resolve.go:94.2,95.34 2 1 +github.com/zx06/xsql/internal/config/resolve.go:95.34,97.3 1 1 +github.com/zx06/xsql/internal/config/resolve.go:98.2,98.26 1 1 +github.com/zx06/xsql/internal/config/resolve.go:98.26,100.3 1 1 +github.com/zx06/xsql/internal/config/resolve.go:101.2,101.23 1 1 +github.com/zx06/xsql/internal/config/resolve.go:101.23,103.3 1 1 +github.com/zx06/xsql/internal/config/resolve.go:105.2,105.107 1 1 +github.com/zx06/xsql/internal/errors/codes.go:31.24,46.2 1 1 +github.com/zx06/xsql/internal/errors/error.go:16.33,17.14 1 1 +github.com/zx06/xsql/internal/errors/error.go:17.14,19.3 1 1 +github.com/zx06/xsql/internal/errors/error.go:20.2,20.20 1 1 +github.com/zx06/xsql/internal/errors/error.go:20.20,22.3 1 1 +github.com/zx06/xsql/internal/errors/error.go:23.2,23.62 1 1 +github.com/zx06/xsql/internal/errors/error.go:26.33,26.51 1 1 +github.com/zx06/xsql/internal/errors/error.go:28.69,30.2 1 1 +github.com/zx06/xsql/internal/errors/error.go:32.83,34.2 1 1 +github.com/zx06/xsql/internal/errors/error.go:36.36,38.28 2 1 +github.com/zx06/xsql/internal/errors/error.go:38.28,40.3 1 1 +github.com/zx06/xsql/internal/errors/error.go:41.2,41.19 1 1 +github.com/zx06/xsql/internal/errors/error.go:44.34,45.27 1 0 +github.com/zx06/xsql/internal/errors/error.go:45.27,47.3 1 0 +github.com/zx06/xsql/internal/errors/error.go:48.2,48.50 1 0 +github.com/zx06/xsql/internal/errors/exitcode.go:25.38,26.14 1 1 +github.com/zx06/xsql/internal/errors/exitcode.go:27.59,28.20 1 1 +github.com/zx06/xsql/internal/errors/exitcode.go:30.66,31.21 1 1 +github.com/zx06/xsql/internal/errors/exitcode.go:32.21,33.22 1 1 +github.com/zx06/xsql/internal/errors/exitcode.go:34.24,35.20 1 1 +github.com/zx06/xsql/internal/errors/exitcode.go:36.20,37.14 1 1 +github.com/zx06/xsql/internal/errors/exitcode.go:38.10,39.22 1 1 +github.com/zx06/xsql/internal/log/log.go:10.36,13.2 2 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:18.13,20.2 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:24.91,27.20 2 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:27.20,29.17 2 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:29.17,31.4 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:32.3,32.15 1 0 +github.com/zx06/xsql/internal/db/mysql/driver.go:33.8,40.24 7 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:40.24,42.4 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:43.3,43.33 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:43.33,45.4 1 0 +github.com/zx06/xsql/internal/db/mysql/driver.go:49.2,49.24 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:49.24,51.95 2 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:51.95,53.4 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:54.3,54.20 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:57.2,59.16 3 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:59.16,61.3 1 0 +github.com/zx06/xsql/internal/db/mysql/driver.go:62.2,62.46 1 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:62.46,65.3 2 1 +github.com/zx06/xsql/internal/db/mysql/driver.go:66.2,66.18 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:13.120,18.87 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:18.87,20.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:21.2,25.15 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:25.15,27.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:30.2,30.31 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:30.31,33.16 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:33.16,35.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:36.3,40.16 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:40.16,42.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:43.3,47.16 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:47.16,49.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:50.3,52.43 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:55.2,55.18 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:59.133,68.29 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:68.29,74.3 4 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:76.2,79.16 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:79.16,81.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:82.2,85.18 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:85.18,87.52 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:87.52,89.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:90.3,94.5 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:97.2,97.35 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:97.35,99.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:101.2,101.20 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:105.122,120.16 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:120.16,122.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:123.2,126.18 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:126.18,129.100 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:129.100,131.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:133.3,139.25 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:139.25,141.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:142.3,142.20 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:142.20,144.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:145.3,145.33 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:148.2,148.35 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:148.35,150.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:152.2,152.21 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:156.121,170.16 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:170.16,172.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:173.2,177.18 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:177.18,181.96 4 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:181.96,183.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:185.3,185.49 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:185.49,187.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:187.9,194.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:197.2,197.35 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:197.35,199.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:202.2,203.31 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:203.31,205.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:207.2,207.21 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:211.130,227.16 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:227.16,229.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:230.2,234.18 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:234.18,237.106 3 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:237.106,239.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:241.3,241.50 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:241.50,244.4 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:244.9,251.4 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:254.2,254.35 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:254.35,256.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:259.2,260.27 2 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:260.27,262.3 1 0 +github.com/zx06/xsql/internal/db/mysql/schema.go:264.2,264.17 1 0 +github.com/zx06/xsql/internal/mcp/streamable_http.go:26.91,27.19 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:27.19,29.3 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:30.2,30.21 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:30.21,32.3 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:33.2,33.74 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:33.74,35.3 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:36.2,36.45 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:39.64,40.73 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:40.73,42.17 2 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:42.17,45.4 2 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:46.3,46.45 1 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:46.45,49.4 2 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:50.3,51.71 2 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:51.71,54.4 2 1 +github.com/zx06/xsql/internal/mcp/streamable_http.go:55.3,55.25 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:36.52,40.2 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:43.50,45.38 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:45.38,47.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:48.2,48.14 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:52.57,55.36 3 1 +github.com/zx06/xsql/internal/mcp/tools.go:55.36,57.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:60.2,103.26 5 1 +github.com/zx06/xsql/internal/mcp/tools.go:107.112,109.69 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:109.69,116.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:117.2,118.20 2 0 +github.com/zx06/xsql/internal/mcp/tools.go:122.118,124.69 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:124.69,131.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:132.2,133.20 2 0 +github.com/zx06/xsql/internal/mcp/tools.go:137.128,139.21 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:139.21,146.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:148.2,148.25 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:148.25,155.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:158.2,159.20 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:159.20,166.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:169.2,169.56 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:169.56,176.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:178.2,178.22 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:178.22,185.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:188.2,189.20 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:189.20,191.16 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:191.16,198.4 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:199.3,199.16 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:203.2,204.30 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:204.30,206.23 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:206.23,208.17 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:208.17,215.5 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:216.4,216.19 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:218.3,227.16 3 1 +github.com/zx06/xsql/internal/mcp/tools.go:227.16,234.4 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:235.3,236.17 2 0 +github.com/zx06/xsql/internal/mcp/tools.go:240.2,241.9 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:241.9,248.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:250.2,258.22 2 0 +github.com/zx06/xsql/internal/mcp/tools.go:258.22,260.3 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:262.2,263.15 2 0 +github.com/zx06/xsql/internal/mcp/tools.go:263.15,270.3 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:271.2,278.15 3 0 +github.com/zx06/xsql/internal/mcp/tools.go:278.15,285.3 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:287.2,293.16 3 0 +github.com/zx06/xsql/internal/mcp/tools.go:293.16,300.3 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:303.2,307.13 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:311.132,320.41 3 1 +github.com/zx06/xsql/internal/mcp/tools.go:320.41,322.25 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:322.25,324.4 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:325.3,330.5 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:333.2,341.16 3 1 +github.com/zx06/xsql/internal/mcp/tools.go:341.16,348.3 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:351.2,355.13 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:359.140,361.9 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:361.9,368.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:371.2,382.23 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:382.23,384.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:385.2,385.28 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:385.28,387.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:388.2,388.28 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:388.28,390.61 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:390.61,394.32 4 1 +github.com/zx06/xsql/internal/mcp/tools.go:394.32,396.5 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:400.2,406.16 3 1 +github.com/zx06/xsql/internal/mcp/tools.go:406.16,413.3 1 0 +github.com/zx06/xsql/internal/mcp/tools.go:416.2,420.13 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:425.63,426.16 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:426.16,428.39 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:428.39,430.4 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:431.3,431.13 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:434.2,435.9 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:435.9,437.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:440.2,440.28 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:440.28,441.61 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:441.61,443.4 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:446.2,446.17 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:450.53,452.16 2 1 +github.com/zx06/xsql/internal/mcp/tools.go:452.16,454.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:454.8,456.3 1 1 +github.com/zx06/xsql/internal/mcp/tools.go:457.2,467.25 3 1 +github.com/zx06/xsql/internal/mcp/tools.go:471.74,481.2 4 1 +github.com/zx06/xsql/internal/db/pg/driver.go:17.13,19.2 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:23.91,25.15 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:25.15,27.3 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:30.2,30.24 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:30.24,32.17 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:32.17,34.4 1 0 +github.com/zx06/xsql/internal/db/pg/driver.go:35.3,35.87 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:35.87,37.4 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:38.3,39.47 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:39.47,42.4 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:43.3,43.19 1 0 +github.com/zx06/xsql/internal/db/pg/driver.go:46.2,47.16 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:47.16,49.3 1 0 +github.com/zx06/xsql/internal/db/pg/driver.go:50.2,50.46 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:50.46,53.3 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:54.2,54.18 1 0 +github.com/zx06/xsql/internal/db/pg/driver.go:57.43,59.21 2 1 +github.com/zx06/xsql/internal/db/pg/driver.go:59.21,61.3 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:62.2,62.20 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:62.20,64.3 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:65.2,65.21 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:65.21,67.3 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:68.2,68.25 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:68.25,70.3 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:71.2,71.25 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:71.25,73.3 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:74.2,74.32 1 1 +github.com/zx06/xsql/internal/db/pg/driver.go:74.32,76.3 1 0 +github.com/zx06/xsql/internal/db/pg/driver.go:77.2,77.33 1 1 +github.com/zx06/xsql/internal/db/pg/schema.go:13.120,18.95 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:18.95,20.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:21.2,25.15 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:25.15,27.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:30.2,30.33 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:30.33,32.16 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:32.16,34.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:37.3,37.32 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:37.32,40.17 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:40.17,42.5 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:43.4,47.17 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:47.17,49.5 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:50.4,54.17 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:54.17,56.5 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:57.4,59.44 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:63.2,63.18 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:67.115,74.25 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:74.25,77.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:79.2,82.16 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:82.16,84.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:85.2,88.18 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:88.18,90.44 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:90.44,92.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:93.3,93.36 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:96.2,96.35 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:96.35,98.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:100.2,100.21 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:104.131,115.29 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:115.29,121.3 4 0 +github.com/zx06/xsql/internal/db/pg/schema.go:123.2,126.16 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:126.16,128.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:129.2,132.18 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:132.18,135.52 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:135.52,137.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:138.3,142.5 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:145.2,145.35 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:145.35,147.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:149.2,149.20 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:153.120,187.16 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:187.16,189.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:190.2,193.18 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:193.18,197.100 4 0 +github.com/zx06/xsql/internal/db/pg/schema.go:197.100,199.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:201.3,207.25 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:207.25,209.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:210.3,210.20 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:210.20,212.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:213.3,213.33 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:216.2,216.35 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:216.35,218.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:220.2,220.21 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:224.119,242.16 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:242.16,244.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:245.2,249.18 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:249.18,253.103 4 0 +github.com/zx06/xsql/internal/db/pg/schema.go:253.103,255.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:257.3,257.49 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:257.49,259.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:259.9,266.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:269.2,269.35 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:269.35,271.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:274.2,275.31 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:275.31,277.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:279.2,279.21 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:283.128,305.16 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:305.16,307.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:308.2,312.18 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:312.18,315.106 3 0 +github.com/zx06/xsql/internal/db/pg/schema.go:315.106,317.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:319.3,319.50 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:319.50,322.4 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:322.9,329.4 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:332.2,332.35 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:332.35,334.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:337.2,338.27 2 0 +github.com/zx06/xsql/internal/db/pg/schema.go:338.27,340.3 1 0 +github.com/zx06/xsql/internal/db/pg/schema.go:342.2,342.17 1 0 +github.com/zx06/xsql/internal/output/format.go:13.29,14.11 1 1 +github.com/zx06/xsql/internal/output/format.go:15.66,16.14 1 1 +github.com/zx06/xsql/internal/output/format.go:17.10,18.15 1 1 +github.com/zx06/xsql/internal/output/writer.go:23.37,25.2 1 1 +github.com/zx06/xsql/internal/output/writer.go:27.56,29.2 1 1 +github.com/zx06/xsql/internal/output/writer.go:31.68,34.2 2 1 +github.com/zx06/xsql/internal/output/writer.go:36.58,37.16 1 1 +github.com/zx06/xsql/internal/output/writer.go:38.18,41.25 3 1 +github.com/zx06/xsql/internal/output/writer.go:42.18,44.17 2 1 +github.com/zx06/xsql/internal/output/writer.go:44.17,46.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:47.3,48.17 2 1 +github.com/zx06/xsql/internal/output/writer.go:48.17,50.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:51.3,51.41 1 1 +github.com/zx06/xsql/internal/output/writer.go:51.41,53.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:54.3,54.13 1 1 +github.com/zx06/xsql/internal/output/writer.go:55.19,56.32 1 1 +github.com/zx06/xsql/internal/output/writer.go:57.17,58.30 1 1 +github.com/zx06/xsql/internal/output/writer.go:59.10,60.110 1 1 +github.com/zx06/xsql/internal/output/writer.go:87.52,88.13 1 1 +github.com/zx06/xsql/internal/output/writer.go:88.13,90.23 1 1 +github.com/zx06/xsql/internal/output/writer.go:90.23,92.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:93.3,93.13 1 1 +github.com/zx06/xsql/internal/output/writer.go:97.2,97.52 1 1 +github.com/zx06/xsql/internal/output/writer.go:97.52,98.52 1 1 +github.com/zx06/xsql/internal/output/writer.go:98.52,100.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:104.2,104.58 1 1 +github.com/zx06/xsql/internal/output/writer.go:104.58,105.65 1 0 +github.com/zx06/xsql/internal/output/writer.go:105.65,107.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:111.2,111.53 1 1 +github.com/zx06/xsql/internal/output/writer.go:111.53,112.59 1 1 +github.com/zx06/xsql/internal/output/writer.go:112.59,114.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:118.2,118.44 1 1 +github.com/zx06/xsql/internal/output/writer.go:118.44,120.55 1 1 +github.com/zx06/xsql/internal/output/writer.go:120.55,121.50 1 1 +github.com/zx06/xsql/internal/output/writer.go:121.50,123.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:127.3,127.61 1 1 +github.com/zx06/xsql/internal/output/writer.go:127.61,128.60 1 1 +github.com/zx06/xsql/internal/output/writer.go:128.60,131.5 2 1 +github.com/zx06/xsql/internal/output/writer.go:135.3,136.38 2 1 +github.com/zx06/xsql/internal/output/writer.go:136.38,138.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:139.3,139.20 1 1 +github.com/zx06/xsql/internal/output/writer.go:143.2,143.57 1 1 +github.com/zx06/xsql/internal/output/writer.go:143.57,145.3 1 0 +github.com/zx06/xsql/internal/output/writer.go:148.2,149.21 2 1 +github.com/zx06/xsql/internal/output/writer.go:149.21,150.45 1 1 +github.com/zx06/xsql/internal/output/writer.go:150.45,151.39 1 0 +github.com/zx06/xsql/internal/output/writer.go:151.39,153.5 1 0 +github.com/zx06/xsql/internal/output/writer.go:154.9,158.4 2 1 +github.com/zx06/xsql/internal/output/writer.go:160.2,160.19 1 1 +github.com/zx06/xsql/internal/output/writer.go:164.93,167.19 2 1 +github.com/zx06/xsql/internal/output/writer.go:167.19,169.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:171.2,173.29 3 1 +github.com/zx06/xsql/internal/output/writer.go:173.29,175.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:177.2,178.24 2 1 +github.com/zx06/xsql/internal/output/writer.go:178.24,180.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:181.2,182.19 2 1 +github.com/zx06/xsql/internal/output/writer.go:186.49,187.14 1 1 +github.com/zx06/xsql/internal/output/writer.go:187.14,189.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:191.2,191.32 1 1 +github.com/zx06/xsql/internal/output/writer.go:191.32,193.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:195.2,195.30 1 1 +github.com/zx06/xsql/internal/output/writer.go:195.30,197.28 2 1 +github.com/zx06/xsql/internal/output/writer.go:197.28,199.11 2 1 +github.com/zx06/xsql/internal/output/writer.go:199.11,201.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:202.4,202.17 1 1 +github.com/zx06/xsql/internal/output/writer.go:204.3,204.22 1 1 +github.com/zx06/xsql/internal/output/writer.go:206.2,206.19 1 1 +github.com/zx06/xsql/internal/output/writer.go:210.54,211.14 1 1 +github.com/zx06/xsql/internal/output/writer.go:211.14,213.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:214.2,214.41 1 1 +github.com/zx06/xsql/internal/output/writer.go:214.41,216.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:217.2,217.30 1 1 +github.com/zx06/xsql/internal/output/writer.go:217.30,219.28 2 1 +github.com/zx06/xsql/internal/output/writer.go:219.28,221.11 2 1 +github.com/zx06/xsql/internal/output/writer.go:221.11,223.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:224.4,224.17 1 1 +github.com/zx06/xsql/internal/output/writer.go:226.3,226.22 1 1 +github.com/zx06/xsql/internal/output/writer.go:228.2,228.19 1 1 +github.com/zx06/xsql/internal/output/writer.go:238.59,240.45 1 1 +github.com/zx06/xsql/internal/output/writer.go:240.45,242.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:245.2,245.44 1 1 +github.com/zx06/xsql/internal/output/writer.go:245.44,247.25 2 1 +github.com/zx06/xsql/internal/output/writer.go:247.25,249.39 2 1 +github.com/zx06/xsql/internal/output/writer.go:249.39,251.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:252.4,252.46 1 1 +github.com/zx06/xsql/internal/output/writer.go:252.46,254.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:255.4,255.37 1 1 +github.com/zx06/xsql/internal/output/writer.go:255.37,257.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:258.4,258.39 1 1 +github.com/zx06/xsql/internal/output/writer.go:258.39,260.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:261.4,261.20 1 1 +github.com/zx06/xsql/internal/output/writer.go:261.20,263.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:264.4,264.30 1 1 +github.com/zx06/xsql/internal/output/writer.go:266.3,266.33 1 1 +github.com/zx06/xsql/internal/output/writer.go:270.2,271.46 2 1 +github.com/zx06/xsql/internal/output/writer.go:271.46,273.32 2 1 +github.com/zx06/xsql/internal/output/writer.go:273.32,276.34 2 1 +github.com/zx06/xsql/internal/output/writer.go:276.34,278.5 1 0 +github.com/zx06/xsql/internal/output/writer.go:280.4,280.37 1 1 +github.com/zx06/xsql/internal/output/writer.go:280.37,282.5 1 0 +github.com/zx06/xsql/internal/output/writer.go:283.4,285.80 2 1 +github.com/zx06/xsql/internal/output/writer.go:285.80,287.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:288.4,288.87 1 1 +github.com/zx06/xsql/internal/output/writer.go:288.87,290.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:291.4,291.78 1 1 +github.com/zx06/xsql/internal/output/writer.go:291.78,293.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:294.4,294.80 1 1 +github.com/zx06/xsql/internal/output/writer.go:294.80,296.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:297.4,297.20 1 1 +github.com/zx06/xsql/internal/output/writer.go:297.20,299.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:300.4,300.30 1 1 +github.com/zx06/xsql/internal/output/writer.go:302.3,302.33 1 1 +github.com/zx06/xsql/internal/output/writer.go:306.2,307.9 2 0 +github.com/zx06/xsql/internal/output/writer.go:307.9,309.3 1 0 +github.com/zx06/xsql/internal/output/writer.go:311.2,312.27 2 0 +github.com/zx06/xsql/internal/output/writer.go:312.27,314.10 2 0 +github.com/zx06/xsql/internal/output/writer.go:314.10,316.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:317.3,318.38 2 0 +github.com/zx06/xsql/internal/output/writer.go:318.38,320.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:321.3,321.45 1 0 +github.com/zx06/xsql/internal/output/writer.go:321.45,323.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:324.3,324.36 1 0 +github.com/zx06/xsql/internal/output/writer.go:324.36,326.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:327.3,327.38 1 0 +github.com/zx06/xsql/internal/output/writer.go:327.38,329.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:330.3,330.19 1 0 +github.com/zx06/xsql/internal/output/writer.go:330.19,332.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:333.3,333.29 1 0 +github.com/zx06/xsql/internal/output/writer.go:335.2,335.32 1 0 +github.com/zx06/xsql/internal/output/writer.go:344.65,345.17 1 1 +github.com/zx06/xsql/internal/output/writer.go:345.17,347.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:349.2,350.29 2 1 +github.com/zx06/xsql/internal/output/writer.go:350.29,352.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:353.2,353.32 1 1 +github.com/zx06/xsql/internal/output/writer.go:353.32,355.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:358.2,360.36 3 1 +github.com/zx06/xsql/internal/output/writer.go:360.36,362.57 2 1 +github.com/zx06/xsql/internal/output/writer.go:362.57,364.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:365.3,365.51 1 1 +github.com/zx06/xsql/internal/output/writer.go:365.51,367.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:370.2,370.50 1 1 +github.com/zx06/xsql/internal/output/writer.go:370.50,372.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:375.2,375.39 1 1 +github.com/zx06/xsql/internal/output/writer.go:375.39,377.3 1 0 +github.com/zx06/xsql/internal/output/writer.go:378.2,379.39 2 1 +github.com/zx06/xsql/internal/output/writer.go:379.39,381.36 2 1 +github.com/zx06/xsql/internal/output/writer.go:381.36,383.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:383.9,383.46 1 1 +github.com/zx06/xsql/internal/output/writer.go:383.46,385.11 2 1 +github.com/zx06/xsql/internal/output/writer.go:385.11,387.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:388.4,388.15 1 0 +github.com/zx06/xsql/internal/output/writer.go:389.9,391.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:395.2,395.39 1 1 +github.com/zx06/xsql/internal/output/writer.go:395.39,397.3 1 0 +github.com/zx06/xsql/internal/output/writer.go:398.2,399.39 2 1 +github.com/zx06/xsql/internal/output/writer.go:399.39,401.33 2 1 +github.com/zx06/xsql/internal/output/writer.go:401.33,403.39 2 1 +github.com/zx06/xsql/internal/output/writer.go:403.39,406.12 3 1 +github.com/zx06/xsql/internal/output/writer.go:406.12,408.6 1 1 +github.com/zx06/xsql/internal/output/writer.go:409.5,409.29 1 1 +github.com/zx06/xsql/internal/output/writer.go:411.4,411.17 1 1 +github.com/zx06/xsql/internal/output/writer.go:412.9,412.46 1 0 +github.com/zx06/xsql/internal/output/writer.go:412.46,414.11 2 0 +github.com/zx06/xsql/internal/output/writer.go:414.11,416.5 1 0 +github.com/zx06/xsql/internal/output/writer.go:417.4,417.17 1 0 +github.com/zx06/xsql/internal/output/writer.go:418.9,420.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:423.2,423.58 1 1 +github.com/zx06/xsql/internal/output/writer.go:426.87,434.25 4 1 +github.com/zx06/xsql/internal/output/writer.go:434.25,436.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:437.2,440.27 2 1 +github.com/zx06/xsql/internal/output/writer.go:440.27,442.26 2 1 +github.com/zx06/xsql/internal/output/writer.go:442.26,444.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:445.3,445.52 1 1 +github.com/zx06/xsql/internal/output/writer.go:449.2,451.19 2 1 +github.com/zx06/xsql/internal/output/writer.go:454.54,455.14 1 1 +github.com/zx06/xsql/internal/output/writer.go:455.14,457.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:458.2,458.25 1 1 +github.com/zx06/xsql/internal/output/writer.go:459.14,460.13 1 1 +github.com/zx06/xsql/internal/output/writer.go:461.15,463.33 1 1 +github.com/zx06/xsql/internal/output/writer.go:463.33,465.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:466.3,466.32 1 1 +github.com/zx06/xsql/internal/output/writer.go:467.10,468.32 1 1 +github.com/zx06/xsql/internal/output/writer.go:472.50,476.13 3 1 +github.com/zx06/xsql/internal/output/writer.go:476.13,478.23 1 1 +github.com/zx06/xsql/internal/output/writer.go:478.23,480.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:481.3,481.20 1 1 +github.com/zx06/xsql/internal/output/writer.go:485.2,490.70 4 1 +github.com/zx06/xsql/internal/output/writer.go:490.70,492.3 1 0 +github.com/zx06/xsql/internal/output/writer.go:495.2,495.13 1 1 +github.com/zx06/xsql/internal/output/writer.go:495.13,496.60 1 1 +github.com/zx06/xsql/internal/output/writer.go:496.60,500.4 3 0 +github.com/zx06/xsql/internal/output/writer.go:504.2,504.13 1 1 +github.com/zx06/xsql/internal/output/writer.go:504.13,505.47 1 1 +github.com/zx06/xsql/internal/output/writer.go:505.47,508.11 3 1 +github.com/zx06/xsql/internal/output/writer.go:508.11,510.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:514.2,514.12 1 1 +github.com/zx06/xsql/internal/output/writer.go:514.12,518.28 2 1 +github.com/zx06/xsql/internal/output/writer.go:518.28,520.27 2 1 +github.com/zx06/xsql/internal/output/writer.go:520.27,522.5 1 1 +github.com/zx06/xsql/internal/output/writer.go:523.4,523.22 1 1 +github.com/zx06/xsql/internal/output/writer.go:525.3,525.20 1 1 +github.com/zx06/xsql/internal/output/writer.go:529.2,529.44 1 1 +github.com/zx06/xsql/internal/output/writer.go:529.44,530.38 1 1 +github.com/zx06/xsql/internal/output/writer.go:530.38,532.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:534.2,534.19 1 1 +github.com/zx06/xsql/internal/output/writer.go:537.47,539.19 2 1 +github.com/zx06/xsql/internal/output/writer.go:539.19,541.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:542.2,543.13 2 1 +github.com/zx06/xsql/internal/output/writer.go:547.83,549.20 1 1 +github.com/zx06/xsql/internal/output/writer.go:549.20,551.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:554.2,554.31 1 1 +github.com/zx06/xsql/internal/output/writer.go:554.31,555.12 1 1 +github.com/zx06/xsql/internal/output/writer.go:555.12,557.4 1 0 +github.com/zx06/xsql/internal/output/writer.go:560.3,561.53 2 1 +github.com/zx06/xsql/internal/output/writer.go:561.53,563.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:564.3,564.26 1 1 +github.com/zx06/xsql/internal/output/writer.go:564.26,566.4 1 1 +github.com/zx06/xsql/internal/output/writer.go:567.3,570.29 2 1 +github.com/zx06/xsql/internal/output/writer.go:570.29,575.38 5 1 +github.com/zx06/xsql/internal/output/writer.go:575.38,577.25 2 1 +github.com/zx06/xsql/internal/output/writer.go:577.25,579.6 1 1 +github.com/zx06/xsql/internal/output/writer.go:580.5,581.22 2 1 +github.com/zx06/xsql/internal/output/writer.go:581.22,583.6 1 1 +github.com/zx06/xsql/internal/output/writer.go:584.5,585.23 2 1 +github.com/zx06/xsql/internal/output/writer.go:585.23,587.6 1 1 +github.com/zx06/xsql/internal/output/writer.go:588.5,589.64 1 1 +github.com/zx06/xsql/internal/output/writer.go:591.4,591.18 1 1 +github.com/zx06/xsql/internal/output/writer.go:596.2,597.22 2 1 +github.com/zx06/xsql/internal/output/writer.go:597.22,599.3 1 1 +github.com/zx06/xsql/internal/output/writer.go:600.2,601.12 2 1 +github.com/zx06/xsql/internal/secret/keyring.go:13.34,15.2 1 1 +github.com/zx06/xsql/internal/secret/keyring_windows.go:11.66,13.16 2 1 +github.com/zx06/xsql/internal/secret/keyring_windows.go:13.16,15.3 1 0 +github.com/zx06/xsql/internal/secret/keyring_windows.go:17.2,18.17 2 1 +github.com/zx06/xsql/internal/secret/keyring_windows.go:21.63,23.2 1 1 +github.com/zx06/xsql/internal/secret/keyring_windows.go:25.59,27.2 1 0 +github.com/zx06/xsql/internal/secret/resolve.go:22.80,23.15 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:23.15,27.3 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:28.2,28.33 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:37.65,38.43 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:38.43,41.22 3 1 +github.com/zx06/xsql/internal/secret/resolve.go:41.22,43.4 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:44.3,45.16 2 1 +github.com/zx06/xsql/internal/secret/resolve.go:45.16,47.4 1 0 +github.com/zx06/xsql/internal/secret/resolve.go:48.3,49.17 2 1 +github.com/zx06/xsql/internal/secret/resolve.go:49.17,52.4 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:53.3,53.18 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:56.2,56.25 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:56.25,58.3 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:59.2,59.135 1 1 +github.com/zx06/xsql/internal/secret/resolve.go:63.34,65.2 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:46.81,47.26 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:47.26,49.3 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:50.2,50.24 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:50.24,52.3 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:55.2,57.16 3 1 +github.com/zx06/xsql/internal/proxy/proxy.go:57.16,59.3 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:61.2,87.23 9 1 +github.com/zx06/xsql/internal/proxy/proxy.go:91.70,96.6 3 1 +github.com/zx06/xsql/internal/proxy/proxy.go:96.6,97.10 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:98.23,99.10 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:100.11,102.18 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:102.18,104.12 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:105.25,106.12 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:107.13,109.14 1 0 +github.com/zx06/xsql/internal/proxy/proxy.go:113.4,114.48 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:120.73,122.15 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:122.15,122.40 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:125.2,126.16 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:126.16,128.3 1 0 +github.com/zx06/xsql/internal/proxy/proxy.go:129.2,129.15 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:129.15,129.41 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:132.2,135.12 3 1 +github.com/zx06/xsql/internal/proxy/proxy.go:135.12,138.3 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:140.2,140.12 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:140.12,143.3 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:146.2,147.12 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:147.12,150.3 2 1 +github.com/zx06/xsql/internal/proxy/proxy.go:152.2,152.9 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:153.14,153.14 0 0 +github.com/zx06/xsql/internal/proxy/proxy.go:154.22,154.22 0 1 +github.com/zx06/xsql/internal/proxy/proxy.go:159.30,164.2 4 1 +github.com/zx06/xsql/internal/proxy/proxy.go:167.39,168.23 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:168.23,170.3 1 1 +github.com/zx06/xsql/internal/proxy/proxy.go:171.2,171.11 1 0 +github.com/zx06/xsql/internal/ssh/client.go:23.75,24.21 1 1 +github.com/zx06/xsql/internal/ssh/client.go:24.21,26.3 1 1 +github.com/zx06/xsql/internal/ssh/client.go:27.2,27.20 1 1 +github.com/zx06/xsql/internal/ssh/client.go:27.20,29.3 1 1 +github.com/zx06/xsql/internal/ssh/client.go:30.2,30.21 1 1 +github.com/zx06/xsql/internal/ssh/client.go:30.21,32.22 2 1 +github.com/zx06/xsql/internal/ssh/client.go:32.22,34.4 1 1 +github.com/zx06/xsql/internal/ssh/client.go:37.2,38.15 2 1 +github.com/zx06/xsql/internal/ssh/client.go:38.15,40.3 1 1 +github.com/zx06/xsql/internal/ssh/client.go:42.2,43.15 2 1 +github.com/zx06/xsql/internal/ssh/client.go:43.15,45.3 1 0 +github.com/zx06/xsql/internal/ssh/client.go:47.2,55.16 4 1 +github.com/zx06/xsql/internal/ssh/client.go:55.16,56.62 1 1 +github.com/zx06/xsql/internal/ssh/client.go:56.62,58.4 1 0 +github.com/zx06/xsql/internal/ssh/client.go:59.3,59.127 1 1 +github.com/zx06/xsql/internal/ssh/client.go:61.2,61.37 1 0 +github.com/zx06/xsql/internal/ssh/client.go:65.91,67.2 1 0 +github.com/zx06/xsql/internal/ssh/client.go:70.32,71.21 1 1 +github.com/zx06/xsql/internal/ssh/client.go:71.21,73.3 1 0 +github.com/zx06/xsql/internal/ssh/client.go:74.2,74.12 1 1 +github.com/zx06/xsql/internal/ssh/client.go:77.72,81.29 2 1 +github.com/zx06/xsql/internal/ssh/client.go:81.29,84.17 3 1 +github.com/zx06/xsql/internal/ssh/client.go:84.17,86.4 1 1 +github.com/zx06/xsql/internal/ssh/client.go:87.3,88.28 2 1 +github.com/zx06/xsql/internal/ssh/client.go:88.28,90.4 1 0 +github.com/zx06/xsql/internal/ssh/client.go:90.9,92.4 1 1 +github.com/zx06/xsql/internal/ssh/client.go:93.3,93.17 1 1 +github.com/zx06/xsql/internal/ssh/client.go:93.17,95.4 1 0 +github.com/zx06/xsql/internal/ssh/client.go:96.3,96.52 1 1 +github.com/zx06/xsql/internal/ssh/client.go:100.2,100.23 1 1 +github.com/zx06/xsql/internal/ssh/client.go:100.23,101.69 1 1 +github.com/zx06/xsql/internal/ssh/client.go:101.69,103.56 2 1 +github.com/zx06/xsql/internal/ssh/client.go:103.56,104.64 1 1 +github.com/zx06/xsql/internal/ssh/client.go:104.64,106.11 2 1 +github.com/zx06/xsql/internal/ssh/client.go:112.2,112.23 1 1 +github.com/zx06/xsql/internal/ssh/client.go:112.23,114.3 1 0 +github.com/zx06/xsql/internal/ssh/client.go:115.2,115.21 1 1 +github.com/zx06/xsql/internal/ssh/client.go:118.79,119.30 1 1 +github.com/zx06/xsql/internal/ssh/client.go:119.30,121.3 1 1 +github.com/zx06/xsql/internal/ssh/client.go:122.2,123.18 2 1 +github.com/zx06/xsql/internal/ssh/client.go:123.18,125.3 1 1 +github.com/zx06/xsql/internal/ssh/client.go:126.2,128.16 3 1 +github.com/zx06/xsql/internal/ssh/client.go:128.16,129.25 1 1 +github.com/zx06/xsql/internal/ssh/client.go:129.25,131.4 1 1 +github.com/zx06/xsql/internal/ssh/client.go:132.3,132.125 1 0 +github.com/zx06/xsql/internal/ssh/client.go:134.2,134.16 1 1 +github.com/zx06/xsql/internal/ssh/client.go:137.34,138.32 1 1 +github.com/zx06/xsql/internal/ssh/client.go:138.32,141.3 2 1 +github.com/zx06/xsql/internal/ssh/client.go:142.2,142.10 1 1 +github.com/zx06/xsql/internal/ssh/options.go:16.37,18.2 1 1 diff --git a/internal/mcp/streamable_http.go b/internal/mcp/streamable_http.go index 171e001..864ecc3 100644 --- a/internal/mcp/streamable_http.go +++ b/internal/mcp/streamable_http.go @@ -1,9 +1,11 @@ package mcp import ( + "context" "crypto/subtle" "net/http" "strings" + "time" "github.com/modelcontextprotocol/go-sdk/mcp" @@ -20,10 +22,15 @@ const ( bearerPrefix = "Bearer " unauthorized = "unauthorized" headerMissing = "authorization header is required" + + DefaultHTTPTimeout = 60 * time.Second ) -// NewStreamableHTTPHandler creates a streamable HTTP handler with required auth. func NewStreamableHTTPHandler(server *mcp.Server, authToken string) (http.Handler, error) { + return NewStreamableHTTPHandlerWithTimeout(server, authToken, DefaultHTTPTimeout) +} + +func NewStreamableHTTPHandlerWithTimeout(server *mcp.Server, authToken string, timeout time.Duration) (http.Handler, error) { if server == nil { return nil, errors.New(errors.CodeInternal, "mcp server is nil", nil) } @@ -33,7 +40,16 @@ func NewStreamableHTTPHandler(server *mcp.Server, authToken string) (http.Handle handler := mcp.NewStreamableHTTPHandler(func(*http.Request) *mcp.Server { return server }, &mcp.StreamableHTTPOptions{JSONResponse: true}) - return requireAuth(handler, authToken), nil + authHandler := requireAuth(handler, authToken) + return withTimeout(authHandler, timeout), nil +} + +func withTimeout(next http.Handler, timeout time.Duration) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + ctx, cancel := context.WithTimeout(req.Context(), timeout) + defer cancel() + next.ServeHTTP(w, req.WithContext(ctx)) + }) } func requireAuth(next http.Handler, token string) http.Handler { diff --git a/internal/mcp/tools.go b/internal/mcp/tools.go index 589d6a7..ce58005 100644 --- a/internal/mcp/tools.go +++ b/internal/mcp/tools.go @@ -463,7 +463,10 @@ func (h *ToolHandler) formatError(err error) string { "details": xe.Details, }, } - jsonData, _ := json.MarshalIndent(output, "", " ") + jsonData, jsonErr := json.MarshalIndent(output, "", " ") + if jsonErr != nil { + return `{"ok":false,"error":{"code":"XSQL_INTERNAL","message":"failed to format error"}}` + } return string(jsonData) } diff --git a/internal/output/writer.go b/internal/output/writer.go index fbbb07f..0093f4c 100644 --- a/internal/output/writer.go +++ b/internal/output/writer.go @@ -152,9 +152,12 @@ func writeTable(out io.Writer, env Envelope) error { _, _ = fmt.Fprintf(tw, "%s\t%v\n", k, m[k]) } } else { - // 只有这里不得已才使用 JSON 格式化 - b, _ := json.MarshalIndent(env.Data, "", " ") - _, _ = fmt.Fprintf(tw, "%s\n", b) + b, err := json.MarshalIndent(env.Data, "", " ") + if err == nil { + _, _ = fmt.Fprintf(tw, "%s\n", b) + } else { + _, _ = fmt.Fprintf(tw, "%v\n", env.Data) + } } } return tw.Flush() From fcfd84d6144bc00010c85876051ffe22b5242ee6 Mon Sep 17 00:00:00 2001 From: zx06 <12474586+zx06@users.noreply.github.com> Date: Sun, 22 Mar 2026 19:48:12 +0800 Subject: [PATCH 2/6] test: add SSH CLI flag tests and passphrase tests, timeout config - Add passphrase-protected key tests (correct/wrong passphrase) - Add E2E tests for SSH CLI flags (--ssh-skip-known-hosts-check, --ssh-identity-file, --ssh-user, --ssh-host) - Add configurable query timeout (--query-timeout flag, profile config) - Add configurable schema timeout (--schema-timeout flag, profile config) - Add query_timeout and schema_timeout fields to Profile config --- cmd/xsql/query.go | 15 +++- cmd/xsql/schema.go | 23 +++-- internal/config/types.go | 4 + internal/ssh/client_test.go | 52 ++++++++++- tests/e2e/ssh_cli_flags_test.go | 147 ++++++++++++++++++++++++++++++++ 5 files changed, 233 insertions(+), 8 deletions(-) create mode 100644 tests/e2e/ssh_cli_flags_test.go diff --git a/cmd/xsql/query.go b/cmd/xsql/query.go index 72ce167..5088d20 100644 --- a/cmd/xsql/query.go +++ b/cmd/xsql/query.go @@ -16,11 +16,15 @@ import ( "github.com/zx06/xsql/internal/ssh" ) +const DefaultQueryTimeout = 30 * time.Second + // QueryFlags holds the flags for the query command type QueryFlags struct { UnsafeAllowWrite bool AllowPlaintext bool SSHSkipHostKey bool + QueryTimeout int + QueryTimeoutSet bool } // NewQueryCommand creates the query command @@ -32,6 +36,7 @@ func NewQueryCommand(w *output.Writer) *cobra.Command { Short: "Execute a SQL query (read-only by default)", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { + flags.QueryTimeoutSet = cmd.Flags().Changed("query-timeout") return runQuery(cmd, args, flags, w) }, } @@ -39,6 +44,7 @@ func NewQueryCommand(w *output.Writer) *cobra.Command { cmd.Flags().BoolVar(&flags.UnsafeAllowWrite, "unsafe-allow-write", false, "Allow write operations (bypasses read-only protection)") cmd.Flags().BoolVar(&flags.AllowPlaintext, "allow-plaintext", false, "Allow plaintext secrets in config") cmd.Flags().BoolVar(&flags.SSHSkipHostKey, "ssh-skip-known-hosts-check", false, "Skip SSH known_hosts check (dangerous)") + cmd.Flags().IntVar(&flags.QueryTimeout, "query-timeout", 0, "Query timeout in seconds (default: 30)") return cmd } @@ -69,7 +75,14 @@ func runQuery(cmd *cobra.Command, args []string, flags *QueryFlags, w *output.Wr password = pw } - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + // Query timeout: CLI flag > profile config > default (30s) + timeout := DefaultQueryTimeout + if flags.QueryTimeoutSet && flags.QueryTimeout > 0 { + timeout = time.Duration(flags.QueryTimeout) * time.Second + } else if p.QueryTimeout > 0 { + timeout = time.Duration(p.QueryTimeout) * time.Second + } + ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() // SSH proxy (if configured) diff --git a/cmd/xsql/schema.go b/cmd/xsql/schema.go index 649ea7a..6496b36 100644 --- a/cmd/xsql/schema.go +++ b/cmd/xsql/schema.go @@ -14,12 +14,16 @@ import ( "github.com/zx06/xsql/internal/secret" ) +const DefaultSchemaTimeout = 60 * time.Second + // SchemaFlags holds the flags for the schema command type SchemaFlags struct { - TablePattern string - IncludeSystem bool - AllowPlaintext bool - SSHSkipHostKey bool + TablePattern string + IncludeSystem bool + AllowPlaintext bool + SSHSkipHostKey bool + SchemaTimeout int + SchemaTimeoutSet bool } // NewSchemaCommand creates the schema command @@ -43,6 +47,7 @@ func NewSchemaDumpCommand(w *output.Writer, flags *SchemaFlags) *cobra.Command { Use: "dump", Short: "Dump database schema (tables, columns, indexes, foreign keys)", RunE: func(cmd *cobra.Command, args []string) error { + flags.SchemaTimeoutSet = cmd.Flags().Changed("schema-timeout") return runSchemaDump(cmd, args, flags, w) }, } @@ -51,6 +56,7 @@ func NewSchemaDumpCommand(w *output.Writer, flags *SchemaFlags) *cobra.Command { cmd.Flags().BoolVar(&flags.IncludeSystem, "include-system", false, "Include system tables") cmd.Flags().BoolVar(&flags.AllowPlaintext, "allow-plaintext", false, "Allow plaintext secrets in config") cmd.Flags().BoolVar(&flags.SSHSkipHostKey, "ssh-skip-known-hosts-check", false, "Skip SSH known_hosts check (dangerous)") + cmd.Flags().IntVar(&flags.SchemaTimeout, "schema-timeout", 0, "Schema dump timeout in seconds (default: 60)") return cmd } @@ -80,7 +86,14 @@ func runSchemaDump(cmd *cobra.Command, args []string, flags *SchemaFlags, w *out password = pw } - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + // Schema timeout: CLI flag > profile config > default (60s) + timeout := DefaultSchemaTimeout + if flags.SchemaTimeoutSet && flags.SchemaTimeout > 0 { + timeout = time.Duration(flags.SchemaTimeout) * time.Second + } else if p.SchemaTimeout > 0 { + timeout = time.Duration(p.SchemaTimeout) * time.Second + } + ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() // SSH proxy (if configured) diff --git a/internal/config/types.go b/internal/config/types.go index e77896d..404a98b 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -36,6 +36,10 @@ type Profile struct { AllowPlaintext bool `yaml:"allow_plaintext"` // 允许明文密码 UnsafeAllowWrite bool `yaml:"unsafe_allow_write"` // 允许写操作(绕过只读保护) + // 超时配置(秒) + QueryTimeout int `yaml:"query_timeout"` // 查询超时,默认 30 秒 + SchemaTimeout int `yaml:"schema_timeout"` // Schema 导出超时,默认 60 秒 + // SSH proxy 引用(引用 ssh_proxies 中定义的名称) SSHProxy string `yaml:"ssh_proxy"` diff --git a/internal/ssh/client_test.go b/internal/ssh/client_test.go index 982528c..3e615f3 100644 --- a/internal/ssh/client_test.go +++ b/internal/ssh/client_test.go @@ -336,14 +336,25 @@ func TestClientClose_NoClient(t *testing.T) { func writeTestKey(t *testing.T, dir, name string) string { t.Helper() + return writeTestKeyWithPassphrase(t, dir, name, "") +} + +func writeTestKeyWithPassphrase(t *testing.T, dir, name, passphrase string) string { + t.Helper() key, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { t.Fatalf("failed to generate key: %v", err) } - keyBytes := x509.MarshalPKCS1PrivateKey(key) - pemBytes := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: keyBytes}) + var pemBytes []byte + if passphrase != "" { + block, _ := ssh.MarshalPrivateKeyWithPassphrase(key, passphrase, []byte(passphrase)) + pemBytes = pem.EncodeToMemory(block) + } else { + keyBytes := x509.MarshalPKCS1PrivateKey(key) + pemBytes = pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: keyBytes}) + } path := filepath.Join(dir, name) if err := os.WriteFile(path, pemBytes, 0600); err != nil { t.Fatalf("failed to write key: %v", err) @@ -351,6 +362,43 @@ func writeTestKey(t *testing.T, dir, name string) string { return path } +func TestBuildAuthMethods_WithPassphrase(t *testing.T) { + keyPath := writeTestKeyWithPassphrase(t, t.TempDir(), "id_rsa_passphrase", "testpassphrase") + + opts := Options{ + IdentityFile: keyPath, + Passphrase: "testpassphrase", + } + + methods, xe := buildAuthMethods(opts) + if xe != nil { + t.Fatalf("unexpected error: %v", xe) + } + if len(methods) == 0 { + t.Fatal("expected auth methods") + } +} + +func TestBuildAuthMethods_WithWrongPassphrase(t *testing.T) { + keyPath := writeTestKeyWithPassphrase(t, t.TempDir(), "id_rsa_wrong_pass", "correctpassphrase") + + opts := Options{ + IdentityFile: keyPath, + Passphrase: "wrongpassphrase", + } + + methods, xe := buildAuthMethods(opts) + if xe == nil { + t.Fatal("expected error for wrong passphrase") + } + if xe.Code != errors.CodeCfgInvalid && xe.Code != errors.CodeSSHAuthFailed { + t.Errorf("expected CodeCfgInvalid or CodeSSHAuthFailed, got %s", xe.Code) + } + if len(methods) != 0 { + t.Error("expected no auth methods for wrong passphrase") + } +} + // Helper function to check if a path contains another path component (cross-platform) func containsPath(path, component string) bool { p := filepath.ToSlash(filepath.Clean(path)) diff --git a/tests/e2e/ssh_cli_flags_test.go b/tests/e2e/ssh_cli_flags_test.go new file mode 100644 index 0000000..a2d29cb --- /dev/null +++ b/tests/e2e/ssh_cli_flags_test.go @@ -0,0 +1,147 @@ +//go:build e2e + +package e2e + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" +) + +func TestSSH_SkipKnownHostsCheckFlag(t *testing.T) { + tmpDir := t.TempDir() + configPath := filepath.Join(tmpDir, "xsql.yaml") + configContent := ` +ssh_proxies: + test_ssh: + host: localhost + port: 22 + user: testuser + identity_file: /nonexistent/key + +profiles: + test: + db: mysql + host: localhost + ssh_proxy: test_ssh +` + if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil { + t.Fatal(err) + } + + stdout, _, exitCode := runXSQL(t, "query", "SELECT 1", + "--config", configPath, + "--profile", "test", + "--format", "json", + "--ssh-skip-known-hosts-check") + + var resp Response + if err := json.Unmarshal([]byte(stdout), &resp); err != nil { + t.Fatalf("invalid JSON: %v\noutput: %s", err, stdout) + } + + if exitCode == 0 { + t.Log("Query succeeded with SSH proxy") + } else { + if resp.Error != nil && resp.Error.Code == "XSQL_SSH_HOSTKEY_MISMATCH" { + t.Error("should not get XSQL_SSH_HOSTKEY_MISMATCH when --ssh-skip-known-hosts-check is set") + } + } +} + +func TestSSH_IdentityFileFlagOverride(t *testing.T) { + tmpDir := t.TempDir() + configPath := filepath.Join(tmpDir, "xsql.yaml") + configContent := ` +ssh_proxies: + test_ssh: + host: localhost + port: 22 + user: testuser + identity_file: /nonexistent/config_key + +profiles: + test: + db: mysql + host: localhost + ssh_proxy: test_ssh +` + if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil { + t.Fatal(err) + } + + _, _, exitCode := runXSQL(t, "query", "SELECT 1", + "--config", configPath, + "--profile", "test", + "--format", "json", + "--ssh-identity-file", "/nonexistent/cli_key") + + if exitCode == 0 { + t.Log("Query succeeded with SSH proxy") + } else { + t.Log("Query failed (expected without real SSH server)") + } +} + +func TestSSH_UserFlagOverride(t *testing.T) { + tmpDir := t.TempDir() + configPath := filepath.Join(tmpDir, "xsql.yaml") + configContent := ` +ssh_proxies: + test_ssh: + host: localhost + port: 22 + user: config_user + identity_file: /nonexistent/key + +profiles: + test: + db: mysql + host: localhost + ssh_proxy: test_ssh +` + if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil { + t.Fatal(err) + } + + _, _, exitCode := runXSQL(t, "query", "SELECT 1", + "--config", configPath, + "--profile", "test", + "--format", "json", + "--ssh-user", "cli_user") + + if exitCode == 0 { + t.Log("Query succeeded with SSH proxy") + } else { + t.Log("Query failed (expected without real SSH server)") + } +} + +func TestSSH_HostFlag(t *testing.T) { + tmpDir := t.TempDir() + configPath := filepath.Join(tmpDir, "xsql.yaml") + configContent := ` +profiles: + test: + db: mysql + host: localhost +` + if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil { + t.Fatal(err) + } + + _, _, exitCode := runXSQL(t, "query", "SELECT 1", + "--config", configPath, + "--profile", "test", + "--format", "json", + "--ssh-host", "example.com", + "--ssh-user", "test", + "--ssh-skip-known-hosts-check") + + if exitCode == 0 { + t.Log("Query succeeded with SSH proxy") + } else { + t.Log("Query failed (expected without real SSH server)") + } +} From 1249868fb6c8e4114fb4fe44cf453e5ecaef367e Mon Sep 17 00:00:00 2001 From: zx06 <12474586+zx06@users.noreply.github.com> Date: Sun, 22 Mar 2026 19:53:34 +0800 Subject: [PATCH 3/6] refactor: consolidate profileInfo and update docs - Add shared ProfileInfo struct and ProfileToInfo helper to config package - Update cmd/xsql/profile.go to use shared ProfileInfo - Update internal/mcp/tools.go to use shared ProfileInfo - Add SSH testing documentation to docs/testing.md - Add timeout configuration to docs/config.md --- cmd/xsql/profile.go | 20 ++------------ docs/config.md | 9 +++++++ docs/testing.md | 56 +++++++++++++++++++++++++++++++++++++++- internal/config/types.go | 20 ++++++++++++++ internal/mcp/tools.go | 21 ++------------- 5 files changed, 88 insertions(+), 38 deletions(-) diff --git a/cmd/xsql/profile.go b/cmd/xsql/profile.go index b5d9879..6a8035a 100644 --- a/cmd/xsql/profile.go +++ b/cmd/xsql/profile.go @@ -39,25 +39,9 @@ func newProfileListCommand(w *output.Writer) *cobra.Command { return xe } - type profileInfo struct { - Name string `json:"name"` - Description string `json:"description,omitempty"` - DB string `json:"db"` - Mode string `json:"mode"` // "read-only" or "read-write" - } - - profiles := make([]profileInfo, 0, len(cfg.Profiles)) + profiles := make([]config.ProfileInfo, 0, len(cfg.Profiles)) for name, p := range cfg.Profiles { - mode := "read-only" - if p.UnsafeAllowWrite { - mode = "read-write" - } - profiles = append(profiles, profileInfo{ - Name: name, - Description: p.Description, - DB: p.DB, - Mode: mode, - }) + profiles = append(profiles, config.ProfileToInfo(name, p)) } result := map[string]any{ diff --git a/docs/config.md b/docs/config.md index f2e0760..b1101a0 100644 --- a/docs/config.md +++ b/docs/config.md @@ -131,6 +131,15 @@ profiles: | `allow_plaintext` | bool | 允许明文密码(默认 false) | | `format` | string | 输出格式:json/yaml/table/csv/auto | | `ssh_proxy` | string | SSH 代理名称(引用 `ssh_proxies` 中定义的名称) | +| `query_timeout` | int | 查询超时秒数(默认 30 秒) | +| `schema_timeout` | int | Schema 导出超时秒数(默认 60 秒) | + +## CLI Timeout Flags + +| Flag | 说明 | +|------|------| +| `--query-timeout ` | 查询超时(覆盖 profile 配置) | +| `--schema-timeout ` | Schema 导出超时(覆盖 profile 配置) | ## Secrets diff --git a/docs/testing.md b/docs/testing.md index 1d3bc45..5dac9b9 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -197,6 +197,59 @@ func TestMain(m *testing.M) { --- +## SSH 测试 + +### 单元测试 +SSH 客户端单元测试位于 `internal/ssh/client_test.go`,测试: +- 路径扩展(tilde expansion) +- 认证方法构建(私钥、默认密钥查找) +- known_hosts 校验 +- SSH dial 失败错误码返回 +- Passphrase 保护的密钥(正确/错误 passphrase) + +```bash +# 运行 SSH 单元测试 +go test -v ./internal/ssh/... +``` + +### E2E SSH 测试 + +#### CLI Flags 测试 +测试 SSH CLI flags 与配置文件的合并行为: +- `--ssh-skip-known-hosts-check` +- `--ssh-identity-file` +- `--ssh-user` +- `--ssh-host` + +```bash +# 运行 SSH CLI flag 测试 +go test -tags=e2e -v -run "SSH" ./tests/e2e/... +``` + +#### 真实 SSH 测试 +需要真实 SSH 服务器的测试(跳过如果环境未配置): +- `ssh_proxy_success_test.go` + +设置环境变量: +```bash +export SSH_TEST_HOST=your-ssh-server +export SSH_TEST_PORT=22 +export SSH_TEST_USER=your-user +export SSH_TEST_KEY_PATH=/path/to/private/key +export SSH_KNOWN_HOSTS_FILE=/path/to/known_hosts # 可选 + +# 可选:MySQL/PG over SSH +export XSQL_TEST_MYSQL_DSN="..." +export XSQL_TEST_PG_DSN="..." +``` + +### 注意事项 +- SSH 代理测试需要可访问的 SSH 服务器 +- 使用 `SkipKnownHostsCheck: true` 进行测试,避免 known_hosts 问题 +- SSH 密钥应有适当的权限(600 或 400) + +--- + ## E2E 测试 ### 定位 @@ -213,7 +266,8 @@ tests/e2e/ ├── profile_test.go # profile 命令测试 ├── proxy_test.go # proxy 命令测试 ├── readonly_test.go # 只读策略测试 - └── ssh_proxy_success_test.go # SSH 代理成功测试 + ├── ssh_cli_flags_test.go # SSH CLI flags 测试 + └── ssh_proxy_success_test.go # SSH 代理成功测试(需要真实 SSH) ``` ### 运行测试 diff --git a/internal/config/types.go b/internal/config/types.go index 404a98b..9aa09ea 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -87,3 +87,23 @@ type Options struct { // WorkDir 用于默认路径(为空则使用进程当前工作目录)。 WorkDir string } + +type ProfileInfo struct { + Name string `json:"name"` + Description string `json:"description,omitempty"` + DB string `json:"db"` + Mode string `json:"mode"` // "read-only" or "read-write" +} + +func ProfileToInfo(name string, p Profile) ProfileInfo { + mode := "read-only" + if p.UnsafeAllowWrite { + mode = "read-write" + } + return ProfileInfo{ + Name: name, + Description: p.Description, + DB: p.DB, + Mode: mode, + } +} diff --git a/internal/mcp/tools.go b/internal/mcp/tools.go index ce58005..8c11c5c 100644 --- a/internal/mcp/tools.go +++ b/internal/mcp/tools.go @@ -309,25 +309,9 @@ func (h *ToolHandler) Query(ctx context.Context, req *mcp.CallToolRequest, input // ProfileList lists all profiles func (h *ToolHandler) ProfileList(ctx context.Context, req *mcp.CallToolRequest, input struct{}) (*mcp.CallToolResult, any, error) { - type profileInfo struct { - Name string `json:"name"` - Description string `json:"description,omitempty"` - DB string `json:"db"` - Mode string `json:"mode"` - } - - profiles := make([]profileInfo, 0, len(h.config.Profiles)) + profiles := make([]config.ProfileInfo, 0, len(h.config.Profiles)) for name, p := range h.config.Profiles { - mode := "read-only" - if p.UnsafeAllowWrite { - mode = "read-write" - } - profiles = append(profiles, profileInfo{ - Name: name, - Description: p.Description, - DB: p.DB, - Mode: mode, - }) + profiles = append(profiles, config.ProfileToInfo(name, p)) } output := map[string]any{ @@ -347,7 +331,6 @@ func (h *ToolHandler) ProfileList(ctx context.Context, req *mcp.CallToolRequest, }, nil, nil } - // Return result directly in content per RFC return &mcp.CallToolResult{ Content: []mcp.Content{ &mcp.TextContent{Text: string(jsonData)}, From 96675ca5f9cfed004ae94f0d6a9fddc93209e3ea Mon Sep 17 00:00:00 2001 From: zx06 <12474586+zx06@users.noreply.github.com> Date: Sun, 22 Mar 2026 20:17:29 +0800 Subject: [PATCH 4/6] chore: retrigger CI From 322b90994242786338095618e82469ec33185adc Mon Sep 17 00:00:00 2001 From: zx06 <12474586+zx06@users.noreply.github.com> Date: Sun, 22 Mar 2026 20:21:35 +0800 Subject: [PATCH 5/6] chore: add workflow_dispatch trigger to CI --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ac04e73..b890771 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,6 +5,7 @@ on: branches: [main] pull_request: branches: [main] + workflow_dispatch: permissions: contents: read From c63ac09b4bb31f9a28e1a6939bc518cf86ff641d Mon Sep 17 00:00:00 2001 From: xuzhuo Date: Mon, 23 Mar 2026 20:02:54 +0800 Subject: [PATCH 6/6] =?UTF-8?q?chore:=E5=88=A0=E9=99=A4=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E7=8E=87=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cover_app | 54 --- coverage.out | 922 --------------------------------------------------- 2 files changed, 976 deletions(-) delete mode 100644 cover_app delete mode 100644 coverage.out diff --git a/cover_app b/cover_app deleted file mode 100644 index 249af7c..0000000 --- a/cover_app +++ /dev/null @@ -1,54 +0,0 @@ -mode: set -github.com/zx06/xsql/internal/app/app.go:15.44,17.2 1 1 -github.com/zx06/xsql/internal/app/app.go:19.36,80.2 2 1 -github.com/zx06/xsql/internal/app/app.go:88.40,90.2 1 1 -github.com/zx06/xsql/internal/app/conn.go:21.36,23.17 2 1 -github.com/zx06/xsql/internal/app/conn.go:23.17,24.38 1 0 -github.com/zx06/xsql/internal/app/conn.go:24.38,26.4 1 0 -github.com/zx06/xsql/internal/app/conn.go:28.2,28.24 1 1 -github.com/zx06/xsql/internal/app/conn.go:28.24,29.45 1 0 -github.com/zx06/xsql/internal/app/conn.go:29.45,31.4 1 0 -github.com/zx06/xsql/internal/app/conn.go:33.2,33.34 1 1 -github.com/zx06/xsql/internal/app/conn.go:33.34,34.16 1 1 -github.com/zx06/xsql/internal/app/conn.go:34.16,36.4 1 1 -github.com/zx06/xsql/internal/app/conn.go:38.2,38.19 1 1 -github.com/zx06/xsql/internal/app/conn.go:38.19,40.3 1 0 -github.com/zx06/xsql/internal/app/conn.go:41.2,41.12 1 1 -github.com/zx06/xsql/internal/app/conn.go:50.99,54.20 3 1 -github.com/zx06/xsql/internal/app/conn.go:54.20,56.16 2 1 -github.com/zx06/xsql/internal/app/conn.go:56.16,58.4 1 1 -github.com/zx06/xsql/internal/app/conn.go:59.3,59.16 1 1 -github.com/zx06/xsql/internal/app/conn.go:62.2,63.35 2 1 -github.com/zx06/xsql/internal/app/conn.go:63.35,65.23 2 0 -github.com/zx06/xsql/internal/app/conn.go:65.23,67.17 2 0 -github.com/zx06/xsql/internal/app/conn.go:67.17,69.5 1 0 -github.com/zx06/xsql/internal/app/conn.go:70.4,70.19 1 0 -github.com/zx06/xsql/internal/app/conn.go:73.3,83.16 3 0 -github.com/zx06/xsql/internal/app/conn.go:83.16,85.4 1 0 -github.com/zx06/xsql/internal/app/conn.go:86.3,86.17 1 0 -github.com/zx06/xsql/internal/app/conn.go:89.2,90.9 2 1 -github.com/zx06/xsql/internal/app/conn.go:90.9,91.23 1 1 -github.com/zx06/xsql/internal/app/conn.go:91.23,93.4 1 0 -github.com/zx06/xsql/internal/app/conn.go:94.3,94.121 1 1 -github.com/zx06/xsql/internal/app/conn.go:97.2,105.38 2 1 -github.com/zx06/xsql/internal/app/conn.go:105.38,106.17 1 1 -github.com/zx06/xsql/internal/app/conn.go:106.17,108.5 1 1 -github.com/zx06/xsql/internal/app/conn.go:111.2,111.22 1 1 -github.com/zx06/xsql/internal/app/conn.go:111.22,113.3 1 0 -github.com/zx06/xsql/internal/app/conn.go:115.2,116.15 2 1 -github.com/zx06/xsql/internal/app/conn.go:116.15,117.23 1 1 -github.com/zx06/xsql/internal/app/conn.go:117.23,119.4 1 0 -github.com/zx06/xsql/internal/app/conn.go:120.3,120.33 1 1 -github.com/zx06/xsql/internal/app/conn.go:120.33,121.17 1 1 -github.com/zx06/xsql/internal/app/conn.go:121.17,123.5 1 1 -github.com/zx06/xsql/internal/app/conn.go:125.3,125.17 1 1 -github.com/zx06/xsql/internal/app/conn.go:128.2,133.8 1 1 -github.com/zx06/xsql/internal/app/conn.go:136.131,137.30 1 1 -github.com/zx06/xsql/internal/app/conn.go:137.30,139.3 1 1 -github.com/zx06/xsql/internal/app/conn.go:141.2,142.22 2 1 -github.com/zx06/xsql/internal/app/conn.go:142.22,144.16 2 1 -github.com/zx06/xsql/internal/app/conn.go:144.16,146.4 1 1 -github.com/zx06/xsql/internal/app/conn.go:147.3,147.18 1 1 -github.com/zx06/xsql/internal/app/conn.go:150.2,161.15 3 1 -github.com/zx06/xsql/internal/app/conn.go:161.15,163.3 1 1 -github.com/zx06/xsql/internal/app/conn.go:165.2,165.16 1 0 diff --git a/coverage.out b/coverage.out deleted file mode 100644 index 9c173ea..0000000 --- a/coverage.out +++ /dev/null @@ -1,922 +0,0 @@ -mode: set -github.com/zx06/xsql/internal/app/app.go:15.44,17.2 1 1 -github.com/zx06/xsql/internal/app/app.go:19.36,80.2 2 1 -github.com/zx06/xsql/internal/app/app.go:88.40,90.2 1 1 -github.com/zx06/xsql/internal/db/query.go:17.88,18.14 1 1 -github.com/zx06/xsql/internal/db/query.go:18.14,20.3 1 1 -github.com/zx06/xsql/internal/db/query.go:21.2,21.32 1 1 -github.com/zx06/xsql/internal/db/query.go:35.109,37.27 1 0 -github.com/zx06/xsql/internal/db/query.go:37.27,39.3 1 0 -github.com/zx06/xsql/internal/db/query.go:43.2,43.52 1 0 -github.com/zx06/xsql/internal/db/query.go:43.52,45.3 1 0 -github.com/zx06/xsql/internal/db/query.go:47.2,47.57 1 0 -github.com/zx06/xsql/internal/db/query.go:51.119,53.16 2 0 -github.com/zx06/xsql/internal/db/query.go:53.16,55.3 1 0 -github.com/zx06/xsql/internal/db/query.go:56.2,56.15 1 0 -github.com/zx06/xsql/internal/db/query.go:56.15,59.3 1 0 -github.com/zx06/xsql/internal/db/query.go:61.2,62.16 2 0 -github.com/zx06/xsql/internal/db/query.go:62.16,64.3 1 0 -github.com/zx06/xsql/internal/db/query.go:65.2,67.23 2 0 -github.com/zx06/xsql/internal/db/query.go:71.97,73.16 2 0 -github.com/zx06/xsql/internal/db/query.go:73.16,75.3 1 0 -github.com/zx06/xsql/internal/db/query.go:76.2,78.23 2 0 -github.com/zx06/xsql/internal/db/query.go:82.62,84.16 2 0 -github.com/zx06/xsql/internal/db/query.go:84.16,86.3 1 0 -github.com/zx06/xsql/internal/db/query.go:88.2,89.18 2 0 -github.com/zx06/xsql/internal/db/query.go:89.18,92.23 3 0 -github.com/zx06/xsql/internal/db/query.go:92.23,94.4 1 0 -github.com/zx06/xsql/internal/db/query.go:95.3,95.44 1 0 -github.com/zx06/xsql/internal/db/query.go:95.44,97.4 1 0 -github.com/zx06/xsql/internal/db/query.go:98.3,99.26 2 0 -github.com/zx06/xsql/internal/db/query.go:99.26,101.4 1 0 -github.com/zx06/xsql/internal/db/query.go:102.3,102.41 1 0 -github.com/zx06/xsql/internal/db/query.go:104.2,104.35 1 0 -github.com/zx06/xsql/internal/db/query.go:104.35,106.3 1 0 -github.com/zx06/xsql/internal/db/query.go:107.2,107.20 1 0 -github.com/zx06/xsql/internal/db/query.go:110.30,111.25 1 1 -github.com/zx06/xsql/internal/db/query.go:112.14,113.21 1 1 -github.com/zx06/xsql/internal/db/query.go:114.10,115.13 1 1 -github.com/zx06/xsql/internal/db/readonly.go:77.47,79.15 2 1 -github.com/zx06/xsql/internal/db/readonly.go:79.15,81.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:85.2,86.19 2 1 -github.com/zx06/xsql/internal/db/readonly.go:86.19,88.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:89.2,89.41 1 1 -github.com/zx06/xsql/internal/db/readonly.go:89.41,91.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:94.2,95.16 2 1 -github.com/zx06/xsql/internal/db/readonly.go:95.16,97.3 1 0 -github.com/zx06/xsql/internal/db/readonly.go:100.2,100.40 1 1 -github.com/zx06/xsql/internal/db/readonly.go:100.40,102.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:105.2,106.29 2 1 -github.com/zx06/xsql/internal/db/readonly.go:106.29,107.31 1 1 -github.com/zx06/xsql/internal/db/readonly.go:107.31,109.9 2 1 -github.com/zx06/xsql/internal/db/readonly.go:113.2,113.24 1 1 -github.com/zx06/xsql/internal/db/readonly.go:113.24,115.3 1 0 -github.com/zx06/xsql/internal/db/readonly.go:118.2,118.41 1 1 -github.com/zx06/xsql/internal/db/readonly.go:118.41,120.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:123.2,123.29 1 1 -github.com/zx06/xsql/internal/db/readonly.go:123.29,124.63 1 1 -github.com/zx06/xsql/internal/db/readonly.go:124.63,127.4 1 1 -github.com/zx06/xsql/internal/db/readonly.go:131.2,131.32 1 1 -github.com/zx06/xsql/internal/db/readonly.go:131.32,133.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:136.2,136.28 1 1 -github.com/zx06/xsql/internal/db/readonly.go:136.28,137.28 1 1 -github.com/zx06/xsql/internal/db/readonly.go:137.28,139.4 1 0 -github.com/zx06/xsql/internal/db/readonly.go:142.2,142.27 1 1 -github.com/zx06/xsql/internal/db/readonly.go:145.49,147.29 2 1 -github.com/zx06/xsql/internal/db/readonly.go:147.29,148.31 1 1 -github.com/zx06/xsql/internal/db/readonly.go:148.31,150.4 1 1 -github.com/zx06/xsql/internal/db/readonly.go:153.2,154.64 1 1 -github.com/zx06/xsql/internal/db/readonly.go:157.63,158.47 1 1 -github.com/zx06/xsql/internal/db/readonly.go:158.47,160.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:161.2,161.47 1 1 -github.com/zx06/xsql/internal/db/readonly.go:161.47,163.22 2 1 -github.com/zx06/xsql/internal/db/readonly.go:163.22,164.31 1 1 -github.com/zx06/xsql/internal/db/readonly.go:164.31,166.10 2 1 -github.com/zx06/xsql/internal/db/readonly.go:169.3,169.12 1 1 -github.com/zx06/xsql/internal/db/readonly.go:169.12,171.4 1 1 -github.com/zx06/xsql/internal/db/readonly.go:173.2,173.14 1 1 -github.com/zx06/xsql/internal/db/readonly.go:177.52,178.6 1 1 -github.com/zx06/xsql/internal/db/readonly.go:178.6,181.33 3 1 -github.com/zx06/xsql/internal/db/readonly.go:181.33,182.47 1 1 -github.com/zx06/xsql/internal/db/readonly.go:182.47,184.13 2 1 -github.com/zx06/xsql/internal/db/readonly.go:186.4,186.13 1 1 -github.com/zx06/xsql/internal/db/readonly.go:188.3,188.33 1 1 -github.com/zx06/xsql/internal/db/readonly.go:188.33,189.43 1 1 -github.com/zx06/xsql/internal/db/readonly.go:189.43,191.13 2 1 -github.com/zx06/xsql/internal/db/readonly.go:193.4,193.13 1 0 -github.com/zx06/xsql/internal/db/readonly.go:195.3,195.11 1 1 -github.com/zx06/xsql/internal/db/readonly.go:199.72,200.22 1 1 -github.com/zx06/xsql/internal/db/readonly.go:200.22,202.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:203.2,204.8 2 1 -github.com/zx06/xsql/internal/db/readonly.go:204.8,206.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:207.2,207.112 1 1 -github.com/zx06/xsql/internal/db/readonly.go:211.47,216.17 4 1 -github.com/zx06/xsql/internal/db/readonly.go:216.17,220.25 2 1 -github.com/zx06/xsql/internal/db/readonly.go:220.25,222.12 2 1 -github.com/zx06/xsql/internal/db/readonly.go:226.3,226.20 1 1 -github.com/zx06/xsql/internal/db/readonly.go:226.20,228.12 2 0 -github.com/zx06/xsql/internal/db/readonly.go:232.3,232.50 1 1 -github.com/zx06/xsql/internal/db/readonly.go:232.50,234.37 1 1 -github.com/zx06/xsql/internal/db/readonly.go:234.37,236.5 1 1 -github.com/zx06/xsql/internal/db/readonly.go:237.4,237.12 1 1 -github.com/zx06/xsql/internal/db/readonly.go:241.3,241.50 1 1 -github.com/zx06/xsql/internal/db/readonly.go:241.50,244.21 2 1 -github.com/zx06/xsql/internal/db/readonly.go:244.21,245.41 1 1 -github.com/zx06/xsql/internal/db/readonly.go:245.41,247.11 2 1 -github.com/zx06/xsql/internal/db/readonly.go:249.5,249.8 1 1 -github.com/zx06/xsql/internal/db/readonly.go:251.4,251.12 1 1 -github.com/zx06/xsql/internal/db/readonly.go:255.3,255.16 1 1 -github.com/zx06/xsql/internal/db/readonly.go:255.16,259.12 4 1 -github.com/zx06/xsql/internal/db/readonly.go:263.3,263.15 1 1 -github.com/zx06/xsql/internal/db/readonly.go:263.15,267.12 4 1 -github.com/zx06/xsql/internal/db/readonly.go:271.3,271.15 1 1 -github.com/zx06/xsql/internal/db/readonly.go:271.15,275.12 4 1 -github.com/zx06/xsql/internal/db/readonly.go:279.3,279.15 1 1 -github.com/zx06/xsql/internal/db/readonly.go:279.15,280.62 1 1 -github.com/zx06/xsql/internal/db/readonly.go:280.62,283.13 3 1 -github.com/zx06/xsql/internal/db/readonly.go:288.3,288.15 1 1 -github.com/zx06/xsql/internal/db/readonly.go:288.15,291.12 3 1 -github.com/zx06/xsql/internal/db/readonly.go:295.3,295.90 1 1 -github.com/zx06/xsql/internal/db/readonly.go:295.90,297.139 2 1 -github.com/zx06/xsql/internal/db/readonly.go:297.139,299.5 1 1 -github.com/zx06/xsql/internal/db/readonly.go:300.4,301.12 2 1 -github.com/zx06/xsql/internal/db/readonly.go:305.3,305.38 1 1 -github.com/zx06/xsql/internal/db/readonly.go:305.38,307.122 2 1 -github.com/zx06/xsql/internal/db/readonly.go:307.122,309.5 1 1 -github.com/zx06/xsql/internal/db/readonly.go:310.4,313.28 3 1 -github.com/zx06/xsql/internal/db/readonly.go:313.28,315.5 1 1 -github.com/zx06/xsql/internal/db/readonly.go:315.10,317.5 1 1 -github.com/zx06/xsql/internal/db/readonly.go:318.4,318.12 1 1 -github.com/zx06/xsql/internal/db/readonly.go:322.3,322.24 1 1 -github.com/zx06/xsql/internal/db/readonly.go:322.24,324.51 2 1 -github.com/zx06/xsql/internal/db/readonly.go:324.51,326.5 1 1 -github.com/zx06/xsql/internal/db/readonly.go:327.4,328.12 2 1 -github.com/zx06/xsql/internal/db/readonly.go:332.3,333.6 2 1 -github.com/zx06/xsql/internal/db/readonly.go:336.2,337.20 2 1 -github.com/zx06/xsql/internal/db/readonly.go:341.67,346.17 4 1 -github.com/zx06/xsql/internal/db/readonly.go:346.17,348.17 2 1 -github.com/zx06/xsql/internal/db/readonly.go:348.17,350.47 1 1 -github.com/zx06/xsql/internal/db/readonly.go:350.47,353.13 3 0 -github.com/zx06/xsql/internal/db/readonly.go:356.4,356.33 1 1 -github.com/zx06/xsql/internal/db/readonly.go:359.3,359.59 1 1 -github.com/zx06/xsql/internal/db/readonly.go:359.59,362.12 3 0 -github.com/zx06/xsql/internal/db/readonly.go:364.3,365.6 2 1 -github.com/zx06/xsql/internal/db/readonly.go:369.2,369.27 1 0 -github.com/zx06/xsql/internal/db/readonly.go:373.73,375.23 2 1 -github.com/zx06/xsql/internal/db/readonly.go:375.23,377.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:380.2,382.123 3 1 -github.com/zx06/xsql/internal/db/readonly.go:382.123,384.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:386.2,386.44 1 1 -github.com/zx06/xsql/internal/db/readonly.go:386.44,388.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:390.2,395.41 4 1 -github.com/zx06/xsql/internal/db/readonly.go:395.41,396.76 1 1 -github.com/zx06/xsql/internal/db/readonly.go:396.76,399.4 2 1 -github.com/zx06/xsql/internal/db/readonly.go:402.2,402.25 1 1 -github.com/zx06/xsql/internal/db/readonly.go:406.34,409.61 2 1 -github.com/zx06/xsql/internal/db/readonly.go:409.61,411.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:413.2,426.36 2 1 -github.com/zx06/xsql/internal/db/readonly.go:426.36,427.18 1 1 -github.com/zx06/xsql/internal/db/readonly.go:427.18,429.4 1 1 -github.com/zx06/xsql/internal/db/readonly.go:431.2,431.14 1 1 -github.com/zx06/xsql/internal/db/readonly.go:435.34,439.2 1 1 -github.com/zx06/xsql/internal/db/readonly.go:442.57,446.29 3 1 -github.com/zx06/xsql/internal/db/readonly.go:446.29,447.19 1 1 -github.com/zx06/xsql/internal/db/readonly.go:448.64,449.31 1 1 -github.com/zx06/xsql/internal/db/readonly.go:450.23,451.28 1 1 -github.com/zx06/xsql/internal/db/readonly.go:451.28,454.5 2 1 -github.com/zx06/xsql/internal/db/readonly.go:459.2,459.26 1 1 -github.com/zx06/xsql/internal/db/readonly.go:459.26,461.3 1 1 -github.com/zx06/xsql/internal/db/readonly.go:463.2,463.22 1 1 -github.com/zx06/xsql/internal/db/readonly.go:467.44,471.29 3 1 -github.com/zx06/xsql/internal/db/readonly.go:471.29,472.26 1 1 -github.com/zx06/xsql/internal/db/readonly.go:472.26,474.12 2 1 -github.com/zx06/xsql/internal/db/readonly.go:476.3,476.13 1 1 -github.com/zx06/xsql/internal/db/readonly.go:476.13,477.12 1 0 -github.com/zx06/xsql/internal/db/readonly.go:481.3,481.20 1 1 -github.com/zx06/xsql/internal/db/readonly.go:482.12,483.16 1 1 -github.com/zx06/xsql/internal/db/readonly.go:484.12,487.44 2 1 -github.com/zx06/xsql/internal/db/readonly.go:487.44,489.26 2 1 -github.com/zx06/xsql/internal/db/readonly.go:490.39,491.17 1 1 -github.com/zx06/xsql/internal/db/readonly.go:492.19,493.18 1 1 -github.com/zx06/xsql/internal/db/readonly.go:496.11,498.22 1 1 -github.com/zx06/xsql/internal/db/readonly.go:498.22,499.22 1 1 -github.com/zx06/xsql/internal/db/readonly.go:500.39,501.17 1 1 -github.com/zx06/xsql/internal/db/readonly.go:506.2,506.14 1 0 -github.com/zx06/xsql/internal/db/registry.go:40.38,43.16 3 1 -github.com/zx06/xsql/internal/db/registry.go:43.16,44.35 1 1 -github.com/zx06/xsql/internal/db/registry.go:46.2,46.14 1 1 -github.com/zx06/xsql/internal/db/registry.go:46.14,47.35 1 1 -github.com/zx06/xsql/internal/db/registry.go:49.2,49.40 1 1 -github.com/zx06/xsql/internal/db/registry.go:49.40,50.50 1 1 -github.com/zx06/xsql/internal/db/registry.go:52.2,52.19 1 1 -github.com/zx06/xsql/internal/db/registry.go:55.38,60.2 4 1 -github.com/zx06/xsql/internal/db/registry.go:62.33,66.25 4 1 -github.com/zx06/xsql/internal/db/registry.go:66.25,68.3 1 1 -github.com/zx06/xsql/internal/db/registry.go:69.2,69.12 1 1 -github.com/zx06/xsql/internal/db/schema.go:18.74,19.36 1 1 -github.com/zx06/xsql/internal/db/schema.go:19.36,21.3 1 1 -github.com/zx06/xsql/internal/db/schema.go:23.2,24.29 2 1 -github.com/zx06/xsql/internal/db/schema.go:24.29,29.31 5 1 -github.com/zx06/xsql/internal/db/schema.go:29.31,38.4 1 1 -github.com/zx06/xsql/internal/db/schema.go:41.2,41.33 1 1 -github.com/zx06/xsql/internal/db/schema.go:96.119,98.9 2 1 -github.com/zx06/xsql/internal/db/schema.go:98.9,100.3 1 1 -github.com/zx06/xsql/internal/db/schema.go:102.2,103.9 2 0 -github.com/zx06/xsql/internal/db/schema.go:103.9,105.3 1 0 -github.com/zx06/xsql/internal/db/schema.go:107.2,107.37 1 0 -github.com/zx06/xsql/internal/config/load.go:12.59,14.19 2 1 -github.com/zx06/xsql/internal/config/load.go:14.19,16.3 1 1 -github.com/zx06/xsql/internal/config/load.go:17.2,17.19 1 1 -github.com/zx06/xsql/internal/config/load.go:17.19,19.3 1 1 -github.com/zx06/xsql/internal/config/load.go:20.2,20.14 1 1 -github.com/zx06/xsql/internal/config/load.go:23.51,25.16 2 1 -github.com/zx06/xsql/internal/config/load.go:25.16,26.25 1 1 -github.com/zx06/xsql/internal/config/load.go:26.25,28.4 1 1 -github.com/zx06/xsql/internal/config/load.go:29.3,29.117 1 0 -github.com/zx06/xsql/internal/config/load.go:31.2,32.46 2 1 -github.com/zx06/xsql/internal/config/load.go:32.46,34.3 1 1 -github.com/zx06/xsql/internal/config/load.go:35.2,35.23 1 1 -github.com/zx06/xsql/internal/config/load.go:35.23,37.3 1 0 -github.com/zx06/xsql/internal/config/load.go:38.2,38.25 1 1 -github.com/zx06/xsql/internal/config/load.go:38.25,40.3 1 1 -github.com/zx06/xsql/internal/config/load.go:41.2,41.15 1 1 -github.com/zx06/xsql/internal/config/load.go:45.62,47.19 2 1 -github.com/zx06/xsql/internal/config/load.go:47.19,50.3 2 1 -github.com/zx06/xsql/internal/config/load.go:51.2,51.24 1 1 -github.com/zx06/xsql/internal/config/load.go:51.24,52.46 1 1 -github.com/zx06/xsql/internal/config/load.go:52.46,54.4 1 1 -github.com/zx06/xsql/internal/config/load.go:57.2,57.27 1 1 -github.com/zx06/xsql/internal/config/load.go:57.27,59.27 2 1 -github.com/zx06/xsql/internal/config/load.go:59.27,61.4 1 1 -github.com/zx06/xsql/internal/config/load.go:62.3,63.16 2 1 -github.com/zx06/xsql/internal/config/load.go:63.16,65.4 1 1 -github.com/zx06/xsql/internal/config/load.go:66.3,66.21 1 1 -github.com/zx06/xsql/internal/config/load.go:69.2,69.62 1 1 -github.com/zx06/xsql/internal/config/load.go:69.62,71.16 2 1 -github.com/zx06/xsql/internal/config/load.go:71.16,72.41 1 1 -github.com/zx06/xsql/internal/config/load.go:72.41,73.13 1 1 -github.com/zx06/xsql/internal/config/load.go:75.4,75.25 1 1 -github.com/zx06/xsql/internal/config/load.go:77.3,77.19 1 1 -github.com/zx06/xsql/internal/config/load.go:80.2,80.89 1 1 -github.com/zx06/xsql/internal/config/resolve.go:11.55,13.19 2 1 -github.com/zx06/xsql/internal/config/resolve.go:13.19,16.3 2 0 -github.com/zx06/xsql/internal/config/resolve.go:17.2,17.24 1 1 -github.com/zx06/xsql/internal/config/resolve.go:17.24,18.46 1 0 -github.com/zx06/xsql/internal/config/resolve.go:18.46,20.4 1 0 -github.com/zx06/xsql/internal/config/resolve.go:24.2,26.27 3 1 -github.com/zx06/xsql/internal/config/resolve.go:26.27,28.27 2 1 -github.com/zx06/xsql/internal/config/resolve.go:28.27,30.4 1 1 -github.com/zx06/xsql/internal/config/resolve.go:31.3,32.16 2 1 -github.com/zx06/xsql/internal/config/resolve.go:32.16,34.4 1 1 -github.com/zx06/xsql/internal/config/resolve.go:35.3,36.16 2 0 -github.com/zx06/xsql/internal/config/resolve.go:37.8,38.63 1 1 -github.com/zx06/xsql/internal/config/resolve.go:38.63,40.17 2 1 -github.com/zx06/xsql/internal/config/resolve.go:40.17,41.42 1 1 -github.com/zx06/xsql/internal/config/resolve.go:41.42,42.14 1 1 -github.com/zx06/xsql/internal/config/resolve.go:44.5,44.26 1 0 -github.com/zx06/xsql/internal/config/resolve.go:46.4,48.9 3 1 -github.com/zx06/xsql/internal/config/resolve.go:53.2,54.24 2 1 -github.com/zx06/xsql/internal/config/resolve.go:54.24,56.3 1 1 -github.com/zx06/xsql/internal/config/resolve.go:56.8,56.34 1 1 -github.com/zx06/xsql/internal/config/resolve.go:56.34,58.3 1 0 -github.com/zx06/xsql/internal/config/resolve.go:58.8,59.43 1 1 -github.com/zx06/xsql/internal/config/resolve.go:59.43,61.4 1 1 -github.com/zx06/xsql/internal/config/resolve.go:65.2,66.19 2 1 -github.com/zx06/xsql/internal/config/resolve.go:66.19,68.10 2 1 -github.com/zx06/xsql/internal/config/resolve.go:68.10,71.4 1 1 -github.com/zx06/xsql/internal/config/resolve.go:72.3,74.37 2 1 -github.com/zx06/xsql/internal/config/resolve.go:74.37,75.65 1 1 -github.com/zx06/xsql/internal/config/resolve.go:75.65,77.5 1 1 -github.com/zx06/xsql/internal/config/resolve.go:77.10,80.5 1 1 -github.com/zx06/xsql/internal/config/resolve.go:83.3,83.32 1 1 -github.com/zx06/xsql/internal/config/resolve.go:83.32,84.30 1 1 -github.com/zx06/xsql/internal/config/resolve.go:85.17,86.32 1 1 -github.com/zx06/xsql/internal/config/resolve.go:87.14,88.32 1 1 -github.com/zx06/xsql/internal/config/resolve.go:94.2,95.34 2 1 -github.com/zx06/xsql/internal/config/resolve.go:95.34,97.3 1 1 -github.com/zx06/xsql/internal/config/resolve.go:98.2,98.26 1 1 -github.com/zx06/xsql/internal/config/resolve.go:98.26,100.3 1 1 -github.com/zx06/xsql/internal/config/resolve.go:101.2,101.23 1 1 -github.com/zx06/xsql/internal/config/resolve.go:101.23,103.3 1 1 -github.com/zx06/xsql/internal/config/resolve.go:105.2,105.107 1 1 -github.com/zx06/xsql/internal/errors/codes.go:31.24,46.2 1 1 -github.com/zx06/xsql/internal/errors/error.go:16.33,17.14 1 1 -github.com/zx06/xsql/internal/errors/error.go:17.14,19.3 1 1 -github.com/zx06/xsql/internal/errors/error.go:20.2,20.20 1 1 -github.com/zx06/xsql/internal/errors/error.go:20.20,22.3 1 1 -github.com/zx06/xsql/internal/errors/error.go:23.2,23.62 1 1 -github.com/zx06/xsql/internal/errors/error.go:26.33,26.51 1 1 -github.com/zx06/xsql/internal/errors/error.go:28.69,30.2 1 1 -github.com/zx06/xsql/internal/errors/error.go:32.83,34.2 1 1 -github.com/zx06/xsql/internal/errors/error.go:36.36,38.28 2 1 -github.com/zx06/xsql/internal/errors/error.go:38.28,40.3 1 1 -github.com/zx06/xsql/internal/errors/error.go:41.2,41.19 1 1 -github.com/zx06/xsql/internal/errors/error.go:44.34,45.27 1 0 -github.com/zx06/xsql/internal/errors/error.go:45.27,47.3 1 0 -github.com/zx06/xsql/internal/errors/error.go:48.2,48.50 1 0 -github.com/zx06/xsql/internal/errors/exitcode.go:25.38,26.14 1 1 -github.com/zx06/xsql/internal/errors/exitcode.go:27.59,28.20 1 1 -github.com/zx06/xsql/internal/errors/exitcode.go:30.66,31.21 1 1 -github.com/zx06/xsql/internal/errors/exitcode.go:32.21,33.22 1 1 -github.com/zx06/xsql/internal/errors/exitcode.go:34.24,35.20 1 1 -github.com/zx06/xsql/internal/errors/exitcode.go:36.20,37.14 1 1 -github.com/zx06/xsql/internal/errors/exitcode.go:38.10,39.22 1 1 -github.com/zx06/xsql/internal/log/log.go:10.36,13.2 2 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:18.13,20.2 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:24.91,27.20 2 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:27.20,29.17 2 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:29.17,31.4 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:32.3,32.15 1 0 -github.com/zx06/xsql/internal/db/mysql/driver.go:33.8,40.24 7 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:40.24,42.4 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:43.3,43.33 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:43.33,45.4 1 0 -github.com/zx06/xsql/internal/db/mysql/driver.go:49.2,49.24 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:49.24,51.95 2 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:51.95,53.4 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:54.3,54.20 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:57.2,59.16 3 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:59.16,61.3 1 0 -github.com/zx06/xsql/internal/db/mysql/driver.go:62.2,62.46 1 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:62.46,65.3 2 1 -github.com/zx06/xsql/internal/db/mysql/driver.go:66.2,66.18 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:13.120,18.87 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:18.87,20.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:21.2,25.15 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:25.15,27.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:30.2,30.31 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:30.31,33.16 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:33.16,35.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:36.3,40.16 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:40.16,42.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:43.3,47.16 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:47.16,49.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:50.3,52.43 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:55.2,55.18 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:59.133,68.29 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:68.29,74.3 4 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:76.2,79.16 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:79.16,81.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:82.2,85.18 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:85.18,87.52 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:87.52,89.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:90.3,94.5 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:97.2,97.35 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:97.35,99.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:101.2,101.20 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:105.122,120.16 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:120.16,122.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:123.2,126.18 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:126.18,129.100 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:129.100,131.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:133.3,139.25 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:139.25,141.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:142.3,142.20 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:142.20,144.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:145.3,145.33 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:148.2,148.35 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:148.35,150.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:152.2,152.21 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:156.121,170.16 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:170.16,172.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:173.2,177.18 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:177.18,181.96 4 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:181.96,183.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:185.3,185.49 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:185.49,187.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:187.9,194.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:197.2,197.35 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:197.35,199.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:202.2,203.31 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:203.31,205.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:207.2,207.21 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:211.130,227.16 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:227.16,229.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:230.2,234.18 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:234.18,237.106 3 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:237.106,239.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:241.3,241.50 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:241.50,244.4 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:244.9,251.4 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:254.2,254.35 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:254.35,256.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:259.2,260.27 2 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:260.27,262.3 1 0 -github.com/zx06/xsql/internal/db/mysql/schema.go:264.2,264.17 1 0 -github.com/zx06/xsql/internal/mcp/streamable_http.go:26.91,27.19 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:27.19,29.3 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:30.2,30.21 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:30.21,32.3 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:33.2,33.74 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:33.74,35.3 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:36.2,36.45 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:39.64,40.73 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:40.73,42.17 2 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:42.17,45.4 2 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:46.3,46.45 1 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:46.45,49.4 2 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:50.3,51.71 2 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:51.71,54.4 2 1 -github.com/zx06/xsql/internal/mcp/streamable_http.go:55.3,55.25 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:36.52,40.2 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:43.50,45.38 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:45.38,47.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:48.2,48.14 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:52.57,55.36 3 1 -github.com/zx06/xsql/internal/mcp/tools.go:55.36,57.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:60.2,103.26 5 1 -github.com/zx06/xsql/internal/mcp/tools.go:107.112,109.69 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:109.69,116.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:117.2,118.20 2 0 -github.com/zx06/xsql/internal/mcp/tools.go:122.118,124.69 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:124.69,131.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:132.2,133.20 2 0 -github.com/zx06/xsql/internal/mcp/tools.go:137.128,139.21 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:139.21,146.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:148.2,148.25 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:148.25,155.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:158.2,159.20 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:159.20,166.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:169.2,169.56 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:169.56,176.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:178.2,178.22 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:178.22,185.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:188.2,189.20 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:189.20,191.16 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:191.16,198.4 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:199.3,199.16 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:203.2,204.30 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:204.30,206.23 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:206.23,208.17 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:208.17,215.5 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:216.4,216.19 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:218.3,227.16 3 1 -github.com/zx06/xsql/internal/mcp/tools.go:227.16,234.4 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:235.3,236.17 2 0 -github.com/zx06/xsql/internal/mcp/tools.go:240.2,241.9 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:241.9,248.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:250.2,258.22 2 0 -github.com/zx06/xsql/internal/mcp/tools.go:258.22,260.3 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:262.2,263.15 2 0 -github.com/zx06/xsql/internal/mcp/tools.go:263.15,270.3 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:271.2,278.15 3 0 -github.com/zx06/xsql/internal/mcp/tools.go:278.15,285.3 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:287.2,293.16 3 0 -github.com/zx06/xsql/internal/mcp/tools.go:293.16,300.3 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:303.2,307.13 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:311.132,320.41 3 1 -github.com/zx06/xsql/internal/mcp/tools.go:320.41,322.25 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:322.25,324.4 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:325.3,330.5 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:333.2,341.16 3 1 -github.com/zx06/xsql/internal/mcp/tools.go:341.16,348.3 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:351.2,355.13 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:359.140,361.9 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:361.9,368.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:371.2,382.23 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:382.23,384.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:385.2,385.28 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:385.28,387.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:388.2,388.28 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:388.28,390.61 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:390.61,394.32 4 1 -github.com/zx06/xsql/internal/mcp/tools.go:394.32,396.5 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:400.2,406.16 3 1 -github.com/zx06/xsql/internal/mcp/tools.go:406.16,413.3 1 0 -github.com/zx06/xsql/internal/mcp/tools.go:416.2,420.13 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:425.63,426.16 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:426.16,428.39 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:428.39,430.4 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:431.3,431.13 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:434.2,435.9 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:435.9,437.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:440.2,440.28 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:440.28,441.61 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:441.61,443.4 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:446.2,446.17 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:450.53,452.16 2 1 -github.com/zx06/xsql/internal/mcp/tools.go:452.16,454.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:454.8,456.3 1 1 -github.com/zx06/xsql/internal/mcp/tools.go:457.2,467.25 3 1 -github.com/zx06/xsql/internal/mcp/tools.go:471.74,481.2 4 1 -github.com/zx06/xsql/internal/db/pg/driver.go:17.13,19.2 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:23.91,25.15 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:25.15,27.3 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:30.2,30.24 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:30.24,32.17 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:32.17,34.4 1 0 -github.com/zx06/xsql/internal/db/pg/driver.go:35.3,35.87 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:35.87,37.4 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:38.3,39.47 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:39.47,42.4 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:43.3,43.19 1 0 -github.com/zx06/xsql/internal/db/pg/driver.go:46.2,47.16 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:47.16,49.3 1 0 -github.com/zx06/xsql/internal/db/pg/driver.go:50.2,50.46 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:50.46,53.3 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:54.2,54.18 1 0 -github.com/zx06/xsql/internal/db/pg/driver.go:57.43,59.21 2 1 -github.com/zx06/xsql/internal/db/pg/driver.go:59.21,61.3 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:62.2,62.20 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:62.20,64.3 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:65.2,65.21 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:65.21,67.3 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:68.2,68.25 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:68.25,70.3 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:71.2,71.25 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:71.25,73.3 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:74.2,74.32 1 1 -github.com/zx06/xsql/internal/db/pg/driver.go:74.32,76.3 1 0 -github.com/zx06/xsql/internal/db/pg/driver.go:77.2,77.33 1 1 -github.com/zx06/xsql/internal/db/pg/schema.go:13.120,18.95 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:18.95,20.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:21.2,25.15 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:25.15,27.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:30.2,30.33 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:30.33,32.16 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:32.16,34.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:37.3,37.32 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:37.32,40.17 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:40.17,42.5 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:43.4,47.17 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:47.17,49.5 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:50.4,54.17 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:54.17,56.5 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:57.4,59.44 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:63.2,63.18 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:67.115,74.25 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:74.25,77.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:79.2,82.16 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:82.16,84.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:85.2,88.18 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:88.18,90.44 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:90.44,92.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:93.3,93.36 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:96.2,96.35 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:96.35,98.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:100.2,100.21 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:104.131,115.29 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:115.29,121.3 4 0 -github.com/zx06/xsql/internal/db/pg/schema.go:123.2,126.16 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:126.16,128.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:129.2,132.18 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:132.18,135.52 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:135.52,137.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:138.3,142.5 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:145.2,145.35 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:145.35,147.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:149.2,149.20 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:153.120,187.16 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:187.16,189.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:190.2,193.18 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:193.18,197.100 4 0 -github.com/zx06/xsql/internal/db/pg/schema.go:197.100,199.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:201.3,207.25 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:207.25,209.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:210.3,210.20 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:210.20,212.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:213.3,213.33 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:216.2,216.35 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:216.35,218.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:220.2,220.21 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:224.119,242.16 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:242.16,244.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:245.2,249.18 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:249.18,253.103 4 0 -github.com/zx06/xsql/internal/db/pg/schema.go:253.103,255.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:257.3,257.49 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:257.49,259.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:259.9,266.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:269.2,269.35 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:269.35,271.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:274.2,275.31 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:275.31,277.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:279.2,279.21 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:283.128,305.16 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:305.16,307.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:308.2,312.18 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:312.18,315.106 3 0 -github.com/zx06/xsql/internal/db/pg/schema.go:315.106,317.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:319.3,319.50 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:319.50,322.4 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:322.9,329.4 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:332.2,332.35 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:332.35,334.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:337.2,338.27 2 0 -github.com/zx06/xsql/internal/db/pg/schema.go:338.27,340.3 1 0 -github.com/zx06/xsql/internal/db/pg/schema.go:342.2,342.17 1 0 -github.com/zx06/xsql/internal/output/format.go:13.29,14.11 1 1 -github.com/zx06/xsql/internal/output/format.go:15.66,16.14 1 1 -github.com/zx06/xsql/internal/output/format.go:17.10,18.15 1 1 -github.com/zx06/xsql/internal/output/writer.go:23.37,25.2 1 1 -github.com/zx06/xsql/internal/output/writer.go:27.56,29.2 1 1 -github.com/zx06/xsql/internal/output/writer.go:31.68,34.2 2 1 -github.com/zx06/xsql/internal/output/writer.go:36.58,37.16 1 1 -github.com/zx06/xsql/internal/output/writer.go:38.18,41.25 3 1 -github.com/zx06/xsql/internal/output/writer.go:42.18,44.17 2 1 -github.com/zx06/xsql/internal/output/writer.go:44.17,46.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:47.3,48.17 2 1 -github.com/zx06/xsql/internal/output/writer.go:48.17,50.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:51.3,51.41 1 1 -github.com/zx06/xsql/internal/output/writer.go:51.41,53.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:54.3,54.13 1 1 -github.com/zx06/xsql/internal/output/writer.go:55.19,56.32 1 1 -github.com/zx06/xsql/internal/output/writer.go:57.17,58.30 1 1 -github.com/zx06/xsql/internal/output/writer.go:59.10,60.110 1 1 -github.com/zx06/xsql/internal/output/writer.go:87.52,88.13 1 1 -github.com/zx06/xsql/internal/output/writer.go:88.13,90.23 1 1 -github.com/zx06/xsql/internal/output/writer.go:90.23,92.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:93.3,93.13 1 1 -github.com/zx06/xsql/internal/output/writer.go:97.2,97.52 1 1 -github.com/zx06/xsql/internal/output/writer.go:97.52,98.52 1 1 -github.com/zx06/xsql/internal/output/writer.go:98.52,100.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:104.2,104.58 1 1 -github.com/zx06/xsql/internal/output/writer.go:104.58,105.65 1 0 -github.com/zx06/xsql/internal/output/writer.go:105.65,107.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:111.2,111.53 1 1 -github.com/zx06/xsql/internal/output/writer.go:111.53,112.59 1 1 -github.com/zx06/xsql/internal/output/writer.go:112.59,114.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:118.2,118.44 1 1 -github.com/zx06/xsql/internal/output/writer.go:118.44,120.55 1 1 -github.com/zx06/xsql/internal/output/writer.go:120.55,121.50 1 1 -github.com/zx06/xsql/internal/output/writer.go:121.50,123.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:127.3,127.61 1 1 -github.com/zx06/xsql/internal/output/writer.go:127.61,128.60 1 1 -github.com/zx06/xsql/internal/output/writer.go:128.60,131.5 2 1 -github.com/zx06/xsql/internal/output/writer.go:135.3,136.38 2 1 -github.com/zx06/xsql/internal/output/writer.go:136.38,138.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:139.3,139.20 1 1 -github.com/zx06/xsql/internal/output/writer.go:143.2,143.57 1 1 -github.com/zx06/xsql/internal/output/writer.go:143.57,145.3 1 0 -github.com/zx06/xsql/internal/output/writer.go:148.2,149.21 2 1 -github.com/zx06/xsql/internal/output/writer.go:149.21,150.45 1 1 -github.com/zx06/xsql/internal/output/writer.go:150.45,151.39 1 0 -github.com/zx06/xsql/internal/output/writer.go:151.39,153.5 1 0 -github.com/zx06/xsql/internal/output/writer.go:154.9,158.4 2 1 -github.com/zx06/xsql/internal/output/writer.go:160.2,160.19 1 1 -github.com/zx06/xsql/internal/output/writer.go:164.93,167.19 2 1 -github.com/zx06/xsql/internal/output/writer.go:167.19,169.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:171.2,173.29 3 1 -github.com/zx06/xsql/internal/output/writer.go:173.29,175.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:177.2,178.24 2 1 -github.com/zx06/xsql/internal/output/writer.go:178.24,180.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:181.2,182.19 2 1 -github.com/zx06/xsql/internal/output/writer.go:186.49,187.14 1 1 -github.com/zx06/xsql/internal/output/writer.go:187.14,189.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:191.2,191.32 1 1 -github.com/zx06/xsql/internal/output/writer.go:191.32,193.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:195.2,195.30 1 1 -github.com/zx06/xsql/internal/output/writer.go:195.30,197.28 2 1 -github.com/zx06/xsql/internal/output/writer.go:197.28,199.11 2 1 -github.com/zx06/xsql/internal/output/writer.go:199.11,201.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:202.4,202.17 1 1 -github.com/zx06/xsql/internal/output/writer.go:204.3,204.22 1 1 -github.com/zx06/xsql/internal/output/writer.go:206.2,206.19 1 1 -github.com/zx06/xsql/internal/output/writer.go:210.54,211.14 1 1 -github.com/zx06/xsql/internal/output/writer.go:211.14,213.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:214.2,214.41 1 1 -github.com/zx06/xsql/internal/output/writer.go:214.41,216.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:217.2,217.30 1 1 -github.com/zx06/xsql/internal/output/writer.go:217.30,219.28 2 1 -github.com/zx06/xsql/internal/output/writer.go:219.28,221.11 2 1 -github.com/zx06/xsql/internal/output/writer.go:221.11,223.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:224.4,224.17 1 1 -github.com/zx06/xsql/internal/output/writer.go:226.3,226.22 1 1 -github.com/zx06/xsql/internal/output/writer.go:228.2,228.19 1 1 -github.com/zx06/xsql/internal/output/writer.go:238.59,240.45 1 1 -github.com/zx06/xsql/internal/output/writer.go:240.45,242.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:245.2,245.44 1 1 -github.com/zx06/xsql/internal/output/writer.go:245.44,247.25 2 1 -github.com/zx06/xsql/internal/output/writer.go:247.25,249.39 2 1 -github.com/zx06/xsql/internal/output/writer.go:249.39,251.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:252.4,252.46 1 1 -github.com/zx06/xsql/internal/output/writer.go:252.46,254.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:255.4,255.37 1 1 -github.com/zx06/xsql/internal/output/writer.go:255.37,257.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:258.4,258.39 1 1 -github.com/zx06/xsql/internal/output/writer.go:258.39,260.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:261.4,261.20 1 1 -github.com/zx06/xsql/internal/output/writer.go:261.20,263.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:264.4,264.30 1 1 -github.com/zx06/xsql/internal/output/writer.go:266.3,266.33 1 1 -github.com/zx06/xsql/internal/output/writer.go:270.2,271.46 2 1 -github.com/zx06/xsql/internal/output/writer.go:271.46,273.32 2 1 -github.com/zx06/xsql/internal/output/writer.go:273.32,276.34 2 1 -github.com/zx06/xsql/internal/output/writer.go:276.34,278.5 1 0 -github.com/zx06/xsql/internal/output/writer.go:280.4,280.37 1 1 -github.com/zx06/xsql/internal/output/writer.go:280.37,282.5 1 0 -github.com/zx06/xsql/internal/output/writer.go:283.4,285.80 2 1 -github.com/zx06/xsql/internal/output/writer.go:285.80,287.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:288.4,288.87 1 1 -github.com/zx06/xsql/internal/output/writer.go:288.87,290.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:291.4,291.78 1 1 -github.com/zx06/xsql/internal/output/writer.go:291.78,293.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:294.4,294.80 1 1 -github.com/zx06/xsql/internal/output/writer.go:294.80,296.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:297.4,297.20 1 1 -github.com/zx06/xsql/internal/output/writer.go:297.20,299.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:300.4,300.30 1 1 -github.com/zx06/xsql/internal/output/writer.go:302.3,302.33 1 1 -github.com/zx06/xsql/internal/output/writer.go:306.2,307.9 2 0 -github.com/zx06/xsql/internal/output/writer.go:307.9,309.3 1 0 -github.com/zx06/xsql/internal/output/writer.go:311.2,312.27 2 0 -github.com/zx06/xsql/internal/output/writer.go:312.27,314.10 2 0 -github.com/zx06/xsql/internal/output/writer.go:314.10,316.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:317.3,318.38 2 0 -github.com/zx06/xsql/internal/output/writer.go:318.38,320.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:321.3,321.45 1 0 -github.com/zx06/xsql/internal/output/writer.go:321.45,323.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:324.3,324.36 1 0 -github.com/zx06/xsql/internal/output/writer.go:324.36,326.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:327.3,327.38 1 0 -github.com/zx06/xsql/internal/output/writer.go:327.38,329.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:330.3,330.19 1 0 -github.com/zx06/xsql/internal/output/writer.go:330.19,332.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:333.3,333.29 1 0 -github.com/zx06/xsql/internal/output/writer.go:335.2,335.32 1 0 -github.com/zx06/xsql/internal/output/writer.go:344.65,345.17 1 1 -github.com/zx06/xsql/internal/output/writer.go:345.17,347.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:349.2,350.29 2 1 -github.com/zx06/xsql/internal/output/writer.go:350.29,352.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:353.2,353.32 1 1 -github.com/zx06/xsql/internal/output/writer.go:353.32,355.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:358.2,360.36 3 1 -github.com/zx06/xsql/internal/output/writer.go:360.36,362.57 2 1 -github.com/zx06/xsql/internal/output/writer.go:362.57,364.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:365.3,365.51 1 1 -github.com/zx06/xsql/internal/output/writer.go:365.51,367.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:370.2,370.50 1 1 -github.com/zx06/xsql/internal/output/writer.go:370.50,372.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:375.2,375.39 1 1 -github.com/zx06/xsql/internal/output/writer.go:375.39,377.3 1 0 -github.com/zx06/xsql/internal/output/writer.go:378.2,379.39 2 1 -github.com/zx06/xsql/internal/output/writer.go:379.39,381.36 2 1 -github.com/zx06/xsql/internal/output/writer.go:381.36,383.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:383.9,383.46 1 1 -github.com/zx06/xsql/internal/output/writer.go:383.46,385.11 2 1 -github.com/zx06/xsql/internal/output/writer.go:385.11,387.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:388.4,388.15 1 0 -github.com/zx06/xsql/internal/output/writer.go:389.9,391.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:395.2,395.39 1 1 -github.com/zx06/xsql/internal/output/writer.go:395.39,397.3 1 0 -github.com/zx06/xsql/internal/output/writer.go:398.2,399.39 2 1 -github.com/zx06/xsql/internal/output/writer.go:399.39,401.33 2 1 -github.com/zx06/xsql/internal/output/writer.go:401.33,403.39 2 1 -github.com/zx06/xsql/internal/output/writer.go:403.39,406.12 3 1 -github.com/zx06/xsql/internal/output/writer.go:406.12,408.6 1 1 -github.com/zx06/xsql/internal/output/writer.go:409.5,409.29 1 1 -github.com/zx06/xsql/internal/output/writer.go:411.4,411.17 1 1 -github.com/zx06/xsql/internal/output/writer.go:412.9,412.46 1 0 -github.com/zx06/xsql/internal/output/writer.go:412.46,414.11 2 0 -github.com/zx06/xsql/internal/output/writer.go:414.11,416.5 1 0 -github.com/zx06/xsql/internal/output/writer.go:417.4,417.17 1 0 -github.com/zx06/xsql/internal/output/writer.go:418.9,420.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:423.2,423.58 1 1 -github.com/zx06/xsql/internal/output/writer.go:426.87,434.25 4 1 -github.com/zx06/xsql/internal/output/writer.go:434.25,436.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:437.2,440.27 2 1 -github.com/zx06/xsql/internal/output/writer.go:440.27,442.26 2 1 -github.com/zx06/xsql/internal/output/writer.go:442.26,444.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:445.3,445.52 1 1 -github.com/zx06/xsql/internal/output/writer.go:449.2,451.19 2 1 -github.com/zx06/xsql/internal/output/writer.go:454.54,455.14 1 1 -github.com/zx06/xsql/internal/output/writer.go:455.14,457.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:458.2,458.25 1 1 -github.com/zx06/xsql/internal/output/writer.go:459.14,460.13 1 1 -github.com/zx06/xsql/internal/output/writer.go:461.15,463.33 1 1 -github.com/zx06/xsql/internal/output/writer.go:463.33,465.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:466.3,466.32 1 1 -github.com/zx06/xsql/internal/output/writer.go:467.10,468.32 1 1 -github.com/zx06/xsql/internal/output/writer.go:472.50,476.13 3 1 -github.com/zx06/xsql/internal/output/writer.go:476.13,478.23 1 1 -github.com/zx06/xsql/internal/output/writer.go:478.23,480.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:481.3,481.20 1 1 -github.com/zx06/xsql/internal/output/writer.go:485.2,490.70 4 1 -github.com/zx06/xsql/internal/output/writer.go:490.70,492.3 1 0 -github.com/zx06/xsql/internal/output/writer.go:495.2,495.13 1 1 -github.com/zx06/xsql/internal/output/writer.go:495.13,496.60 1 1 -github.com/zx06/xsql/internal/output/writer.go:496.60,500.4 3 0 -github.com/zx06/xsql/internal/output/writer.go:504.2,504.13 1 1 -github.com/zx06/xsql/internal/output/writer.go:504.13,505.47 1 1 -github.com/zx06/xsql/internal/output/writer.go:505.47,508.11 3 1 -github.com/zx06/xsql/internal/output/writer.go:508.11,510.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:514.2,514.12 1 1 -github.com/zx06/xsql/internal/output/writer.go:514.12,518.28 2 1 -github.com/zx06/xsql/internal/output/writer.go:518.28,520.27 2 1 -github.com/zx06/xsql/internal/output/writer.go:520.27,522.5 1 1 -github.com/zx06/xsql/internal/output/writer.go:523.4,523.22 1 1 -github.com/zx06/xsql/internal/output/writer.go:525.3,525.20 1 1 -github.com/zx06/xsql/internal/output/writer.go:529.2,529.44 1 1 -github.com/zx06/xsql/internal/output/writer.go:529.44,530.38 1 1 -github.com/zx06/xsql/internal/output/writer.go:530.38,532.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:534.2,534.19 1 1 -github.com/zx06/xsql/internal/output/writer.go:537.47,539.19 2 1 -github.com/zx06/xsql/internal/output/writer.go:539.19,541.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:542.2,543.13 2 1 -github.com/zx06/xsql/internal/output/writer.go:547.83,549.20 1 1 -github.com/zx06/xsql/internal/output/writer.go:549.20,551.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:554.2,554.31 1 1 -github.com/zx06/xsql/internal/output/writer.go:554.31,555.12 1 1 -github.com/zx06/xsql/internal/output/writer.go:555.12,557.4 1 0 -github.com/zx06/xsql/internal/output/writer.go:560.3,561.53 2 1 -github.com/zx06/xsql/internal/output/writer.go:561.53,563.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:564.3,564.26 1 1 -github.com/zx06/xsql/internal/output/writer.go:564.26,566.4 1 1 -github.com/zx06/xsql/internal/output/writer.go:567.3,570.29 2 1 -github.com/zx06/xsql/internal/output/writer.go:570.29,575.38 5 1 -github.com/zx06/xsql/internal/output/writer.go:575.38,577.25 2 1 -github.com/zx06/xsql/internal/output/writer.go:577.25,579.6 1 1 -github.com/zx06/xsql/internal/output/writer.go:580.5,581.22 2 1 -github.com/zx06/xsql/internal/output/writer.go:581.22,583.6 1 1 -github.com/zx06/xsql/internal/output/writer.go:584.5,585.23 2 1 -github.com/zx06/xsql/internal/output/writer.go:585.23,587.6 1 1 -github.com/zx06/xsql/internal/output/writer.go:588.5,589.64 1 1 -github.com/zx06/xsql/internal/output/writer.go:591.4,591.18 1 1 -github.com/zx06/xsql/internal/output/writer.go:596.2,597.22 2 1 -github.com/zx06/xsql/internal/output/writer.go:597.22,599.3 1 1 -github.com/zx06/xsql/internal/output/writer.go:600.2,601.12 2 1 -github.com/zx06/xsql/internal/secret/keyring.go:13.34,15.2 1 1 -github.com/zx06/xsql/internal/secret/keyring_windows.go:11.66,13.16 2 1 -github.com/zx06/xsql/internal/secret/keyring_windows.go:13.16,15.3 1 0 -github.com/zx06/xsql/internal/secret/keyring_windows.go:17.2,18.17 2 1 -github.com/zx06/xsql/internal/secret/keyring_windows.go:21.63,23.2 1 1 -github.com/zx06/xsql/internal/secret/keyring_windows.go:25.59,27.2 1 0 -github.com/zx06/xsql/internal/secret/resolve.go:22.80,23.15 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:23.15,27.3 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:28.2,28.33 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:37.65,38.43 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:38.43,41.22 3 1 -github.com/zx06/xsql/internal/secret/resolve.go:41.22,43.4 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:44.3,45.16 2 1 -github.com/zx06/xsql/internal/secret/resolve.go:45.16,47.4 1 0 -github.com/zx06/xsql/internal/secret/resolve.go:48.3,49.17 2 1 -github.com/zx06/xsql/internal/secret/resolve.go:49.17,52.4 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:53.3,53.18 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:56.2,56.25 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:56.25,58.3 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:59.2,59.135 1 1 -github.com/zx06/xsql/internal/secret/resolve.go:63.34,65.2 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:46.81,47.26 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:47.26,49.3 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:50.2,50.24 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:50.24,52.3 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:55.2,57.16 3 1 -github.com/zx06/xsql/internal/proxy/proxy.go:57.16,59.3 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:61.2,87.23 9 1 -github.com/zx06/xsql/internal/proxy/proxy.go:91.70,96.6 3 1 -github.com/zx06/xsql/internal/proxy/proxy.go:96.6,97.10 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:98.23,99.10 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:100.11,102.18 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:102.18,104.12 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:105.25,106.12 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:107.13,109.14 1 0 -github.com/zx06/xsql/internal/proxy/proxy.go:113.4,114.48 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:120.73,122.15 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:122.15,122.40 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:125.2,126.16 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:126.16,128.3 1 0 -github.com/zx06/xsql/internal/proxy/proxy.go:129.2,129.15 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:129.15,129.41 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:132.2,135.12 3 1 -github.com/zx06/xsql/internal/proxy/proxy.go:135.12,138.3 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:140.2,140.12 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:140.12,143.3 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:146.2,147.12 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:147.12,150.3 2 1 -github.com/zx06/xsql/internal/proxy/proxy.go:152.2,152.9 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:153.14,153.14 0 0 -github.com/zx06/xsql/internal/proxy/proxy.go:154.22,154.22 0 1 -github.com/zx06/xsql/internal/proxy/proxy.go:159.30,164.2 4 1 -github.com/zx06/xsql/internal/proxy/proxy.go:167.39,168.23 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:168.23,170.3 1 1 -github.com/zx06/xsql/internal/proxy/proxy.go:171.2,171.11 1 0 -github.com/zx06/xsql/internal/ssh/client.go:23.75,24.21 1 1 -github.com/zx06/xsql/internal/ssh/client.go:24.21,26.3 1 1 -github.com/zx06/xsql/internal/ssh/client.go:27.2,27.20 1 1 -github.com/zx06/xsql/internal/ssh/client.go:27.20,29.3 1 1 -github.com/zx06/xsql/internal/ssh/client.go:30.2,30.21 1 1 -github.com/zx06/xsql/internal/ssh/client.go:30.21,32.22 2 1 -github.com/zx06/xsql/internal/ssh/client.go:32.22,34.4 1 1 -github.com/zx06/xsql/internal/ssh/client.go:37.2,38.15 2 1 -github.com/zx06/xsql/internal/ssh/client.go:38.15,40.3 1 1 -github.com/zx06/xsql/internal/ssh/client.go:42.2,43.15 2 1 -github.com/zx06/xsql/internal/ssh/client.go:43.15,45.3 1 0 -github.com/zx06/xsql/internal/ssh/client.go:47.2,55.16 4 1 -github.com/zx06/xsql/internal/ssh/client.go:55.16,56.62 1 1 -github.com/zx06/xsql/internal/ssh/client.go:56.62,58.4 1 0 -github.com/zx06/xsql/internal/ssh/client.go:59.3,59.127 1 1 -github.com/zx06/xsql/internal/ssh/client.go:61.2,61.37 1 0 -github.com/zx06/xsql/internal/ssh/client.go:65.91,67.2 1 0 -github.com/zx06/xsql/internal/ssh/client.go:70.32,71.21 1 1 -github.com/zx06/xsql/internal/ssh/client.go:71.21,73.3 1 0 -github.com/zx06/xsql/internal/ssh/client.go:74.2,74.12 1 1 -github.com/zx06/xsql/internal/ssh/client.go:77.72,81.29 2 1 -github.com/zx06/xsql/internal/ssh/client.go:81.29,84.17 3 1 -github.com/zx06/xsql/internal/ssh/client.go:84.17,86.4 1 1 -github.com/zx06/xsql/internal/ssh/client.go:87.3,88.28 2 1 -github.com/zx06/xsql/internal/ssh/client.go:88.28,90.4 1 0 -github.com/zx06/xsql/internal/ssh/client.go:90.9,92.4 1 1 -github.com/zx06/xsql/internal/ssh/client.go:93.3,93.17 1 1 -github.com/zx06/xsql/internal/ssh/client.go:93.17,95.4 1 0 -github.com/zx06/xsql/internal/ssh/client.go:96.3,96.52 1 1 -github.com/zx06/xsql/internal/ssh/client.go:100.2,100.23 1 1 -github.com/zx06/xsql/internal/ssh/client.go:100.23,101.69 1 1 -github.com/zx06/xsql/internal/ssh/client.go:101.69,103.56 2 1 -github.com/zx06/xsql/internal/ssh/client.go:103.56,104.64 1 1 -github.com/zx06/xsql/internal/ssh/client.go:104.64,106.11 2 1 -github.com/zx06/xsql/internal/ssh/client.go:112.2,112.23 1 1 -github.com/zx06/xsql/internal/ssh/client.go:112.23,114.3 1 0 -github.com/zx06/xsql/internal/ssh/client.go:115.2,115.21 1 1 -github.com/zx06/xsql/internal/ssh/client.go:118.79,119.30 1 1 -github.com/zx06/xsql/internal/ssh/client.go:119.30,121.3 1 1 -github.com/zx06/xsql/internal/ssh/client.go:122.2,123.18 2 1 -github.com/zx06/xsql/internal/ssh/client.go:123.18,125.3 1 1 -github.com/zx06/xsql/internal/ssh/client.go:126.2,128.16 3 1 -github.com/zx06/xsql/internal/ssh/client.go:128.16,129.25 1 1 -github.com/zx06/xsql/internal/ssh/client.go:129.25,131.4 1 1 -github.com/zx06/xsql/internal/ssh/client.go:132.3,132.125 1 0 -github.com/zx06/xsql/internal/ssh/client.go:134.2,134.16 1 1 -github.com/zx06/xsql/internal/ssh/client.go:137.34,138.32 1 1 -github.com/zx06/xsql/internal/ssh/client.go:138.32,141.3 2 1 -github.com/zx06/xsql/internal/ssh/client.go:142.2,142.10 1 1 -github.com/zx06/xsql/internal/ssh/options.go:16.37,18.2 1 1