mirror of
https://github.com/minio/minio.git
synced 2025-02-13 06:38:09 -05:00
select: Return null for non-exiting column indexes (#13196)
Fixes #13186
This commit is contained in:
parent
311718309c
commit
5a64003f6f
@ -22,6 +22,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/bcicen/jstream"
|
"github.com/bcicen/jstream"
|
||||||
csv "github.com/minio/csvparser"
|
csv "github.com/minio/csvparser"
|
||||||
@ -43,6 +45,20 @@ type Record struct {
|
|||||||
func (r *Record) Get(name string) (*sql.Value, error) {
|
func (r *Record) Get(name string) (*sql.Value, error) {
|
||||||
index, found := r.nameIndexMap[name]
|
index, found := r.nameIndexMap[name]
|
||||||
if !found {
|
if !found {
|
||||||
|
// Check if index.
|
||||||
|
if strings.HasPrefix(name, "_") {
|
||||||
|
idx, err := strconv.Atoi(strings.TrimPrefix(name, "_"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("column %v not found", name)
|
||||||
|
}
|
||||||
|
// The position count starts at 1.
|
||||||
|
idx--
|
||||||
|
if idx >= len(r.csvRecord) || idx < 0 {
|
||||||
|
// If field index > number of columns, return null
|
||||||
|
return sql.FromNull(), nil
|
||||||
|
}
|
||||||
|
return sql.FromBytes([]byte(r.csvRecord[idx])), nil
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("column %v not found", name)
|
return nil, fmt.Errorf("column %v not found", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,6 +675,11 @@ func TestCSVQueries2(t *testing.T) {
|
|||||||
query: `SELECT num2 from s3object s WHERE num2 = 0.765111`,
|
query: `SELECT num2 from s3object s WHERE num2 = 0.765111`,
|
||||||
wantResult: `{"num2":" 0.765111"}`,
|
wantResult: `{"num2":" 0.765111"}`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "select-non_exiting_values",
|
||||||
|
query: `SELECT _1 as first, s._100 from s3object s LIMIT 1`,
|
||||||
|
wantResult: `{"first":"1","_100":null}`,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
defRequest := `<?xml version="1.0" encoding="UTF-8"?>
|
defRequest := `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user