Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sem/tree: add support for producing vectorized data from strings #96235

Merged
merged 1 commit into from
Feb 22, 2023

Conversation

cucaroach
Copy link
Contributor

tree.ValueHandler exposes raw machine type hooks that are used by
vec_handler to build coldata.Vec's.

Epic: CRDB-18892
Informs: #91831
Release note: None

@blathers-crl
Copy link

blathers-crl bot commented Jan 30, 2023

It looks like your PR touches production code but doesn't add or edit any test code. Did you consider adding tests to your PR?

🦉 Hoot! I am a Blathers, a bot for CockroachDB. My owner is dev-inf.

@cockroach-teamcity
Copy link
Member

This change is Reviewable

@cucaroach cucaroach force-pushed the parse_string_vec branch 2 times, most recently from a8bead4 to 9ccc502 Compare January 31, 2023 12:28
@cucaroach cucaroach changed the title sem/tree: add support for producing vectorized data from strings. sem/tree: add support for producing vectorized data from strings Jan 31, 2023
@cucaroach cucaroach marked this pull request as ready for review January 31, 2023 12:29
@cucaroach cucaroach requested review from a team as code owners January 31, 2023 12:29
@cucaroach cucaroach requested review from rytaft and ajwerner January 31, 2023 12:29
@cucaroach
Copy link
Contributor Author

Reviewer note: This code is notably devoid of tests, there are pretty exhaustive tests in the coming copy changes built on this so I thought it was fine, its pretty straightforward and I'm trying to break all the changes into bit sized pieces for review purposes.

@cucaroach cucaroach force-pushed the parse_string_vec branch 2 times, most recently from 0b07c4e to 613d222 Compare January 31, 2023 17:41
Copy link
Collaborator

@rytaft rytaft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 4 of 4 files at r1, 2 of 2 files at r2, all commit messages.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (waiting on @ajwerner and @cucaroach)


pkg/col/coldataext/vec_handler.go line 34 at r1 (raw file):

	col coldata.Vec
	row int
}

nit: add an assertion that this implements tree.ValueHandler, e.g.:

var _ tree.ValueHandler = (*vecHandler)(nil)

pkg/col/coldataext/vec_handler.go line 48 at r1 (raw file):

// Decimal implements tree.ValueHandler interface. It returns a pointer into the
// vec to avoid copying.
func (v *vecHandler) Decimal() *apd.Decimal {

It's a bit strange that this is the only method that gets a value, while all the others seem to set the value, and it's not immediately clear by looking at the signature. Can you maybe prefix all the setter functions with Set? e.g., SetNull, SetString....

Also, out of curiosity, why is Decimal the only getter needed?

Edit: I see it's due to the implementation in ParseAndRequireStringEx. But why not just do the setting inside this function and make it return an error?


pkg/col/coldataext/vec_handler.go line 1 at r2 (raw file):

// Copyright 2022 The Cockroach Authors.

shouldn't this be 2023?


pkg/sql/sem/tree/datum.go line 2913 at r1 (raw file):

//
// Parts of this function are inlined into ParseAndRequireEx, if this changes materially
// ParseAndRequireEx may need to change too.

I don't see that function in this commit. Should this comment go into a different PR?


pkg/sql/sem/tree/parse_string.go line 161 at r1 (raw file):

}

// ValueHandler is an interface to allow raw types to extracted from strings.

nit: to -> to be


pkg/sql/sem/tree/parse_string.go line 182 at r1 (raw file):

