Package org.hsqldb

Source Code of org.hsqldb.Column

package org.hsqldb;

import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import org.hsqldb.lib.StringConverter;
import org.hsqldb.lib.java.JavaSystem;
import org.hsqldb.store.ValuePool;
import org.hsqldb.types.Binary;
import org.hsqldb.types.JavaObject;

public class Column
{
  public HsqlNameManager.HsqlName columnName;
  private int colType;
  private int colSize;
  private int colScale;
  private boolean isNullable;
  private boolean isIdentity;
  private boolean isPrimaryKey;
  private Expression defaultExpression;
  long identityStart;
  long identityIncrement;
  static final BigInteger MAX_LONG = BigInteger.valueOf(9223372036854775807L);
  static final BigInteger MIN_LONG = BigInteger.valueOf(-9223372036854775808L);
  static final BigInteger MAX_INT = BigInteger.valueOf(2147483647L);
  static final BigInteger MIN_INT = BigInteger.valueOf(-2147483648L);
  static final BigDecimal BIG_DECIMAL_0 = new BigDecimal(0.0D);
  static final BigDecimal BIG_DECIMAL_1 = new BigDecimal(1.0D);
  static int[] tenPower = { 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000 };

  Column(HsqlNameManager.HsqlName paramHsqlName, boolean paramBoolean1, int paramInt1, int paramInt2, int paramInt3, boolean paramBoolean2, Expression paramExpression)
    throws HsqlException
  {
    this.columnName = paramHsqlName;
    this.isNullable = paramBoolean1;
    this.colType = paramInt1;
    this.colSize = paramInt2;
    this.colScale = paramInt3;
    this.isPrimaryKey = paramBoolean2;
    this.defaultExpression = paramExpression;
  }

  void setIdentity(boolean paramBoolean, long paramLong1, long paramLong2)
    throws HsqlException
  {
    this.isIdentity = paramBoolean;
    this.identityStart = paramLong1;
    this.identityIncrement = paramLong2;
    if ((this.isIdentity) && (this.colType == 4) && ((this.identityStart > 2147483647L) || (this.identityIncrement > 2147483647L)))
      throw Trace.error(65, this.columnName.statementName);
  }

  private Column()
  {
  }

  Column duplicate(boolean paramBoolean)
    throws HsqlException
  {
    Column localColumn = new Column();
    localColumn.columnName = this.columnName;
    localColumn.isNullable = this.isNullable;
    localColumn.colType = this.colType;
    localColumn.colSize = this.colSize;
    localColumn.colScale = this.colScale;
    localColumn.defaultExpression = this.defaultExpression;
    if (paramBoolean)
      localColumn.setIdentity(this.isIdentity, this.identityStart, this.identityIncrement);
    return localColumn;
  }

  void setType(Column paramColumn)
  {
    this.isNullable = paramColumn.isNullable;
    this.colType = paramColumn.colType;
    this.colSize = paramColumn.colSize;
    this.colScale = paramColumn.colScale;
  }

  boolean isIdentity()
  {
    return this.isIdentity;
  }

  boolean isNullable()
  {
    return this.isNullable;
  }

  void setNullable(boolean paramBoolean)
  {
    this.isNullable = paramBoolean;
  }

  public boolean isPrimaryKey()
  {
    return this.isPrimaryKey;
  }

  void setPrimaryKey(boolean paramBoolean)
  {
    this.isPrimaryKey = paramBoolean;
  }

  Object getDefaultValue(Session paramSession)
    throws HsqlException
  {
    return this.defaultExpression == null ? null : this.defaultExpression.getValue(paramSession, this.colType);
  }

  String getDefaultDDL()
  {
    String str = null;
    try
    {
      str = this.defaultExpression == null ? null : this.defaultExpression.getDDL();
    }
    catch (HsqlException localHsqlException)
    {
    }
    return str;
  }

  Expression getDefaultExpression()
  {
    return this.defaultExpression;
  }

  void setDefaultExpression(Expression paramExpression)
  {
    this.defaultExpression = paramExpression;
  }

  int getType()
  {
    return this.colType;
  }

  int getDIType()
  {
    return this.colType == 100 ? 12 : this.colType;
  }

  int getDITypeSub()
  {
    if (this.colType == 100)
      return 4;
    return 1;
  }

  int getSize()
  {
    return this.colSize;
  }

