Explorar el Código

RawFieldNames should ignore the field whose name is start with a dash (#2725)

Archer hace 2 años
padre
commit
683d793719
Se han modificado 2 ficheros con 34 adiciones y 0 borrados
  1. 4 0
      core/stores/builder/builder.go
  2. 30 0
      core/stores/builder/builder_test.go

+ 4 - 0
core/stores/builder/builder.go

@@ -45,9 +45,13 @@ func RawFieldNames(in interface{}, postgresSql ...bool) []string {
 			// `db:"id"`
 			// `db:"id"`
 			// `db:"id,type=char,length=16"`
 			// `db:"id,type=char,length=16"`
 			// `db:",type=char,length=16"`
 			// `db:",type=char,length=16"`
+			// `db:"-,type=char,length=16"`
 			if strings.Contains(tagv, ",") {
 			if strings.Contains(tagv, ",") {
 				tagv = strings.TrimSpace(strings.Split(tagv, ",")[0])
 				tagv = strings.TrimSpace(strings.Split(tagv, ",")[0])
 			}
 			}
+			if tagv == "-" {
+				continue
+			}
 			if len(tagv) == 0 {
 			if len(tagv) == 0 {
 				tagv = fi.Name
 				tagv = fi.Name
 			}
 			}

+ 30 - 0
core/stores/builder/builder_test.go

@@ -39,3 +39,33 @@ func TestFieldNamesWithTagOptions(t *testing.T) {
 		assert.Equal(t, expected, out)
 		assert.Equal(t, expected, out)
 	})
 	})
 }
 }
+
+type mockedUserWithDashTag struct {
+	ID       string `db:"id" json:"id,omitempty"`
+	UserName string `db:"user_name" json:"userName,omitempty"`
+	Mobile   string `db:"-" json:"mobile,omitempty"`
+}
+
+func TestFieldNamesWithDashTag(t *testing.T) {
+	t.Run("new", func(t *testing.T) {
+		var u mockedUserWithDashTag
+		out := RawFieldNames(&u)
+		expected := []string{"`id`", "`user_name`"}
+		assert.Equal(t, expected, out)
+	})
+}
+
+type mockedUserWithDashTagAndOptions struct {
+	ID       string `db:"id" json:"id,omitempty"`
+	UserName string `db:"user_name,type=varchar,length=255" json:"userName,omitempty"`
+	Mobile   string `db:"-,type=varchar,length=255" json:"mobile,omitempty"`
+}
+
+func TestFieldNamesWithDashTagAndOptions(t *testing.T) {
+	t.Run("new", func(t *testing.T) {
+		var u mockedUserWithDashTagAndOptions
+		out := RawFieldNames(&u)
+		expected := []string{"`id`", "`user_name`"}
+		assert.Equal(t, expected, out)
+	})
+}