diff --git a/core/src/main/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactory.java b/core/src/main/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactory.java index 7f0da74ce978c371a8291b8283a00fd32420bc9b..55d578092b552851abf1b20e547faf9ce22c41b7 100644 --- a/core/src/main/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactory.java +++ b/core/src/main/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactory.java @@ -38,34 +38,28 @@ import io.questdb.std.ObjList; public class TimestampSequenceFunctionFactory implements FunctionFactory { @Override public String getSignature() { - return "timestamp_sequence(nl)"; + return "timestamp_sequence(nL)"; } @Override public Function newInstance(ObjList args, int position, CairoConfiguration configuration) throws SqlException { final long start = args.getQuick(0).getTimestamp(null); - final long increment = args.getQuick(1).getLong(null); - if (increment < 0) { - throw SqlException.$(args.getQuick(1).getPosition(), "positive increment expected"); - } - if (start == Numbers.LONG_NaN) { return new TimestampConstant(args.getQuick(0).getPosition(), Numbers.LONG_NaN); } - - return new Func(position, start, increment); + return new TimestampSequenceFunction(position, start, args.getQuick(1)); } - private static final class Func extends TimestampFunction { - private final long increment; + private static final class TimestampSequenceFunction extends TimestampFunction { + private final Function longIncrement; private final long start; private long next; - public Func(int position, long start, long increment) { + public TimestampSequenceFunction(int position, long start, Function longIncrement) { super(position); this.start = start; this.next = start; - this.increment = increment; + this.longIncrement = longIncrement; } @Override @@ -75,7 +69,7 @@ public class TimestampSequenceFunctionFactory implements FunctionFactory { @Override public long getTimestamp(Record rec) { final long result = next; - next += increment; + next += longIncrement.getLong(rec); return result; } diff --git a/core/src/main/java/io/questdb/std/microtime/FixedTimeZoneRule.java b/core/src/main/java/io/questdb/std/microtime/FixedTimeZoneRule.java index 0b9d580a778474295c119036a129f3ff59c627f4..2b54c772bf7cbd780ea9460a634f63e466bc7da6 100644 --- a/core/src/main/java/io/questdb/std/microtime/FixedTimeZoneRule.java +++ b/core/src/main/java/io/questdb/std/microtime/FixedTimeZoneRule.java @@ -25,18 +25,11 @@ package io.questdb.std.microtime; public class FixedTimeZoneRule implements TimeZoneRules { private final long offset; - private final String id; - public FixedTimeZoneRule(String id, long offset) { - this.id = id; + public FixedTimeZoneRule(long offset) { this.offset = offset; } - @Override - public String getId() { - return id; - } - @Override public long getOffset(long millis, int year, boolean leap) { return offset; diff --git a/core/src/main/java/io/questdb/std/microtime/TimeZoneRuleFactory.java b/core/src/main/java/io/questdb/std/microtime/TimeZoneRuleFactory.java index deb7fb69a6e6bc0bff9f90b29541fad0cbd9a865..b149a3b14d38fc1571f66bcfeca388479208adce 100644 --- a/core/src/main/java/io/questdb/std/microtime/TimeZoneRuleFactory.java +++ b/core/src/main/java/io/questdb/std/microtime/TimeZoneRuleFactory.java @@ -40,7 +40,7 @@ public class TimeZoneRuleFactory { public TimeZoneRuleFactory() { int index = 0; for (String z : ZoneId.getAvailableZoneIds()) { - ruleList.add(new TimeZoneRulesImpl(z, ZoneId.of(z).getRules())); + ruleList.add(new TimeZoneRulesImpl(ZoneId.of(z).getRules())); ruleMap.put(z, index++); } @@ -57,7 +57,7 @@ public class TimeZoneRuleFactory { // this could be fixed offset, try parsing value as one long offset = Timestamps.parseOffset(alias, 0, alias.length()); if (offset != Long.MIN_VALUE) { - ruleList.add(new FixedTimeZoneRule(alias, Numbers.decodeLowInt(offset) * Timestamps.MILLI_MICROS)); + ruleList.add(new FixedTimeZoneRule(Numbers.decodeLowInt(offset) * Timestamps.MILLI_MICROS)); ruleMap.put(key, index++); } } else { diff --git a/core/src/main/java/io/questdb/std/microtime/TimeZoneRules.java b/core/src/main/java/io/questdb/std/microtime/TimeZoneRules.java index d588abc156cdab864f0eb880bee4e7901ddb7c0e..6c98d7b516e55741f68c5e29e5062911c288ec51 100644 --- a/core/src/main/java/io/questdb/std/microtime/TimeZoneRules.java +++ b/core/src/main/java/io/questdb/std/microtime/TimeZoneRules.java @@ -24,8 +24,6 @@ package io.questdb.std.microtime; public interface TimeZoneRules { - String getId(); - long getOffset(long millis, int year, boolean leap); long getOffset(long millis); diff --git a/core/src/main/java/io/questdb/std/microtime/TimeZoneRulesImpl.java b/core/src/main/java/io/questdb/std/microtime/TimeZoneRulesImpl.java index 7652da9f11f97fa731f0087f63d0b64a8daaa177..4fa37ec59b170418a624f3fef73962c04e638c5b 100644 --- a/core/src/main/java/io/questdb/std/microtime/TimeZoneRulesImpl.java +++ b/core/src/main/java/io/questdb/std/microtime/TimeZoneRulesImpl.java @@ -46,11 +46,9 @@ public class TimeZoneRulesImpl implements TimeZoneRules { private final long firstWall; private final long lastWall; private final int historyOverlapCheckCutoff; - private final String id; private final long standardOffset; - public TimeZoneRulesImpl(String id, ZoneRules rules) { - this.id = id; + public TimeZoneRulesImpl(ZoneRules rules) { final long[] savingsInstantTransition = (long[]) Unsafe.getUnsafe().getObject(rules, SAVING_INSTANT_TRANSITION); if (savingsInstantTransition.length == 0) { @@ -111,11 +109,6 @@ public class TimeZoneRulesImpl implements TimeZoneRules { this.lastWall = this.wallOffsets[wallOffsets.length - 1] * Timestamps.SECOND_MICROS; } - @Override - public String getId() { - return id; - } - @Override public long getOffset(long micros, int year, boolean leap) { if (standardOffset != Long.MIN_VALUE) { diff --git a/core/src/main/java/io/questdb/std/time/FixedTimeZoneRule.java b/core/src/main/java/io/questdb/std/time/FixedTimeZoneRule.java index c4e69b3d1f98160a9beae5df8a4752cc8f124e20..2fdcca3e96b0ab356faecd5fa9dd9335c03a2659 100644 --- a/core/src/main/java/io/questdb/std/time/FixedTimeZoneRule.java +++ b/core/src/main/java/io/questdb/std/time/FixedTimeZoneRule.java @@ -25,18 +25,11 @@ package io.questdb.std.time; public class FixedTimeZoneRule implements TimeZoneRules { private final long offset; - private final String id; - public FixedTimeZoneRule(String id, long offset) { - this.id = id; + public FixedTimeZoneRule(long offset) { this.offset = offset; } - @Override - public String getId() { - return id; - } - @Override public long getOffset(long millis, int year, boolean leap) { return offset; diff --git a/core/src/main/java/io/questdb/std/time/TimeZoneRuleFactory.java b/core/src/main/java/io/questdb/std/time/TimeZoneRuleFactory.java index 6956ea061a23a7a0703a6254a3205f3e6b6aa47a..8a09d50a6a6196840a4227002419610d93639664 100644 --- a/core/src/main/java/io/questdb/std/time/TimeZoneRuleFactory.java +++ b/core/src/main/java/io/questdb/std/time/TimeZoneRuleFactory.java @@ -40,7 +40,7 @@ public class TimeZoneRuleFactory { public TimeZoneRuleFactory() { int index = 0; for (String z : ZoneId.getAvailableZoneIds()) { - ruleList.add(new TimeZoneRulesImpl(z, ZoneId.of(z).getRules())); + ruleList.add(new TimeZoneRulesImpl(ZoneId.of(z).getRules())); ruleMap.put(z, index++); } @@ -57,7 +57,7 @@ public class TimeZoneRuleFactory { // this could be fixed offset, try parsing value as one long offset = Dates.parseOffset(alias, 0, alias.length()); if (offset != Long.MIN_VALUE) { - ruleList.add(new FixedTimeZoneRule(alias, Numbers.decodeLowInt(offset) * Dates.MINUTE_MILLIS)); + ruleList.add(new FixedTimeZoneRule(Numbers.decodeLowInt(offset) * Dates.MINUTE_MILLIS)); ruleMap.put(key, index++); } } else { diff --git a/core/src/main/java/io/questdb/std/time/TimeZoneRules.java b/core/src/main/java/io/questdb/std/time/TimeZoneRules.java index d8d158ba1a3e85783ea1f97fd51996388d770bd7..22fdc862dd698fd4da01bffef45161c572a4475c 100644 --- a/core/src/main/java/io/questdb/std/time/TimeZoneRules.java +++ b/core/src/main/java/io/questdb/std/time/TimeZoneRules.java @@ -24,8 +24,6 @@ package io.questdb.std.time; public interface TimeZoneRules { - String getId(); - long getOffset(long millis, int year, boolean leap); long getOffset(long millis); diff --git a/core/src/main/java/io/questdb/std/time/TimeZoneRulesImpl.java b/core/src/main/java/io/questdb/std/time/TimeZoneRulesImpl.java index 698f3542874f57a20a911934706eb02e5c46a80b..c5a2924af43685684d3d3a5d4bc9c1e83a0a5c3a 100644 --- a/core/src/main/java/io/questdb/std/time/TimeZoneRulesImpl.java +++ b/core/src/main/java/io/questdb/std/time/TimeZoneRulesImpl.java @@ -46,11 +46,9 @@ public class TimeZoneRulesImpl implements TimeZoneRules { private final long firstWall; private final long lastWall; private final int historyOverlapCheckCutoff; - private final String id; private final long standardOffset; - public TimeZoneRulesImpl(String id, ZoneRules rules) { - this.id = id; + public TimeZoneRulesImpl(ZoneRules rules) { final long[] savingsInstantTransition = (long[]) Unsafe.getUnsafe().getObject(rules, SAVING_INSTANT_TRANSITION); if (savingsInstantTransition.length == 0) { @@ -111,11 +109,6 @@ public class TimeZoneRulesImpl implements TimeZoneRules { this.lastWall = this.wallOffsets[wallOffsets.length - 1] * Dates.SECOND_MILLIS; } - @Override - public String getId() { - return id; - } - @Override public long getOffset(long millis, int year, boolean leap) { if (standardOffset != Long.MIN_VALUE) { diff --git a/core/src/test/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactoryTest.java b/core/src/test/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactoryTest.java index 0398fc0f9b40f0207a8c69aeeb27d178003d55c9..badc41e513c156a4567dbb7542316d51a2ea3246 100644 --- a/core/src/test/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactoryTest.java +++ b/core/src/test/java/io/questdb/griffin/engine/functions/date/TimestampSequenceFunctionFactoryTest.java @@ -34,11 +34,6 @@ import org.junit.Test; public class TimestampSequenceFunctionFactoryTest extends AbstractFunctionFactoryTest { - @Test - public void testIncrement1() throws SqlException { - assertFunction(call(0L, 1000L).getFunction1()); - } - @Test public void testIncrement2() throws SqlException { assertFunction(call(0L, 1000L).getFunction2()); @@ -49,11 +44,6 @@ public class TimestampSequenceFunctionFactoryTest extends AbstractFunctionFactor call(Numbers.LONG_NaN, 1000L).andAssertTimestamp(Numbers.LONG_NaN); } - @Test - public void testNegativeIncrement() { - assertFailure(35, "positive increment expected", 0L, -100L); - } - @Override protected void addExtraFunctions() { functions.add(new NegIntFunctionFactory()); diff --git a/core/src/test/java/io/questdb/std/microtime/TimeZoneRulesImplTest.java b/core/src/test/java/io/questdb/std/microtime/TimeZoneRulesImplTest.java index a0d9f2b85f1dd2f2890f281f4b207e444e0eec62..ac0f42e46d742bf28b6e188d5bfee963846a2f63 100644 --- a/core/src/test/java/io/questdb/std/microtime/TimeZoneRulesImplTest.java +++ b/core/src/test/java/io/questdb/std/microtime/TimeZoneRulesImplTest.java @@ -47,7 +47,7 @@ public class TimeZoneRulesImplTest { for (String z : zoneList) { ZoneId zone = ZoneId.of(z); zones.add(zone); - zoneRules.add(new TimeZoneRulesImpl(z, zone.getRules())); + zoneRules.add(new TimeZoneRulesImpl(zone.getRules())); } long micros = Timestamps.toMicros(1900, 1, 1, 0, 0); @@ -100,7 +100,7 @@ public class TimeZoneRulesImplTest { for (String z : zoneList) { ZoneId zone = ZoneId.of(z); zones.add(zone); - zoneRules.add(new TimeZoneRulesImpl(z, zone.getRules())); + zoneRules.add(new TimeZoneRulesImpl(zone.getRules())); } long millis = Timestamps.toMicros(1900, 1, 1, 0, 0); @@ -117,7 +117,7 @@ public class TimeZoneRulesImplTest { @Test public void testSingle() { ZoneId zone = ZoneId.of("GMT"); - TimeZoneRulesImpl rules = new TimeZoneRulesImpl("GMT", zone.getRules()); + TimeZoneRulesImpl rules = new TimeZoneRulesImpl(zone.getRules()); int y = 2017; int m = 3; diff --git a/core/src/test/java/io/questdb/std/time/TimeZoneRulesImplTest.java b/core/src/test/java/io/questdb/std/time/TimeZoneRulesImplTest.java index f119701ed102985b09855da5076c847df4bb0912..a44577f0d8d7a334a331a37f5a5642901e2c7fea 100644 --- a/core/src/test/java/io/questdb/std/time/TimeZoneRulesImplTest.java +++ b/core/src/test/java/io/questdb/std/time/TimeZoneRulesImplTest.java @@ -47,7 +47,7 @@ public class TimeZoneRulesImplTest { for (String z : zoneList) { ZoneId zone = ZoneId.of(z); zones.add(zone); - zoneRules.add(new TimeZoneRulesImpl(z, zone.getRules())); + zoneRules.add(new TimeZoneRulesImpl(zone.getRules())); } long micros = Dates.toMillis(1900, 1, 1, 0, 0); @@ -100,7 +100,7 @@ public class TimeZoneRulesImplTest { for (String z : zoneList) { ZoneId zone = ZoneId.of(z); zones.add(zone); - zoneRules.add(new TimeZoneRulesImpl(z, zone.getRules())); + zoneRules.add(new TimeZoneRulesImpl(zone.getRules())); } long millis = Dates.toMillis(1900, 1, 1, 0, 0); @@ -117,7 +117,7 @@ public class TimeZoneRulesImplTest { @Test public void testSingle() { ZoneId zone = ZoneId.of("GMT"); - TimeZoneRulesImpl rules = new TimeZoneRulesImpl("GMT", zone.getRules()); + TimeZoneRulesImpl rules = new TimeZoneRulesImpl(zone.getRules()); int y = 2017; int m = 3;