  int getScale()
  {
    return this.colScale;
  }

  static Object add(Object paramObject1, Object paramObject2, int paramInt)
    throws HsqlException
  {
    if ((paramObject1 == null) || (paramObject2 == null))
      return null;
    switch (paramInt)
    {
    case 0:
      return null;
    case 6:
    case 7:
    case 8:
      double d1 = ((Number)paramObject1).doubleValue();
      double d2 = ((Number)paramObject2).doubleValue();
      return ValuePool.getDouble(Double.doubleToLongBits(d1 + d2));
    case -1:
    case 1:
    case 12:
    case 100:
      return (String)paramObject1 + (String)paramObject2;
    case 2:
    case 3:
      BigDecimal localBigDecimal1 = (BigDecimal)paramObject1;
      BigDecimal localBigDecimal2 = (BigDecimal)paramObject2;
      return localBigDecimal1.add(localBigDecimal2);
    case -6:
    case 4:
    case 5:
      int i = ((Number)paramObject1).intValue();
      int j = ((Number)paramObject2).intValue();
      return ValuePool.getInt(i + j);
    case -5:
      long l1 = ((Number)paramObject1).longValue();
      long l2 = ((Number)paramObject2).longValue();
      return ValuePool.getLong(l1 + l2);
    }
    throw Trace.error(20, Types.getTypeString(paramInt));
  }

  static Object concat(Object paramObject1, Object paramObject2)
    throws HsqlException
  {
    if ((paramObject1 == null) || (paramObject2 == null))
      return null;
    return paramObject1.toString() + paramObject2.toString();
  }

  static Object negate(Object paramObject, int paramInt)
    throws HsqlException
  {
    if (paramObject == null)
      return null;
    switch (paramInt)
    {
    case 0:
      return null;
    case 6:
    case 7:
    case 8:
      double d = -((Number)paramObject).doubleValue();
      return ValuePool.getDouble(Double.doubleToLongBits(d));
    case 2:
    case 3:
      return ((BigDecimal)paramObject).negate();
    case -6:
    case 4:
    case 5:
      return ValuePool.getInt(-((Number)paramObject).intValue());
    case -5:
      return ValuePool.getLong(-((Number)paramObject).longValue());
    case -4:
    case -3:
    case -2:
    case -1:
    case 1:
    }
    throw Trace.error(20, Types.getTypeString(paramInt));
  }

  static Object multiply(Object paramObject1, Object paramObject2, int paramInt)
    throws HsqlException
  {
    if ((paramObject1 == null) || (paramObject2 == null))
      return null;
    if ((!(paramObject1 instanceof Number)) || (!(paramObject2 instanceof Number)))
    {
      paramObject1 = convertObject(paramObject1, paramInt);
      paramObject2 = convertObject(paramObject2, paramInt);
    }
    switch (paramInt)
    {
    case 0:
      return null;
    case 6:
    case 7:
    case 8:
      double d1 = ((Number)paramObject1).doubleValue();
      double d2 = ((Number)paramObject2).doubleValue();
      return ValuePool.getDouble(Double.doubleToLongBits(d1 * d2));
    case 2:
    case 3:
      BigDecimal localBigDecimal1 = (BigDecimal)paramObject1;
      BigDecimal localBigDecimal2 = (BigDecimal)paramObject2;
      return localBigDecimal1.multiply(localBigDecimal2);
    case -6:
    case 4:
    case 5:
      int i = ((Number)paramObject1).intValue();
      int j = ((Number)paramObject2).intValue();
      return ValuePool.getInt(i * j);
    case -5:
      long l1 = ((Number)paramObject1).longValue();
      long l2 = ((Number)paramObject2).longValue();
      return ValuePool.getLong(l1 * l2);
    case -4:
    case -3:
    case -2:
    case -1:
    case 1:
    }
    throw Trace.error(20, Types.getTypeString(paramInt));
  }

