From 620db709e48c22e049c449d1d4e1d9b0fb624584 Mon Sep 17 00:00:00 2001 From: Andreas Reichel Date: Tue, 2 Apr 2024 12:36:00 +0700 Subject: [PATCH] feat: Hex to Long conversion Signed-off-by: Andreas Reichel --- .../sf/jsqlparser/expression/HexValue.java | 16 ++++++++++ .../jsqlparser/expression/HexValueTest.java | 29 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/test/java/net/sf/jsqlparser/expression/HexValueTest.java diff --git a/src/main/java/net/sf/jsqlparser/expression/HexValue.java b/src/main/java/net/sf/jsqlparser/expression/HexValue.java index a5a334a2a..017547401 100644 --- a/src/main/java/net/sf/jsqlparser/expression/HexValue.java +++ b/src/main/java/net/sf/jsqlparser/expression/HexValue.java @@ -46,4 +46,20 @@ public HexValue withValue(String value) { public String toString() { return value; } + + public String getDigits() { + return value.toUpperCase().startsWith("0X") + ? value.substring(2) + : value.substring(2, value.length()-1); + } + + public Long getLong() { + return Long.parseLong( + getDigits() + , 16); + } + + public LongValue getLongValue() { + return new LongValue(getLong()); + } } diff --git a/src/test/java/net/sf/jsqlparser/expression/HexValueTest.java b/src/test/java/net/sf/jsqlparser/expression/HexValueTest.java new file mode 100644 index 000000000..3c8df3743 --- /dev/null +++ b/src/test/java/net/sf/jsqlparser/expression/HexValueTest.java @@ -0,0 +1,29 @@ +package net.sf.jsqlparser.expression; + +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.statement.select.PlainSelect; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class HexValueTest { + + @Test + void testHexCode() throws JSQLParserException { + String sqlString = "SELECT 0xF001, X'00A1'"; + PlainSelect select = (PlainSelect) CCJSqlParserUtil.parse(sqlString); + + HexValue hex1 = (HexValue) select.getSelectItem(0).getExpression(); + HexValue hex2 = (HexValue) select.getSelectItem(1).getExpression(); + + Assertions.assertEquals("F001", hex1.getDigits()); + Assertions.assertEquals(61441, hex1.getLong()); + Assertions.assertEquals(61441, hex1.getLongValue().getValue()); + + Assertions.assertEquals("00A1", hex2.getDigits()); + Assertions.assertEquals(161, hex2.getLong()); + Assertions.assertEquals(161, hex2.getLongValue().getValue()); + } +} \ No newline at end of file