ttomcat-1778514358873.zip-extract/_dependencies/maven/com.h2database_h2-2.2.220/org/h2/expression/TimeZoneOperation.java

Path
ttomcat-1778514358873.zip-extract/_dependencies/maven/com.h2database_h2-2.2.220/org/h2/expression/TimeZoneOperation.java
Status
scanned
Type
file
Name
TimeZoneOperation.java
Extension
.java
Programming language
Java
Mime type
text/x-java
File type
Java source, ASCII text
Tag

      
    
Rootfs path

      
    
Size
6976 (6.8 KB)
MD5
3e550de43902979d458bcbc982f58b16
SHA1
5850104da5b1c59f4e8dffa25f166612eafba116
SHA256
e51fa9d2168baec741b18b80c5630765e5321e5a3439c60b54d7fe7bb138a048
SHA512

      
    
SHA1_git
18ba28fc360d44e597fd53b19e76ba3a07f2d94e
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
TimeZoneOperation.java | 6.8 KB |

/* * Copyright 2004-2023 H2 Group. Multiple-Licensed under the MPL 2.0, * and the EPL 1.0 (https://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.expression; import org.h2.engine.SessionLocal; import org.h2.message.DbException; import org.h2.util.DateTimeUtils; import org.h2.util.TimeZoneProvider; import org.h2.value.DataType; import org.h2.value.TypeInfo; import org.h2.value.Value; import org.h2.value.ValueInterval; import org.h2.value.ValueNull; import org.h2.value.ValueTimeTimeZone; import org.h2.value.ValueTimestamp; import org.h2.value.ValueTimestampTimeZone; /** * A time zone specification (AT { TIME ZONE | LOCAL }). */ public final class TimeZoneOperation extends Operation1_2 { public TimeZoneOperation(Expression left, Expression right) { super(left, right); } @Override public StringBuilder getUnenclosedSQL(StringBuilder builder, int sqlFlags) { left.getSQL(builder, sqlFlags, AUTO_PARENTHESES).append(" AT "); if (right != null) { right.getSQL(builder.append("TIME ZONE "), sqlFlags, AUTO_PARENTHESES); } else { builder.append("LOCAL"); } return builder; } @Override public Value getValue(SessionLocal session) { Value l = left.getValue(session); Value a = l.convertTo(type, session); if (a == ValueNull.INSTANCE) { return ValueNull.INSTANCE; } Value b; if (right == null) { int t = l.getValueType(); if (t == Value.TIME || t == Value.TIMESTAMP) { // Already in time zone of the session return a; } b = null; } else { b = right.getValue(session); if (b == ValueNull.INSTANCE) { return ValueNull.INSTANCE; } } if (a.getValueType() == Value.TIMESTAMP_TZ) { ValueTimestampTimeZone v = (ValueTimestampTimeZone) a; long dateValue = v.getDateValue(); long timeNanos = v.getTimeNanos(); int offsetSeconds = v.getTimeZoneOffsetSeconds(); int newOffset = b != null // ? parseTimeZone(b, dateValue, timeNanos, offsetSeconds, true) : session.currentTimeZone() .getTimeZoneOffsetUTC(DateTimeUtils.getEpochSeconds(dateValue, timeNanos, offsetSeconds)); if (offsetSeconds != newOffset) { a = DateTimeUtils.timestampTimeZoneAtOffset(dateValue, timeNanos, offsetSeconds, newOffset); } } else { ValueTimeTimeZone v = (ValueTimeTimeZone) a; long timeNanos = v.getNanos(); int offsetSeconds = v.getTimeZoneOffsetSeconds(); int newOffset = b != null ? parseTimeZone(b, DateTimeUtils.EPOCH_DATE_VALUE, timeNanos, offsetSeconds, false) : session.currentTimeZone().getTimeZoneOffsetUTC(DateTimeUtils .getEpochSeconds(session.currentTimestamp().getDateValue(), timeNanos, offsetSeconds)); if (offsetSeconds != newOffset) { timeNanos += (newOffset - offsetSeconds) * DateTimeUtils.NANOS_PER_SECOND; a = ValueTimeTimeZone.fromNanos(DateTimeUtils.normalizeNanosOfDay(timeNanos), newOffset); } } return a; } private static int parseTimeZone(Value b, long dateValue, long timeNanos, int offsetSeconds, boolean allowTimeZoneName) { if (DataType.isCharacterStringType(b.getValueType())) { TimeZoneProvider timeZone; try { timeZone = TimeZoneProvider.ofId(b.getString()); } catch (RuntimeException ex) { throw DbException.getInvalidValueException("time zone", b.getTraceSQL()); } if (!allowTimeZoneName && !timeZone.hasFixedOffset()) { throw DbException.getInvalidValueException("time zone", b.getTraceSQL()); } return timeZone.getTimeZoneOffsetUTC(DateTimeUtils.getEpochSeconds(dateValue, timeNanos, offsetSeconds)); } return parseInterval(b); } /** * Parses a daytime interval as time zone offset. * * @param interval the interval * @return the time zone offset in seconds */ public static int parseInterval(Value interval) { ValueInterval i = (ValueInterval) interval.convertTo(TypeInfo.TYPE_INTERVAL_HOUR_TO_SECOND); long h = i.getLeading(), seconds = i.getRemaining(); if (h > 18 || h == 18 && seconds != 0 || seconds % DateTimeUtils.NANOS_PER_SECOND != 0) { throw DbException.getInvalidValueException("time zone", i.getTraceSQL()); } int newOffset = (int) (h * 3_600 + seconds / DateTimeUtils.NANOS_PER_SECOND); if (i.isNegative()) { newOffset = -newOffset; } return newOffset; } @Override public Expression optimize(SessionLocal session) { left = left.optimize(session); if (right != null) { right = right.optimize(session); } TypeInfo type = left.getType(); int valueType = Value.TIMESTAMP_TZ, scale = ValueTimestamp.MAXIMUM_SCALE; int lType = type.getValueType(); switch (lType) { case Value.TIMESTAMP: case Value.TIMESTAMP_TZ: scale = type.getScale(); break; case Value.TIME: case Value.TIME_TZ: valueType = Value.TIME_TZ; scale = type.getScale(); break; default: StringBuilder builder = left.getSQL(new StringBuilder(), TRACE_SQL_FLAGS, AUTO_PARENTHESES); int offset = builder.length(); builder.append(" AT "); if (right != null) { right.getSQL(builder.append("TIME ZONE "), TRACE_SQL_FLAGS, AUTO_PARENTHESES); } else { builder.append("LOCAL"); } throw DbException.getSyntaxError(builder.toString(), offset, "time, timestamp"); } this.type = TypeInfo.getTypeInfo(valueType, -1, scale, null); if (left.isConstant() && (lType == Value.TIME_TZ || lType == Value.TIMESTAMP_TZ) && right != null && right.isConstant()) { return ValueExpression.get(getValue(session)); } return this; } @Override public boolean isEverything(ExpressionVisitor visitor) { if (visitor.getType() == ExpressionVisitor.DETERMINISTIC) { if (right == null) { return false; } int lType = left.getType().getValueType(); if (lType == Value.TIME || lType == Value.TIMESTAMP) { return false; } } return left.isEverything(visitor) && (right == null || right.isEverything(visitor)); } }
Detected license expression

      
    
Detected license expression (SPDX)

      
    
Percentage of license text
1.83
Copyrights
- end_line: 2
  copyright: Copyright 2004-2023 H2 Group. Multiple-Licensed
  start_line: 2
Holders
- holder: H2 Group. Multiple-Licensed
  end_line: 2
  start_line: 2
Authors

      
    
License expression License clue details
(mpl-2.0 OR epl-1.0) AND proprietary-license {'score': 20.37, 'matcher': '3-seq', 'end_line': 3, 'rule_url': 'https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mpl-2.0_or_epl-1.0_and_proprietary-license_2.RULE', 'from_file': None, 'start_line': 2, 'matched_text': ' * Copyright 2004-2023 H2 Group. Multiple-Licensed under the MPL 2.0,\n * and the EPL 1.0 (https://h2database.com/html/license.html).', 'match_coverage': 20.37, 'matched_length': 11, 'rule_relevance': 100, 'rule_identifier': 'mpl-2.0_or_epl-1.0_and_proprietary-license_2.RULE', 'license_expression': '(mpl-2.0 OR epl-1.0) AND proprietary-license', 'license_expression_spdx': '(MPL-2.0 OR EPL-1.0) AND LicenseRef-scancode-proprietary-license'}
URL Start line End line
https://h2database.com/html/license.html 3 3
Package URL License Primary language
pkg:osgi/com.h2database.source@2.2.220