  static Object divide(Object paramObject1, Object paramObject2, int paramInt)
    throws HsqlException
  {
    if ((paramObject1 == null) || (paramObject2 == null))
      return null;
    switch (paramInt)
    {
    case 0:
      return null;
    case 6:
    case 7:
    case 8:
      double d1 = ((Number)paramObject1).doubleValue();
      double d2 = ((Number)paramObject2).doubleValue();
      return ValuePool.getDouble(Double.doubleToLongBits(d1 / d2));
    case 2:
    case 3:
      BigDecimal localBigDecimal1 = (BigDecimal)paramObject1;
      BigDecimal localBigDecimal2 = (BigDecimal)paramObject2;
      int k = localBigDecimal1.scale() > localBigDecimal2.scale() ? localBigDecimal1.scale() : localBigDecimal2.scale();
      return localBigDecimal2.signum() == 0 ? null : localBigDecimal1.divide(localBigDecimal2, k, 5);
    case -6:
    case 4:
    case 5:
      int i = ((Number)paramObject1).intValue();
      int j = ((Number)paramObject2).intValue();
      if (j == 0)
        throw Trace.error(6);
      return ValuePool.getInt(i / j);
    case -5:
      long l1 = ((Number)paramObject1).longValue();
      long l2 = ((Number)paramObject2).longValue();
      return l2 == 0L ? null : ValuePool.getLong(l1 / l2);
    case -4:
    case -3:
    case -2:
    case -1:
    case 1:
    }
    throw Trace.error(20, Types.getTypeString(paramInt));
  }

  static Object subtract(Object paramObject1, Object paramObject2, int paramInt)
    throws HsqlException
  {
    if ((paramObject1 == null) || (paramObject2 == null))
      return null;
    switch (paramInt)
    {
    case 0:
      return null;
    case 6:
    case 7:
    case 8:
      double d1 = ((Number)paramObject1).doubleValue();
      double d2 = ((Number)paramObject2).doubleValue();
      return ValuePool.getDouble(Double.doubleToLongBits(d1 - d2));
    case 2:
    case 3:
      BigDecimal localBigDecimal1 = (BigDecimal)paramObject1;
      BigDecimal localBigDecimal2 = (BigDecimal)paramObject2;
      return localBigDecimal1.subtract(localBigDecimal2);
    case -6:
    case 4:
    case 5:
      int i = ((Number)paramObject1).intValue();
      int j = ((Number)paramObject2).intValue();
      return ValuePool.getInt(i - j);
    case -5:
      long l1 = ((Number)paramObject1).longValue();
      long l2 = ((Number)paramObject2).longValue();
      return ValuePool.getLong(l1 - l2);
    case -4:
    case -3:
    case -2:
    case -1:
    case 1:
    }
    throw Trace.error(20, Types.getTypeString(paramInt));
  }

  static int compare(Collation paramCollation, Object paramObject1, Object paramObject2, int paramInt)
  {
    int i = 0;
    if (paramObject1 == paramObject2)
      return 0;
    if (paramObject1 == null)
      return -1;
    if (paramObject2 == null)
      return 1;
    switch (paramInt)
    {
    case 0:
      return 0;
    case -1:
    case 12:
      return paramCollation.compare((String)paramObject1, (String)paramObject2);
    case 1:
      return paramCollation.compare(Library.rtrim((String)paramObject1), Library.rtrim((String)paramObject2));
    case 100:
      return paramCollation.compareIgnoreCase((String)paramObject1, (String)paramObject2);
    case -6:
    case 4:
    case 5:
      int j = ((Number)paramObject1).intValue();
      int k = ((Number)paramObject2).intValue();
      return k > j ? -1 : j > k ? 1 : 0;
    case -5:
      long l1 = ((Number)paramObject1).longValue();
      long l2 = ((Number)paramObject2).longValue();
      return l2 > l1 ? -1 : l1 > l2 ? 1 : 0;
    case 6:
    case 7:
    case 8:
      double d1 = ((Number)paramObject1).doubleValue();
      double d2 = ((Number)paramObject2).doubleValue();
      return d2 > d1 ? -1 : d1 > d2 ? 1 : 0;
    case 2:
    case 3:
      i = ((BigDecimal)paramObject1).compareTo((BigDecimal)paramObject2);
      break;
    case 91:
      return HsqlDateTime.compare((Date)paramObject1, (Date)paramObject2);
    case 92:
      return HsqlDateTime.compare((Time)paramObject1, (Time)paramObject2);
    case 93:
      return HsqlDateTime.compare((Timestamp)paramObject1, (Timestamp)paramObject2);
    case 16:
      boolean bool1 = ((Boolean)paramObject1).booleanValue();
      boolean bool2 = ((Boolean)paramObject2).booleanValue();
      return bool2 ? -1 : bool1 == bool2 ? 0 : 1;
    case -4:
    case -3:
    case -2:
      if ((!(paramObject1 instanceof Binary)) || (!(paramObject2 instanceof Binary)))
        break;
      i = compareTo(((Binary)paramObject1).getBytes(), ((Binary)paramObject2).getBytes());
      break;
    case 1111:
      return 0;
    }
    return i < 0 ? -1 : i == 0 ? 0 : 1;
  }

