@@ -38,6 +38,7 @@ func RegisterFS(db *sqlite3.Conn, fsys fs.FS) {
38
38
header bool
39
39
columns int = - 1
40
40
comma rune = ','
41
+ comment rune
41
42
42
43
done = map [string ]struct {}{}
43
44
)
@@ -60,6 +61,8 @@ func RegisterFS(db *sqlite3.Conn, fsys fs.FS) {
60
61
columns , err = uintArg (key , val )
61
62
case "comma" :
62
63
comma , err = runeArg (key , val )
64
+ case "comment" :
65
+ comment , err = runeArg (key , val )
63
66
default :
64
67
return nil , fmt .Errorf ("csv: unknown %q parameter" , key )
65
68
}
@@ -74,11 +77,12 @@ func RegisterFS(db *sqlite3.Conn, fsys fs.FS) {
74
77
}
75
78
76
79
table := & table {
77
- fsys : fsys ,
78
- name : filename ,
79
- data : data ,
80
- comma : comma ,
81
- header : header ,
80
+ fsys : fsys ,
81
+ name : filename ,
82
+ data : data ,
83
+ comma : comma ,
84
+ comment : comment ,
85
+ header : header ,
82
86
}
83
87
84
88
if schema == "" {
@@ -118,12 +122,13 @@ func RegisterFS(db *sqlite3.Conn, fsys fs.FS) {
118
122
}
119
123
120
124
type table struct {
121
- fsys fs.FS
122
- name string
123
- data string
124
- typs []affinity
125
- comma rune
126
- header bool
125
+ fsys fs.FS
126
+ name string
127
+ data string
128
+ typs []affinity
129
+ comma rune
130
+ comment rune
131
+ header bool
127
132
}
128
133
129
134
func (t * table ) BestIndex (idx * sqlite3.IndexInfo ) error {
@@ -180,6 +185,7 @@ func (t *table) newReader() (*csv.Reader, io.Closer, error) {
180
185
csv := csv .NewReader (r )
181
186
csv .ReuseRecord = true
182
187
csv .Comma = t .comma
188
+ csv .Comment = t .comment
183
189
return csv , c , nil
184
190
}
185
191
@@ -235,17 +241,13 @@ func (c *cursor) RowID() (int64, error) {
235
241
236
242
func (c * cursor ) Column (ctx * sqlite3.Context , col int ) error {
237
243
if col < len (c .row ) {
238
- var typ affinity
244
+ typ := text
239
245
if col < len (c .table .typs ) {
240
246
typ = c .table .typs [col ]
241
247
}
242
248
243
249
txt := c .row [col ]
244
- if typ == blob {
245
- ctx .ResultText (txt )
246
- return nil
247
- }
248
- if txt == "" {
250
+ if txt == "" && typ != text {
249
251
return nil
250
252
}
251
253
@@ -266,9 +268,9 @@ func (c *cursor) Column(ctx *sqlite3.Context, col int) error {
266
268
}
267
269
}
268
270
fallthrough
269
- case text :
270
- ctx .ResultText (c .row [col ])
271
+ default :
271
272
}
273
+ ctx .ResultText (txt )
272
274
}
273
275
return nil
274
276
}
0 commit comments