Skip to content

Commit 22ebbf3

Browse files
committed
Support DESC {OWNER}.{TABLE} in MS SQL Server
1 parent c07dd42 commit 22ebbf3

2 files changed

Lines changed: 42 additions & 21 deletions

File tree

dialect/sqlserver/columns.sql

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
select c.column_id as "ID",
2+
c.name as "NAME",
3+
case c.is_nullable
4+
when 1 then 'NULL'
5+
else 'NOT NULL'
6+
end as "NULL?",
7+
case
8+
when t.name in ('char','varchar','nchar','nvarchar',
9+
'binary','varbinary')
10+
and c.max_length > 0
11+
then t.name + '(' +
12+
convert(varchar,
13+
case
14+
when t.name in ('nchar','nvarchar')
15+
then c.max_length/2
16+
else c.max_length
17+
end
18+
) + ')'
19+
else t.name
20+
end as "TYPE"
21+
from sys.columns c,
22+
sys.objects o,
23+
sys.types t,
24+
sys.schemas s
25+
where c.object_id = o.object_id
26+
and o.name = case
27+
when @p1 like '%.%' then parsename(@p1,1)
28+
else @p1
29+
end
30+
and o.schema_id = s.schema_id
31+
and s.name = case
32+
when @p1 like '%.%' then parsename(@p1,2)
33+
else schema_name()
34+
end
35+
and c.user_type_id = t.user_type_id
36+
order by c.column_id

dialect/sqlserver/main.go

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package sqlserver
22

33
import (
4+
_ "embed"
45
"time"
56

67
_ "github.com/microsoft/go-mssqldb"
@@ -10,6 +11,9 @@ import (
1011
"github.com/hymkor/sqlbless/dialect"
1112
)
1213

14+
//go:embed columns.sql
15+
var columnSql string
16+
1317
var typeSpec = map[string][2]string{
1418
"DATE": {
1519
"CAST(@v%d AS DATE)",
@@ -61,27 +65,8 @@ func formatValue(typeName string, value any) (string, bool) {
6165
}
6266

6367
var sqlServerSpec = &dialect.Entry{
64-
Usage: "sqlbless sqlserver://@<HOSTNAME>?database=<DBNAME>",
65-
SQLForColumns: `
66-
select c.column_id as "ID",
67-
c.name as "NAME",
68-
case
69-
when c.max_length > 0 then
70-
t.name + '(' + convert(varchar,c.max_length) + ')'
71-
else
72-
t.name
73-
end as "TYPE",
74-
case c.is_nullable
75-
when 1 then 'NULL'
76-
else 'NOT NULL'
77-
end as "NULL?"
78-
from sys.columns c,
79-
sys.objects o,
80-
sys.types t
81-
where c.object_id = o.object_id
82-
and o.name = @p1
83-
and c.user_type_id = t.user_type_id
84-
order by c.column_id`,
68+
Usage: "sqlbless sqlserver://@<HOSTNAME>?database=<DBNAME>",
69+
SQLForColumns: columnSql,
8570
SQLForTables: `select * from sys.tables`,
8671
TypeConverterFor: typeNameToConv,
8772
PlaceHolder: &dialect.PlaceHolderName{Mark: "@", Prefix: "v"},

0 commit comments

Comments
 (0)