  public static Object convertObject(Object paramObject, int paramInt)
    throws HsqlException
  {
    try
    {
      if (paramObject == null)
        return null;
      long l3;
      switch (paramInt)
      {
      case 0:
        return null;
      case -6:
        int i;
        if ((paramObject instanceof String))
        {
          paramObject = Library.trim((String)paramObject, " ", true, true);
          i = Integer.parseInt((String)paramObject);
          paramObject = ValuePool.getInt(i);
        }
        if ((paramObject instanceof Integer))
        {
          i = ((Number)paramObject).intValue();
          if ((127 < i) || (i < -128))
            throw Trace.error(65);
          return paramObject;
        }
        if ((paramObject instanceof Long))
        {
          long l1 = ((Number)paramObject).longValue();
          if ((127L < l1) || (l1 < -128L))
            throw Trace.error(65);
          return ValuePool.getInt(((Number)paramObject).intValue());
        }
        if ((paramObject instanceof Byte))
          return ValuePool.getInt(((Number)paramObject).intValue());
        if ((paramObject instanceof Number))
          return convertObject(convertToInt(paramObject), paramInt);
        if (!(paramObject instanceof Boolean))
          break;
        return ((Boolean)paramObject).booleanValue() ? ValuePool.getInt(1) : ValuePool.getInt(0);
      case 5:
        int j;
        if ((paramObject instanceof String))
        {
          paramObject = Library.trim((String)paramObject, " ", true, true);
          j = Integer.parseInt((String)paramObject);
          paramObject = ValuePool.getInt(j);
        }
        if ((paramObject instanceof Integer))
        {
          j = ((Number)paramObject).intValue();
          if ((32767 < j) || (j < -32768))
            throw Trace.error(65);
          return paramObject;
        }
        if ((paramObject instanceof Long))
        {
          long l2 = ((Number)paramObject).longValue();
          if ((32767L < l2) || (l2 < -32768L))
            throw Trace.error(65);
          return ValuePool.getInt(((Number)paramObject).intValue());
        }
        if (((paramObject instanceof Byte)) || ((paramObject instanceof Short)))
          return ValuePool.getInt(((Number)paramObject).intValue());
        if ((paramObject instanceof Number))
          return convertObject(convertToInt(paramObject), paramInt);
        if (!(paramObject instanceof Boolean))
          break;
        return ((Boolean)paramObject).booleanValue() ? ValuePool.getInt(1) : ValuePool.getInt(0);
      case 4:
        if ((paramObject instanceof Integer))
          return paramObject;
        if ((paramObject instanceof String))
        {
          paramObject = Library.trim((String)paramObject, " ", true, true);
          int k = Integer.parseInt((String)paramObject);
          return ValuePool.getInt(k);
        }
        if ((paramObject instanceof Long))
        {
          l3 = ((Number)paramObject).longValue();
          if ((2147483647L < l3) || (l3 < -2147483648L))
            throw Trace.error(65);
          return ValuePool.getInt(((Number)paramObject).intValue());
        }
        if (((paramObject instanceof Byte)) || ((paramObject instanceof Short)))
          return ValuePool.getInt(((Number)paramObject).intValue());
        if ((paramObject instanceof Number))
          return convertToInt(paramObject);
        if (!(paramObject instanceof Boolean))
          break;
        return ((Boolean)paramObject).booleanValue() ? ValuePool.getInt(1) : ValuePool.getInt(0);
      case -5:
        if ((paramObject instanceof Long))
          return paramObject;
        if ((paramObject instanceof String))
        {
          paramObject = Library.trim((String)paramObject, " ", true, true);
          l3 = Long.parseLong((String)paramObject);
          return ValuePool.getLong(l3);
        }
        if ((paramObject instanceof Integer))
          return ValuePool.getLong(((Integer)paramObject).longValue());
        if (((paramObject instanceof Byte)) || ((paramObject instanceof Short)))
          return ValuePool.getLong(((Number)paramObject).intValue());
        if ((paramObject instanceof Number))
          return convertToLong(paramObject);
        if (!(paramObject instanceof Boolean))
          break;
        return ((Boolean)paramObject).booleanValue() ? ValuePool.getLong(1L) : ValuePool.getLong(0L);
      case 6:
      case 7:
      case 8:
        if ((paramObject instanceof Double))
          return paramObject;
        if ((paramObject instanceof String))
        {
          paramObject = Library.trim((String)paramObject, " ", true, true);
          double d = JavaSystem.parseDouble((String)paramObject);
          long l4 = Double.doubleToLongBits(d);
          return ValuePool.getDouble(l4);
        }
        if ((paramObject instanceof Number))
          return convertToDouble(paramObject);
        if (!(paramObject instanceof Boolean))
          break;
        return ((Boolean)paramObject).booleanValue() ? ValuePool.getDouble(1L) : ValuePool.getDouble(0L);
      case 2:
      case 3:
        if ((paramObject instanceof BigDecimal))
          return paramObject;
        if ((paramObject instanceof Long))
          return BigDecimal.valueOf(((Long)paramObject).longValue());
        if (!(paramObject instanceof Boolean))
          break;
        return ((Boolean)paramObject).booleanValue() ? BIG_DECIMAL_1 : BIG_DECIMAL_0;
      case 16:
        if ((paramObject instanceof Boolean))
          return (Boolean)paramObject;
        if ((paramObject instanceof String))
        {
          paramObject = Library.trim((String)paramObject, " ", true, true);
          return ((String)paramObject).equalsIgnoreCase("TRUE") ? Boolean.TRUE : Boolean.FALSE;
        }
        if ((paramObject instanceof Integer))
          return ((Integer)paramObject).intValue() == 0 ? Boolean.FALSE : Boolean.TRUE;
        if ((paramObject instanceof Long))
          return ((Long)paramObject).longValue() == 0L ? Boolean.FALSE : Boolean.TRUE;
        if ((paramObject instanceof Double))
          return ((Double)paramObject).doubleValue() == 0.0D ? Boolean.FALSE : Boolean.TRUE;
        if ((paramObject instanceof BigDecimal))
          return ((BigDecimal)paramObject).equals(BIG_DECIMAL_0) ? Boolean.FALSE : Boolean.TRUE;
        throw Trace.error(16);
      case -1:
      case 1:
      case 12:
      case 100:
        if ((paramObject instanceof String))
          return paramObject;
        if ((paramObject instanceof Time))
          return HsqlDateTime.getTimeString((Time)paramObject, null);
        if ((paramObject instanceof Timestamp))
          return HsqlDateTime.getTimestampString((Timestamp)paramObject, null);
        if ((paramObject instanceof Date))
          return HsqlDateTime.getDateString((Date)paramObject, null);
        if (!(paramObject instanceof byte[]))
          break;
        return StringConverter.byteToHex((byte[])paramObject);
      case 92:
        if ((paramObject instanceof Time))
          return HsqlDateTime.getNormalisedTime((Time)paramObject);
        if ((paramObject instanceof Timestamp))
          return HsqlDateTime.getNormalisedTime((Timestamp)paramObject);
        if ((paramObject instanceof String))
          return HsqlDateTime.timeValue((String)paramObject);
        if (!(paramObject instanceof Date))
          break;
        throw Trace.error(95, Types.getTypeString(paramInt));
      case 93:
        if ((paramObject instanceof Timestamp))
          return paramObject;
        if ((paramObject instanceof Time))
          return HsqlDateTime.getNormalisedTimestamp((Time)paramObject);
        if ((paramObject instanceof Date))
          return HsqlDateTime.getNormalisedTimestamp((Date)paramObject);
        if (!(paramObject instanceof String))
          break;
        return HsqlDateTime.timestampValue((String)paramObject);
      case 91:
        if ((paramObject instanceof Date))
          return HsqlDateTime.getNormalisedDate((Date)paramObject);
        if ((paramObject instanceof Timestamp))
          return HsqlDateTime.getNormalisedDate((Timestamp)paramObject);
        if ((paramObject instanceof String))
          return HsqlDateTime.dateValue((String)paramObject);
        if (!(paramObject instanceof Time))
          break;
        throw Trace.error(95, Types.getTypeString(paramInt));
      case -4:
      case -3:
      case -2:
        if ((paramObject instanceof Binary))
          return paramObject;
        if ((paramObject instanceof byte[]))
          return new Binary((byte[])paramObject, false);
        if ((paramObject instanceof String))
          return new Binary(StringConverter.hexToByte((String)paramObject), false);
        throw Trace.error(95, Types.getTypeString(paramInt));
      case 1111:
        if ((paramObject instanceof JavaObject))
          return paramObject;
        if ((paramObject instanceof String))
          return new JavaObject(StringConverter.hexToByte((String)paramObject));
        if ((paramObject instanceof Binary))
          return new JavaObject(((Binary)paramObject).getBytes());
        return new JavaObject((Serializable)paramObject);
      }
      if ((paramObject instanceof JavaObject))
      {
        paramObject = ((JavaObject)paramObject).getObject();
        return convertObject(paramObject, paramInt);
      }
      return convertString(paramObject.toString(), paramInt);
    }
    catch (HsqlException localHsqlException)
    {
      throw localHsqlException;
    }
    catch (Exception localException)
    {
    }
    throw Trace.error(16, localException.toString());
  }