// vector engine directly to a ValueHandler. Other types are handled by
// ParseAndRequireString.
func ParseAndRequireStringEx(t *types.T, s string, ctx ParseContext, vh ValueHandler, ph *pgdate.ParseHelper) (err error) {

What does Ex mean here?


pkg/sql/sem/tree/parse_string.go line 206 at r1 (raw file):

		if err = setDecimalString(s, dec); err != nil {
			// Erase any invalid results.
			*dec = apd.Decimal{}

Is there any way to do this inside the vh function so Decimal can also be a setter function?

Copy link
Contributor Author

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (waiting on @ajwerner and @rytaft)


pkg/col/coldataext/vec_handler.go line 34 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

nit: add an assertion that this implements tree.ValueHandler, e.g.:

var _ tree.ValueHandler = (*vecHandler)(nil)

👍


pkg/col/coldataext/vec_handler.go line 48 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

It's a bit strange that this is the only method that gets a value, while all the others seem to set the value, and it's not immediately clear by looking at the signature. Can you maybe prefix all the setter functions with Set? e.g., SetNull, SetString....

Also, out of curiosity, why is Decimal the only getter needed?

Edit: I see it's due to the implementation in ParseAndRequireStringEx. But why not just do the setting inside this function and make it return an error?

So its a setter not a getter its just returning a pointer into the vec so we can do an in place construct of the the decimal and avoid copy penalty and any heap allocations.


pkg/col/coldataext/vec_handler.go line 1 at r2 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

shouldn't this be 2023?

I wrote it in December, should I change it to 23?


pkg/sql/sem/tree/datum.go line 2913 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

I don't see that function in this commit. Should this comment go into a different PR?

This was a warning that the body of ParseDTimestamp is basically duplicated in the case types.TimestampFamily: case arm of ParseAndRequireEx. Maybe its not worth mentioning or maybe I should go further and trying to squeeze the TimestmpFamily case arms down to eliminate the code duplication? Open to suggestions, maybe an additional TODO to refactor things better in ParseAndRequireEx and clarify this comment?


pkg/sql/sem/tree/parse_string.go line 182 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

What does Ex mean here?

Extra? I copied it from elsewhere, maybe ParseAndRequireStringHandler would be better?


pkg/sql/sem/tree/parse_string.go line 206 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

Is there any way to do this inside the vh function so Decimal can also be a setter function?

This was the only way I could construct it that avoided copies and unnecessary heap allocations for temporaries. I'll add a clarifying comment here too.

Copy link
Collaborator

@rytaft rytaft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (waiting on @ajwerner and @cucaroach)


pkg/col/coldataext/vec_handler.go line 48 at r1 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

So its a setter not a getter its just returning a pointer into the vec so we can do an in place construct of the the decimal and avoid copy penalty and any heap allocations.

ok! I think you could make the comment more explicit (and I'd still change the other function names to Set...)


pkg/col/coldataext/vec_handler.go line 1 at r2 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

I wrote it in December, should I change it to 23?

I'd say 23 since the commit is dated 2023


pkg/sql/sem/tree/datum.go line 2913 at r1 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

This was a warning that the body of ParseDTimestamp is basically duplicated in the case types.TimestampFamily: case arm of ParseAndRequireEx. Maybe its not worth mentioning or maybe I should go further and trying to squeeze the TimestmpFamily case arms down to eliminate the code duplication? Open to suggestions, maybe an additional TODO to refactor things better in ParseAndRequireEx and clarify this comment?

Oh ok -- did you mean ParseAndRequireStringEx? That's what the new function is called.

Anyway, up to you if you want to leave this comment, but it seems a bit confusing to me since it's not really duplicated (that function also calls checkTimeBounds).


pkg/sql/sem/tree/parse_string.go line 182 at r1 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

Extra? I copied it from elsewhere, maybe ParseAndRequireStringHandler would be better?

yea I like ParseAndRequireStringHandler better

Copy link
Collaborator

@rytaft rytaft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry just noticed that you pushed at the same time as I wrote my comments.

Reviewed 3 of 3 files at r3, all commit messages.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (waiting on @ajwerner and @cucaroach)


pkg/sql/sem/tree/datum.go line 2913 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

Oh ok -- did you mean ParseAndRequireStringEx? That's what the new function is called.

Anyway, up to you if you want to leave this comment, but it seems a bit confusing to me since it's not really duplicated (that function also calls checkTimeBounds).

(looks like the function name is fixed now)

@cucaroach cucaroach force-pushed the parse_string_vec branch 3 times, most recently from f6ef8ed to 0927174 Compare January 31, 2023 22:56
Copy link
Contributor Author

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (waiting on @ajwerner and @rytaft)


pkg/col/coldataext/vec_handler.go line 48 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

ok! I think you could make the comment more explicit (and I'd still change the other function names to Set...)

Done.


pkg/col/coldataext/vec_handler.go line 1 at r2 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

I'd say 23 since the commit is dated 2023

Done.


pkg/sql/sem/tree/datum.go line 2913 at r1 (raw file):

Previously, rytaft (Rebecca Taft) wrote…

(looks like the function name is fixed now)

If you're happy with it I'll remove the comments and the TODO, I think when I originally wrote it I hadn't pulled out checkTimeBounds yet and it was worse.

Copy link
Collaborator

@rytaft rytaft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewed 3 of 3 files at r4, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @ajwerner)

@cucaroach
Copy link
Contributor Author

TFTRs!
bors r+

craig bot pushed a commit that referenced this pull request Feb 1, 2023
95622: backupccl,storage: add logs around manifest handling and ExportRequest pagination r=stevendanna a=adityamaru

backupccl: add logging to backup manifest handling

Release note: None

storage: log the ExportRequest pagination reason

Release note: None

Epic: None

95865: cmd/roachtest: adapt disk-stall detection roachtest r=nicktrav,erikgrinaker a=jbowens

Move the existing disk-stall/* roachtests under disk-stall/fuse/* (for the FUSE
filesystem approach to stalling) and skip them for now. Currently, they're not
capable of stalling the disk longer 50us (see #95886), which makes them
unreliable at exercising stalls.

Add two new roachtests, disk-stall/dmsetup and disk-stall/cgroup that use
dmsetup and cgroup bandwidth restrctions respectively to reliably induce a
write stall for an indefinite duration.

Informs #94373.
Epic: None
Release note: None

95999: multitenant: add multitenant/shared-process/basic roachtest r=stevendanna a=msbutler

This patch introduces a simple roachtest that runs in a shared-process tenant.
This test imports a 500 tpcc workload (about 30 GB of replicated data), and
runs the workload for 10 minutes. The test is run on a 4 node, 4vcpu cluster
with local ssds.

A future patch could complicate the test by running schema changes or other
bulk operations.

Fixes #95990

Release note: None

96115: schemachanger: Implement `DROP CONSTRAINT` in declarative schema changer r=Xiang-Gu a=Xiang-Gu

This PR implements `ALTER TABLE t DROP CONSTRAINT cons_name` in declarative schema changer.

Supported constraints include Checks, FK, and UniqueWithoutIndex.

Dropping PK or Unique constraints will fall back to legacy schema changer, which in turn spits out an "not supported yet" error.

Epic: None

96202: opt: inverted-index accelerate filters of the form j->0 @> '{"b": "c"} r=Shivs11 a=Shivs11

Previously, the optimizer did not plan inverted index scans for filters
having an integer as the index for the fetch value in a filter alongside
the "contains" or the "contained by" operator.

To address this, we now build JSON arrays from fetch value expressions
with integer indexes. From these JSON arrays, inverted spans are built
for constraining scans over inverted indexes. With these changes chains
of both integer and string fetch value operators are now supported
alongside the "contains" and the "contained by" operators.
(e.g., j->0 `@>` '{"b": "c"}' and j->0 <@ '{"b": "c"}').

Epic: [CRDB-3301](https://cockroachlabs.atlassian.net/browse/CRDB-3301)
Fixes: #94667

Release note (performance improvement): The optimizer now plans
inverted index scans for queries that filter by JSON fetch value
operators (->) with integer indices alongside the "contains" or
the "contained by" operators, e.g, json_col->0 `@>` '{"b": "c"}'
or json_col->0 <@ '{"b": "c"}'

96235: sem/tree: add support for producing vectorized data from strings r=cucaroach a=cucaroach

tree.ValueHandler exposes raw machine type hooks that are used by
vec_handler to build coldata.Vec's.

Epic: CRDB-18892
Informs: #91831
Release note: None


96328: udf: allow strict UDF with no arguments r=DrewKimball a=DrewKimball

This patch fixes the case when a strict UDF (returns null on null input) has no arguments. Previously, attempting to call such a function would result in `ERROR: reflect: call of reflect.Value.Pointer on zero Value`.

Fixes #96326

Release note: None

96366: release: skip nil GitHub events r=celiala a=rail

Previously, we referenced `*event.Event`, but in some cases the event objects are `nil`.

This PR skips the nil GitHub event objects.

Epic: none
Release note: None

Co-authored-by: adityamaru <[email protected]>
Co-authored-by: Jackson Owens <[email protected]>
Co-authored-by: Michael Butler <[email protected]>
Co-authored-by: Xiang Gu <[email protected]>
Co-authored-by: Shivam Saraf <[email protected]>
Co-authored-by: Tommy Reilly <[email protected]>
Co-authored-by: Drew Kimball <[email protected]>
Co-authored-by: Rail Aliiev <[email protected]>
@craig
Copy link
Contributor

craig bot commented Feb 1, 2023

Build failed (retrying...):

Copy link
Member

@yuzefovich yuzefovich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 1 of 4 files at r1, 3 of 3 files at r4, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @ajwerner and @cucaroach)


pkg/col/coldataext/vec_handler.go line 31 at r4 (raw file):

type vecHandler struct {
	col coldata.Vec

Is this struct performance-sensitive? If so, it'd be better to unwrap coldata.Vec into a concrete slice in order to avoid an interface conversion on each setter method invocation. We could set up these fields to be auto-generated - take a look at TypedVecs in coldata/vec_tmpl.go. Then we'll only incur a type switch in MakeVecHandler and increase the size of vecHandler struct, but it seems like an acceptable tradeoff.


pkg/sql/sem/tree/parse_string.go line 122 at r4 (raw file):

}

func truncateString(s string, t *types.T) string {

nit: maybe s/truncateString/maybeTruncateString?


pkg/sql/sem/tree/parse_string.go line 189 at r4 (raw file):

	case types.BoolFamily:
		var b bool
		if b, err = ParseBool(strings.TrimSpace(s)); err == nil {

nit: I think we tend to short-circuit in err != nil case with a return so that the "success" branch is not indented. Up to you though.


pkg/sql/sem/tree/parse_string.go line 221 at r4 (raw file):

	case types.IntFamily:
		var i int64
		if i, err = strconv.ParseInt(s, 0, 64); err == nil {

Do we always parse ints as int64, regardless of t.Width()?


pkg/sql/sem/tree/parse_string.go line 274 at r4 (raw file):

			err = MakeParseError(s, types.Uuid, err)
		}
	default:

We also now support EnumFamily natively.


pkg/sql/sem/tree/parse_string.go line 275 at r4 (raw file):

		}
	default:
		var d Datum

nit: consider adding a test-only assertion here that typeconv.TypeFamilyToCanonicalTypeFamily(t.Family()) returns typeconv.DatumVecCanonicalTypeFamily. Perhaps some randomized unit test of ParseAndRequireStringHandler would also be good.

@cucaroach
Copy link
Contributor Author

bors r-

@craig
Copy link
Contributor

craig bot commented Feb 1, 2023

Canceled.

Copy link
Contributor Author

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @ajwerner and @yuzefovich)


pkg/col/coldataext/vec_handler.go line 31 at r4 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

Is this struct performance-sensitive? If so, it'd be better to unwrap coldata.Vec into a concrete slice in order to avoid an interface conversion on each setter method invocation. We could set up these fields to be auto-generated - take a look at TypedVecs in coldata/vec_tmpl.go. Then we'll only incur a type switch in MakeVecHandler and increase the size of vecHandler struct, but it seems like an acceptable tradeoff.

Yes and my prototype that didn't use coldata.Vec was %15 faster during the string->data phase. I looked at TypedVec but didn't put 2 and 2 together, this is a great idea, thanks!


pkg/sql/sem/tree/parse_string.go line 189 at r4 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

nit: I think we tend to short-circuit in err != nil case with a return so that the "success" branch is not indented. Up to you though.

Yeah I went back and forth on this, I wanted it to be consistent but some helper return a well formed parse error and some need to be massaged and wrapped so I went with avoiding as many else clauses as I could. I think its a wash which is better/worse for readability, when a tie go for brevity say I!


pkg/sql/sem/tree/parse_string.go line 221 at r4 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

Do we always parse ints as int64, regardless of t.Width()?

Yeah, that's what ParseAndRequireString does, do you think its worth carving off int16 and int32 and using packed slices for those? I suppose if coldata already supports it why not? I'll probably throw on the TODO queue.


pkg/sql/sem/tree/parse_string.go line 274 at r4 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

We also now support EnumFamily natively.

Thanks!


pkg/sql/sem/tree/parse_string.go line 275 at r4 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

nit: consider adding a test-only assertion here that typeconv.TypeFamilyToCanonicalTypeFamily(t.Family()) returns typeconv.DatumVecCanonicalTypeFamily. Perhaps some randomized unit test of ParseAndRequireStringHandler would also be good.

Okay. I have copy tests that hit all the types but I was feeling guilty about pushing this w/o tests, I'll add some basic ones.

Copy link
Member

@yuzefovich yuzefovich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @ajwerner and @cucaroach)


pkg/sql/sem/tree/parse_string.go line 221 at r4 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

Yeah, that's what ParseAndRequireString does, do you think its worth carving off int16 and int32 and using packed slices for those? I suppose if coldata already supports it why not? I'll probably throw on the TODO queue.

Yeah, doesn't seem urgent, a TODO sgtm. I guess I'm surprised that we don't consult the schema of the table we're copying into nor default_int_size session variable for the width with which to parse integers.

@cucaroach cucaroach force-pushed the parse_string_vec branch 2 times, most recently from 359f65b to 0f3540c Compare February 2, 2023 18:26
@cucaroach
Copy link
Contributor Author

RFAL, added some benchmarks and some testing code and incorporated Yahor's suggestions.

Copy link
Member

@yuzefovich yuzefovich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 3 of 3 files at r5, all commit messages.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @ajwerner and @cucaroach)


pkg/sql/sem/tree/parse_string.go line 274 at r4 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

Thanks!

I still don't see the enums :)


pkg/sql/sem/tree/parse_string_test.go line 39 at r5 (raw file):

	case types.BoolFamily:
		return v.Bool()[i]
	case types.BytesFamily, types.StringFamily, types.UuidFamily:

nit: StringFamily and UuidFamily are not "canonical", so they will never match in this switch. Ditto for DateFamily and TimestampFamily.


pkg/sql/sem/tree/parse_string_test.go line 72 at r5 (raw file):

		d := randgen.RandDatum(rng, typ, false)
		s := d.String()
		if s[0] == '\'' {

nit: add a quick comment for why we need to do this.


pkg/sql/sem/tree/parse_string_test.go line 107 at r5 (raw file):

		{"423136fs", types.Date},
		{"", types.Decimal},
		{"not a decimnal", types.Decimal},

nit: s/decimnal/decimal/.


pkg/sql/sem/tree/parse_string_test.go line 181 at r5 (raw file):

	b.Run("datum", func(b *testing.B) {
		for i := 0; i < b.N; i++ {
			for _, tc := range benchCases {

Does the speed vary significantly for different types? Perhaps each bench case should be a separate benchmark run?

Copy link
Contributor Author

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @ajwerner, @rytaft, and @yuzefovich)


pkg/sql/sem/tree/parse_string.go line 274 at r4 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

I still don't see the enums :)

Done. Although my tests will come later in the copy testing patch, here's what they look like:


exec-ddl
CREATE TYPE testenum AS ENUM('cat','dog','bear');
CREATE TABLE tenum (i INT PRIMARY KEY,c1 testenum)
----

copy
COPY tenum FROM STDIN
0	cat
1	dog
2	bear
----
3

copy-kvtrace
COPY tenum FROM STDIN
0	cat
1	dog
2	bear
----
CPut /Table/<>/1/0/0 -> /TUPLE/2:2:Bytes/@
CPut /Table/<>/1/1/0 -> /TUPLE/2:2:Bytes/0x80
CPut /Table/<>/1/2/0 -> /TUPLE/2:2:Bytes/0xc0

exec-ddl
CREATE TABLE tenum2 (i INT PRIMARY KEY, c1 testenum, INDEX(c1))
----

copy
COPY tenum2 FROM STDIN
0	cat
----
1

copy-kvtrace
COPY tenum2 FROM STDIN
0	cat
----
CPut /Table/<>/1/0/0 -> /TUPLE/2:2:Bytes/@
InitPut /Table/<>/2/"@"/0/0 -> /BYTES/

exec-ddl
CREATE TABLE tenum3 (i INT PRIMARY KEY, c1 testenum, UNIQUE INDEX(c1))
----

copy
COPY tenum3 FROM STDIN
0	cat
----
1

copy-kvtrace
COPY tenum3 FROM STDIN
0	cat
----
CPut /Table/<>/1/0/0 -> /TUPLE/2:2:Bytes/@
InitPut /Table/<>/2/"@"/0 -> /BYTES/0x88

pkg/sql/sem/tree/parse_string_test.go line 181 at r5 (raw file):

Previously, yuzefovich (Yahor Yuzefovich) wrote…

Does the speed vary significantly for different types? Perhaps each bench case should be a separate benchmark run?

Good idea! Output:

BenchmarkParseString
BenchmarkParseString/date
BenchmarkParseString/date-10             5820627               197.3 ns/op            16 B/op          1 allocs/op
BenchmarkParseString/bool
BenchmarkParseString/bool-10            65012752                18.58 ns/op            0 B/op          0 allocs/op
BenchmarkParseString/decimal
BenchmarkParseString/decimal-10         11046240               107.0 ns/op            40 B/op          2 allocs/op
BenchmarkParseString/float
BenchmarkParseString/float-10           39869371                29.47 ns/op            8 B/op          1 allocs/op
BenchmarkParseString/int
BenchmarkParseString/int-10             39210826                30.18 ns/op            8 B/op          1 allocs/op
BenchmarkParseString/interval
BenchmarkParseString/interval-10        14225242                81.95 ns/op           48 B/op          2 allocs/op
BenchmarkParseString/jsonb
BenchmarkParseString/jsonb-10            3849688               311.1 ns/op           400 B/op         11 allocs/op
BenchmarkParseString/string
BenchmarkParseString/string-10          60582729                17.36 ns/op           16 B/op          1 allocs/op
BenchmarkParseString/timestamptz
BenchmarkParseString/timestamptz-10      2409697               524.2 ns/op           944 B/op          3 allocs/op
BenchmarkParseString/vec/date
BenchmarkParseString/vec/date-10         6493965               182.3 ns/op             0 B/op          0 allocs/op
BenchmarkParseString/vec/bool
BenchmarkParseString/vec/bool-10        63239580                19.07 ns/op            0 B/op          0 allocs/op
BenchmarkParseString/vec/decimal
BenchmarkParseString/vec/decimal-10     13964929                84.75 ns/op            8 B/op          1 allocs/op
BenchmarkParseString/vec/float
BenchmarkParseString/vec/float-10       61221234                19.72 ns/op            0 B/op          0 allocs/op
BenchmarkParseString/vec/int
BenchmarkParseString/vec/int-10         81526585                14.66 ns/op            0 B/op          0 allocs/op
BenchmarkParseString/vec/interval
BenchmarkParseString/vec/interval-10    21017079                57.38 ns/op            0 B/op          0 allocs/op
BenchmarkParseString/vec/jsonb
BenchmarkParseString/vec/jsonb-10        3604507               333.7 ns/op           384 B/op         10 allocs/op
BenchmarkParseString/vec/string
BenchmarkParseString/vec/string-10      141814524                8.481 ns/op           0 B/op          0 allocs/op
BenchmarkParseString/vec/timestamptz
BenchmarkParseString/vec/timestamptz-10                  2721753               441.5 ns/op           896 B/op          1 allocs/op

Copy link
Member

@yuzefovich yuzefovich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewed 3 of 3 files at r6, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (and 1 stale) (waiting on @ajwerner)

@cucaroach
Copy link
Contributor Author

Okay because ParseStringHandler isn't used anywhere yet I had to add a #keep to the BUILD.bazel, should pass CI now.

@cucaroach cucaroach force-pushed the parse_string_vec branch 4 times, most recently from 79deabf to 302f135 Compare February 16, 2023 19:42
tree.ValueHandler exposes raw machine type hooks that are used by
vec_handler to build coldata.Vec's.

Epic: CRDB-18892
Informs: cockroachdb#91831
Release note: None
@cucaroach
Copy link
Contributor Author

bors r+
TFTRs!

@craig
Copy link
Contributor

craig bot commented Feb 22, 2023

This PR was included in a batch that was canceled, it will be automatically retried

@craig craig bot merged commit 3a532ac into cockroachdb:master Feb 22, 2023
@craig
Copy link
Contributor

craig bot commented Feb 22, 2023

Build succeeded:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants