예제 #1
0
파일: table_test.go 프로젝트: rjp/crud
func TestNewTableQuery(t *testing.T) {
	id, err := sql.NewOptions("name=id type=int(11) auto-increment=100 unique unsigned primary-key")
	assert.Nil(t, err)

	key, err := sql.NewOptions("varchar(30) required default='yolo' name=key")
	assert.Nil(t, err)

	bio, err := sql.NewOptions("text name=bio")
	assert.Nil(t, err)

	ignored, err := sql.NewOptions("-")
	assert.Nil(t, err)

	query := sql.NewTableQuery("user", []*sql.Options{id, key, bio, ignored}, false)
	lines := strings.Split(query, "\n")
	assert.Equal(t, len(lines), 6)
	assert.Equal(t, lines[0], "CREATE TABLE `user` (")
	assert.Equal(t, lines[1], "  `id` int(11) UNSIGNED UNIQUE AUTO_INCREMENT,")
	assert.Equal(t, lines[2], "  `key` varchar(30) NOT NULL DEFAULT 'yolo',")
	assert.Equal(t, lines[3], "  `bio` text,")
	assert.Equal(t, lines[4], "  PRIMARY KEY (`id`)")
	assert.Equal(t, lines[5], ") AUTO_INCREMENT=100;")

	query = sql.NewTableQuery("user", []*sql.Options{id, key, bio, ignored}, true)
	lines = strings.Split(query, "\n")
	assert.Equal(t, lines[0], "CREATE TABLE IF NOT EXISTS `user` (")
}
예제 #2
0
파일: options_test.go 프로젝트: rjp/crud
func TestCustomTypes(t *testing.T) {
	o, err := sql.NewOptions("text")
	assert.Nil(t, err)
	assert.Equal(t, o.Type, "text")
	assert.False(t, o.IsAutoIncrementing)

	o, err = sql.NewOptions("auto_increment type=bigint(16)")
	assert.Nil(t, err)
	assert.Equal(t, o.Type, "bigint")
	assert.Equal(t, o.Length, 16)
	assert.Equal(t, o.AutoIncrement, 1)
	assert.True(t, o.IsAutoIncrementing)
}
예제 #3
0
파일: table_test.go 프로젝트: rjp/crud
func TestNewFieldQuery(t *testing.T) {
	f, err := sql.NewOptions("varchar(30) required default='yolo' name=key")
	assert.Nil(t, err)
	query := sql.NewFieldQuery(f)
	assert.Equal(t, query, "  `key` varchar(30) NOT NULL DEFAULT 'yolo'")

	f, err = sql.NewOptions("name=id type=int(11) auto-increment unique unsigned")
	assert.Nil(t, err)
	query = sql.NewFieldQuery(f)
	assert.Equal(t, query, "  `id` int(11) UNSIGNED UNIQUE AUTO_INCREMENT")

	f, err = sql.NewOptions("text name=bio")
	assert.Nil(t, err)
	query = sql.NewFieldQuery(f)
	assert.Equal(t, query, "  `bio` text")
}
예제 #4
0
파일: options_test.go 프로젝트: rjp/crud
func TestDefaultValues(t *testing.T) {
	o, err := sql.NewOptions("int autoincrement")
	assert.Nil(t, err)
	assert.Equal(t, o.AutoIncrement, 1)
	assert.True(t, o.IsAutoIncrementing)
	assert.Equal(t, o.Type, "int")
	assert.Equal(t, o.Length, 11)
}
예제 #5
0
파일: options_test.go 프로젝트: rjp/crud
func TestAllOptions(t *testing.T) {
	o, err := sql.NewOptions("varchar(255) auto-increment=25 primary-key required default='yolo' name=id")
	assert.Nil(t, err)
	assert.Equal(t, o.Name, "id")
	assert.Equal(t, o.Type, "varchar")
	assert.Equal(t, o.Length, 255)
	assert.Equal(t, o.AutoIncrement, 25)
	assert.True(t, o.IsAutoIncrementing)
	assert.Equal(t, o.IsPrimaryKey, true)
	assert.Equal(t, o.IsRequired, true)
	assert.Equal(t, o.DefaultValue, "'yolo'")
}
예제 #6
0
파일: table_test.go 프로젝트: rjp/crud
func TestNewFieldQueries(t *testing.T) {
	id, err := sql.NewOptions("name=id type=int(11) auto-increment unique unsigned")
	assert.Nil(t, err)

	key, err := sql.NewOptions("varchar(30) required default='yolo' name=key")
	assert.Nil(t, err)

	bio, err := sql.NewOptions("text name=bio")
	assert.Nil(t, err)

	ignored, err := sql.NewOptions("-")
	assert.Nil(t, err)

	queries := sql.NewFieldQueries([]*sql.Options{id, key, bio, ignored})
	assert.Nil(t, err)

	lines := strings.Split(queries, "\n")
	assert.Equal(t, len(lines), 3)
	assert.Equal(t, lines[0], "  `id` int(11) UNSIGNED UNIQUE AUTO_INCREMENT,")
	assert.Equal(t, lines[1], "  `key` varchar(30) NOT NULL DEFAULT 'yolo',")
	assert.Equal(t, lines[2], "  `bio` text")
}
예제 #7
0
파일: field-iteration.go 프로젝트: rjp/crud
func (iteration *FieldIteration) SQLOptions() (*sql.Options, error) {
	result, err := sql.NewOptions(iteration.TypeField().Tag.Get("sql"))
	if err != nil {
		return nil, err
	}

	if len(result.Name) == 0 {
		result.Name = snakecase.SnakeCase(iteration.Name())
	}

	if len(result.Type) == 0 {
		sqlType, err := sql.MatchType(iteration.TypeField().Type.String())
		if err != nil {
			return nil, err
		}

		result.Type = sqlType
		result.Length = sql.Types[result.Type]
	}

	return result, nil
}
예제 #8
0
파일: options_test.go 프로젝트: rjp/crud
func TestFailing(t *testing.T) {
	_, err := sql.NewOptions("yolo")
	assert.NotNil(t, err)
}
예제 #9
0
파일: options_test.go 프로젝트: rjp/crud
func TestIgnoring(t *testing.T) {
	o, err := sql.NewOptions("-")
	assert.Nil(t, err)
	assert.Equal(t, o.Ignore, true)
}