  private static Object convertString(String paramString, int paramInt)
    throws HsqlException
  {
    switch (paramInt)
    {
    case -6:
    case 5:
      return convertObject(paramString, paramInt);
    case 4:
      int i = Integer.parseInt(paramString);
      return ValuePool.getInt(i);
    case -5:
      return ValuePool.getLong(Long.parseLong(paramString));
    case 6:
    case 7:
    case 8:
      double d = JavaSystem.parseDouble(paramString);
      long l = Double.doubleToLongBits(d);
      return ValuePool.getDouble(l);
    case -1:
    case 1:
    case 12:
    case 100:
      return paramString;
    case 91:
      return HsqlDateTime.dateValue(paramString);
    case 92:
      return HsqlDateTime.timeValue(paramString);
    case 93:
      return HsqlDateTime.timestampValue(paramString);
    case 2:
    case 3:
      paramString = Library.trim(paramString, " ", true, true);
      return new BigDecimal(paramString);
    case 16:
      return paramString.equalsIgnoreCase("TRUE") ? Boolean.TRUE : Boolean.FALSE;
    case -4:
    case -3:
    case -2:
    case 1111:
    }
    throw Trace.error(95, Types.getTypeString(paramInt));
  }

  static String createSQLString(Object paramObject, int paramInt)
    throws HsqlException
  {
    if (paramObject == null)
      return "NULL";
    switch (paramInt)
    {
    case 0:
      return "NULL";
    case 6:
    case 7:
    case 8:
      return createSQLString(((Number)paramObject).doubleValue());
    case 91:
    case 92:
    case 93:
      return StringConverter.toQuotedString(paramObject.toString(), '\'', false);
    case -4:
    case -3:
    case -2:
      if (!(paramObject instanceof Binary))
        throw Trace.error(95);
      return StringConverter.toQuotedString(StringConverter.byteToHex(((Binary)paramObject).getBytes()), '\'', false);
    case 1111:
      if (!(paramObject instanceof JavaObject))
        throw Trace.error(18);
      return StringConverter.toQuotedString(StringConverter.byteToHex(((JavaObject)paramObject).getBytes()), '\'', false);
    case -1:
    case 1:
    case 12:
    case 100:
      return createSQLString((String)paramObject);
    }
    return paramObject.toString();
  }

