func (this *Iter_ExtraSrv_Extra) Zero() error {
	row, ok := this.Next()
	if row != nil && row.err != nil {
		return row.err
	}
	if ok {
		return fmt.Errorf("expected exactly 0 results from query 'Extra'")
	}
	return nil
}
Zero returns an error if there were any rows in the result
package basic
import (
	fmt "fmt"
	io "io"
	spanner "cloud.google.com/go/spanner"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	persist "github.com/tcncloud/protoc-gen-persist/persist"
	test "github.com/tcncloud/protoc-gen-persisttests/test"
	context "golang.org/x/net/context"
	iterator "google.golang.org/api/iterator"
	codes "google.golang.org/grpc/codes"
	gstatus "google.golang.org/grpc/status"
)
type Result interface {
	LastInsertId() (int64, error)
	RowsAffected() (int64, error)
}
type SpannerResult struct {
	iter *spanner.RowIterator
}
func (sr *SpannerResult) LastInsertId() (int64, error) {
	return -1, nil
}
func (sr *SpannerResult) RowsAffected() (int64, error) {
	return sr.iter.RowCount, nil
}
type Queries_ExtraSrv struct {
	opts Opts_ExtraSrv
}
func QueriesExtraSrv(opts ...Opts_ExtraSrv) *Queries_ExtraSrv {
	var myOpts Opts_ExtraSrv
	if len(opts) > 0 {
		myOpts = opts[0]
	} else {
		myOpts = OptsExtraSrv(&DefaultHooks_ExtraSrv{}, &DefaultTypeMappings_ExtraSrv{})
	}
	return &Queries_ExtraSrv{
		opts: myOpts,
	}
}
func (this *Queries_ExtraSrv) Extra(ctx context.Context, db persist.SpannerRunnable) *Query_ExtraSrv_Extra {
	return &Query_ExtraSrv_Extra{
		opts: this.opts,
		ctx:  ctx,
		db:   db,
	}
}
type Query_ExtraSrv_Extra struct {
	opts Opts_ExtraSrv
	db   persist.SpannerRunnable
	ctx  context.Context
}
func (this *Query_ExtraSrv_Extra) QueryInType_Empty()         {}
func (this *Query_ExtraSrv_Extra) QueryOutType_HasTimestamp() {}
func (this *Query_ExtraSrv_Extra) Execute(x In_ExtraSrv_Extra) *Iter_ExtraSrv_Extra {
	ctx := this.ctx
	result := &Iter_ExtraSrv_Extra{
		result: &SpannerResult{},
		tm:     this.opts.MAPPINGS,
		ctx:    ctx,
	}
	params, err := func() (map[string]interface{}, error) {
		result := make(map[string]interface{})
		return result, nil
	}()
	if err != nil {
		result.err = err
		return result
	}
	iter := this.db.QueryWithStats(ctx, spanner.Statement{
		SQL:    "SELECT * FROM extra_unary",
		Params: params,
	})
	result.rows = iter
	result.err = err
	return result
}
type Iter_ExtraSrv_Extra struct {
	result *SpannerResult
	rows   *spanner.RowIterator
	err    error
	tm     TypeMappings_ExtraSrv
	ctx    context.Context
}
func (this *Iter_ExtraSrv_Extra) IterOutTypeHasTimestamp() {}
func (this *Iter_ExtraSrv_Extra) IterInTypeEmpty()         {}
func (this *Iter_ExtraSrv_Extra) Each(fun func(*Row_ExtraSrv_Extra) error) error {
	for {
		select {
		case <-this.ctx.Done():
			return this.ctx.Err()
		default:
			if row, ok := this.Next(); !ok {
				return nil
			} else if err := fun(row); err != nil {
				return err
			}
		}
	}
}
func (this *Iter_ExtraSrv_Extra) One() *Row_ExtraSrv_Extra {
	first, hasFirst := this.Next()
	if first != nil && first.err != nil {
		return &Row_ExtraSrv_Extra{err: first.err}
	}
	_, hasSecond := this.Next()
	if !hasFirst || hasSecond {
		amount := "none"
		if hasSecond {
			amount = "multiple"
		}
		return &Row_ExtraSrv_Extra{err: fmt.Errorf("expected exactly 1 result from query 'Extra' found %s", amount)}
	}
	return first
}