Skip to content

Commit

Permalink
feat: new UUID UDF (#5535)
Browse files Browse the repository at this point in the history
* new UUID UDF, first version

* match checkstyle class-naming rule
  • Loading branch information
blueedgenick committed Jun 3, 2020
1 parent 723b6cb commit cfa65da
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 0 deletions.
10 changes: 10 additions & 0 deletions docs/developer-guide/ksqldb-reference/scalar-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,16 @@ UCASE(col1)

Convert a string to uppercase.

### `UUID`

```sql
UUID()
```
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_.

## Nulls

### `COALESCE`
Expand Down
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();
}
}
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', '-')));
}
}

}

0 comments on commit cfa65da

Please sign in to comment.