  public static String createSQLString(double paramDouble)
  {
    if (paramDouble == (-1.0D / 0.0D))
      return "-1E0/0";
    if (paramDouble == (1.0D / 0.0D))
      return "1E0/0";
    if (Double.isNaN(paramDouble))
      return "0E0/0E0";
    String str = Double.toString(paramDouble);
    if (str.indexOf('E') < 0)
      str = str.concat("E0");
    return str;
  }

  public static String createSQLString(String paramString)
  {
    if (paramString == null)
      return "NULL";
    return StringConverter.toQuotedString(paramString, '\'', true);
  }

  public static Object convertObject(Session paramSession, Object paramObject, int paramInt1, int paramInt2, int paramInt3)
    throws HsqlException
  {
    if (paramObject == null)
      return paramObject;
    if (paramInt2 == 0)
      return convertObject(paramObject, paramInt1);
    boolean bool = true;
    switch (paramInt1)
    {
    case -1:
    case 100:
      paramInt1 = 12;
    case 1:
    case 12:
      if ((paramObject instanceof String))
        bool = false;
      else
        paramObject = convertObject(paramObject, 12);
      return enforceSize(paramObject, paramInt1, paramInt2, paramInt3, bool);
    case 2:
    case 3:
      if (!(paramObject instanceof BigDecimal))
        paramObject = convertObject(paramObject, paramInt1);
      return enforceSize(paramObject, paramInt1, paramInt2, paramInt3, true);
    case 93:
      if ((paramObject instanceof Time))
      {
        long l = paramSession.currentDate.getTime() + ((Time)paramObject).getTime();
        paramObject = HsqlDateTime.getTimestamp(l);
      }
      if (!(paramObject instanceof Timestamp))
        break;
      return enforceSize(paramObject, paramInt1, paramInt2, paramInt3, false);
    }
    return convertObject(paramObject, paramInt1);
  }

