-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* new UUID UDF, first version * match checkstyle class-naming rule
- Loading branch information
1 parent
723b6cb
commit cfa65da
Showing
3 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Uuid.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright 2020 Confluent Inc. | ||
* | ||
* Licensed under the Confluent Community License (the "License"); you may not use this file except | ||
* in compliance with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.confluent.io/confluent-community-license | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under the License | ||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and limitations under the | ||
* License. | ||
*/ | ||
|
||
package io.confluent.ksql.function.udf.string; | ||
|
||
import io.confluent.ksql.function.udf.Udf; | ||
import io.confluent.ksql.function.udf.UdfDescription; | ||
|
||
@UdfDescription( | ||
name = "UUID", | ||
description = "Create a Universally Unique Identifier (UUID) generated according to RFC 4122. " | ||
+ "A call to UUID() returns a value conforming to UUID version 4, sometimes called " | ||
+ "\"random UUID\", as described in RFC 4122. The value is a 128-bit number represented " | ||
+ "as a string of five hexadecimal numbers aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.") | ||
public class Uuid { | ||
|
||
@Udf | ||
public String uuid() { | ||
return java.util.UUID.randomUUID().toString(); | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
ksqldb-engine/src/test/java/io/confluent/ksql/function/udf/string/UuidTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
/* | ||
* Copyright 2020 Confluent Inc. | ||
* | ||
* Licensed under the Confluent Community License (the "License"); you may not use this file except | ||
* in compliance with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.confluent.io/confluent-community-license | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under the License | ||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and limitations under the | ||
* License. | ||
*/ | ||
|
||
package io.confluent.ksql.function.udf.string; | ||
|
||
import static org.hamcrest.MatcherAssert.assertThat; | ||
import static org.hamcrest.Matchers.hasSize; | ||
import static org.hamcrest.Matchers.is; | ||
import static org.hamcrest.Matchers.isIn; | ||
|
||
import java.util.Arrays; | ||
import java.util.HashSet; | ||
import java.util.Set; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
|
||
public class UuidTest { | ||
|
||
private Uuid udf; | ||
|
||
@Before | ||
public void setUp() { | ||
udf = new Uuid(); | ||
} | ||
|
||
@Test | ||
public void shouldReturnDistinctValueEachInvocation() { | ||
int capacity = 1000; | ||
final Set<String> outputs = new HashSet<String>(capacity); | ||
for (int i = 0; i < capacity; i++) { | ||
outputs.add(udf.uuid()); | ||
} | ||
assertThat(outputs, hasSize(capacity)); | ||
} | ||
|
||
@Test | ||
public void shouldHaveCorrectOutputFormat() { | ||
// aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee | ||
final String anUuid = udf.uuid(); | ||
assertThat(anUuid.length(), is(36)); | ||
assertThat(anUuid.charAt(8), is('-')); | ||
assertThat(anUuid.charAt(13), is('-')); | ||
assertThat(anUuid.charAt(18), is('-')); | ||
assertThat(anUuid.charAt(23), is('-')); | ||
for (final char c : anUuid.toCharArray()) { | ||
assertThat(c, isIn(Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', | ||
'7', '8', '9', '0', '-'))); | ||
} | ||
} | ||
|
||
} |