  static Object enforceSize(Object paramObject, int paramInt1, int paramInt2, int paramInt3, boolean paramBoolean)
    throws HsqlException
  {
    if (paramObject == null)
      return paramObject;
    if ((paramInt2 == 0) && (paramInt1 != 93))
      return paramObject;
    switch (paramInt1)
    {
    case 1:
      return checkChar((String)paramObject, paramInt2, paramBoolean);
    case 12:
    case 100:
      return checkVarchar((String)paramObject, paramInt2, paramBoolean);
    case 2:
    case 3:
      BigDecimal localBigDecimal = (BigDecimal)paramObject;
      localBigDecimal = localBigDecimal.setScale(paramInt3, 5);
      BigInteger localBigInteger = JavaSystem.getUnscaledValue(localBigDecimal);
      int i = localBigInteger.signum() == -1 ? 1 : 0;
      if (localBigInteger.toString().length() - i > paramInt2)
        throw Trace.error(124);
      return localBigDecimal;
    case 93:
      if (paramInt2 == 6)
        return paramObject;
      Timestamp localTimestamp = (Timestamp)paramObject;
      int j = localTimestamp.getNanos();
      int k = tenPower[paramInt2];
      int m = j / k * k;
      localTimestamp.setNanos(m);
      return localTimestamp;
    }
    return paramObject;
  }

  static String checkVarchar(String paramString, int paramInt, boolean paramBoolean)
    throws HsqlException
  {
    int i = paramString.length();
    if (i > paramInt)
    {
      if (paramBoolean)
        throw Trace.error(124);
      return paramString.substring(0, paramInt);
    }
    return paramString;
  }

  static String checkChar(String paramString, int paramInt, boolean paramBoolean)
    throws HsqlException
  {
    int i = paramString.length();
    if (i == paramInt)
      return paramString;
    if (i > paramInt)
    {
      if (paramBoolean)
        throw Trace.error(124);
      return paramString.substring(0, paramInt);
    }
    char[] arrayOfChar = new char[paramInt];
    paramString.getChars(0, i, arrayOfChar, 0);
    for (int j = i; j < paramInt; j++)
      arrayOfChar[j] = ' ';
    return new String(arrayOfChar);
  }

  static Integer convertToInt(Object paramObject)
    throws HsqlException
  {
    if ((paramObject instanceof BigDecimal))
    {
      BigInteger localBigInteger = ((BigDecimal)paramObject).toBigInteger();
      if ((localBigInteger.compareTo(MAX_INT) > 0) || (localBigInteger.compareTo(MIN_INT) < 0))
        throw Trace.error(65);
      return ValuePool.getInt(localBigInteger.intValue());
    }
    if (((paramObject instanceof Double)) || ((paramObject instanceof Float)))
    {
      double d = ((Number)paramObject).doubleValue();
      if ((Double.isNaN(d)) || (d >= 2147483648.0D) || (d <= -2147483649.0D))
        throw Trace.error(65);
      return ValuePool.getInt((int)d);
    }
    throw Trace.error(95);
  }

  static Long convertToLong(Object paramObject)
    throws HsqlException
  {
    if ((paramObject instanceof BigDecimal))
    {
      BigInteger localBigInteger = ((BigDecimal)paramObject).toBigInteger();
      if ((localBigInteger.compareTo(MAX_LONG) > 0) || (localBigInteger.compareTo(MIN_LONG) < 0))
        throw Trace.error(65);
      return ValuePool.getLong(localBigInteger.longValue());
    }
    if (((paramObject instanceof Double)) || ((paramObject instanceof Float)))
    {
      double d = ((Number)paramObject).doubleValue();
      if ((Double.isNaN(d)) || (d >= 9.223372036854776E+18D) || (d <= -9.223372036854776E+18D))
        throw Trace.error(65);
      return ValuePool.getLong(()d);
    }
    throw Trace.error(95);
  }

  static Double convertToDouble(Object paramObject)
    throws HsqlException
  {
    double d;
    if ((paramObject instanceof BigDecimal))
    {
      BigDecimal localBigDecimal1 = (BigDecimal)paramObject;
      d = localBigDecimal1.doubleValue();
      int i = localBigDecimal1.signum();
      BigDecimal localBigDecimal2 = new BigDecimal(d + i);
      if (localBigDecimal2.compareTo(localBigDecimal1) != i)
        throw Trace.error(65);
    }
    else
    {
      d = ((Number)paramObject).doubleValue();
    }
    return ValuePool.getDouble(Double.doubleToLongBits(d));
  }

  static int getCombinedNumberType(int paramInt1, int paramInt2, int paramInt3)
  {
    int i = getNumTypeWidth(paramInt1);
    int j = getNumTypeWidth(paramInt2);
    if ((i == 16) || (j == 16))
      return 8;
    switch (paramInt3)
    {
    case 14:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 70:
      return i > j ? paramInt1 : paramInt2;
    }
    int k = i + j;
    if (k <= 4)
      return 4;
    if (k <= 8)
      return -5;
    return 2;
  }

  static int getNumTypeWidth(int paramInt)
  {
    switch (paramInt)
    {
    case -6:
      return 1;
    case 5:
      return 2;
    case 4:
      return 4;
    case -5:
      return 8;
    case 6:
    case 7:
    case 8:
      return 16;
    case 2:
    case 3:
      return 32;
    case -4:
    case -3:
    case -2:
    case -1:
    case 0:
    case 1:
    }
    return 32;
  }

  static int compareToTypeRange(Object paramObject, int paramInt)
  {
    if (!(paramObject instanceof Number))
      return 0;
    if (((paramObject instanceof Integer)) || ((paramObject instanceof Long)))
    {
      long l = ((Number)paramObject).longValue();
      int i;
      int j;
      switch (paramInt)
      {
      case -6:
        i = -128;
        j = 127;
        break;
      case 5:
        i = -32768;
        j = 32767;
        break;
      case 4:
        i = -2147483648;
        j = 2147483647;
        break;
      case -5:
      case -4:
      case -3:
      case -2:
      case -1:
      case 0:
      case 1:
      case 2:
      case 3:
      default:
        return 0;
      }
      if (j < l)
        return 1;
      if (l < i)
        return -1;
      return 0;
    }
    try
    {
      paramObject = convertToLong(paramObject);
      return compareToTypeRange(paramObject, paramInt);
    }
    catch (HsqlException localHsqlException)
    {
      if (localHsqlException.getErrorCode() == -65)
      {
        if ((paramObject instanceof BigDecimal))
          return ((BigDecimal)paramObject).signum();
        if ((paramObject instanceof Double))
          return ((Double)paramObject).doubleValue() > 0.0D ? 1 : -1;
      }
    }
    return 0;
  }

  public static byte[] hexToByteArray(String paramString)
    throws HsqlException
  {
    try
    {
      return StringConverter.hexToByte(paramString);
    }
    catch (IOException localIOException)
    {
    }
    throw Trace.error(81);
  }

  static int compareTo(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
  {
    int i = paramArrayOfByte1.length;
    int j = paramArrayOfByte2.length;
    for (int k = 0; ; k++)
    {
      int m = 0;
      int n = 0;
      if (k < i)
        m = paramArrayOfByte1[k] & 0xFF;
      else if (k >= j)
        return 0;
      if (k < j)
        n = paramArrayOfByte2[k] & 0xFF;
      if (m > n)
        return 1;
      if (n > m)
        return -1;
    }
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.hsqldb.Column
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.hsqldb.Column

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.