Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.8@1137698 13f79535-47bb-0310-9956-ffa450edef68
- Loading branch information
Showing
5 changed files
with
611 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
136 changes: 136 additions & 0 deletions
136
src/java/org/apache/cassandra/db/marshal/BooleanType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
package org.apache.cassandra.db.marshal; | ||
/* | ||
* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
* | ||
*/ | ||
|
||
import java.nio.ByteBuffer; | ||
import java.sql.Types; | ||
|
||
import org.apache.cassandra.utils.ByteBufferUtil; | ||
|
||
public class BooleanType extends AbstractType<Boolean> | ||
{ | ||
public static final BooleanType instance = new BooleanType(); | ||
|
||
BooleanType() {} // singleton | ||
|
||
public Boolean compose(ByteBuffer bytes) | ||
{ | ||
byte value = bytes.get(bytes.position()); | ||
return Boolean.valueOf(value ==0 ? false:true); | ||
} | ||
|
||
public ByteBuffer decompose(Boolean value) | ||
{ | ||
return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER | ||
: value ? ByteBuffer.wrap(new byte[]{1}) // true | ||
: ByteBuffer.wrap(new byte[]{0}); // false | ||
} | ||
|
||
public int compare(ByteBuffer o1, ByteBuffer o2) | ||
{ | ||
if ((o1 == null) || (o1.remaining() != 1)) | ||
return ((o2 == null) || (o2.remaining() != 1)) ? 0 : -1; | ||
if ((o2 == null) || (o2.remaining() != 1)) | ||
return 1; | ||
|
||
return o1.compareTo(o2); | ||
} | ||
|
||
public String getString(ByteBuffer bytes) | ||
{ | ||
if (bytes.remaining() == 0) | ||
{ | ||
return Boolean.FALSE.toString(); | ||
} | ||
if (bytes.remaining() != 1) | ||
{ | ||
throw new MarshalException("A boolean is stored in exactly 1 byte: "+bytes.remaining()); | ||
} | ||
byte value = bytes.get(bytes.position()); | ||
|
||
return value ==0 ? Boolean.FALSE.toString(): Boolean.TRUE.toString(); | ||
} | ||
|
||
public String toString(Boolean b) | ||
{ | ||
return b.toString(); | ||
} | ||
|
||
public ByteBuffer fromString(String source) throws MarshalException | ||
{ | ||
|
||
if (source.isEmpty()|| source.equalsIgnoreCase(Boolean.FALSE.toString())) | ||
return decompose(false); | ||
|
||
if (source.equalsIgnoreCase(Boolean.TRUE.toString())) | ||
return decompose(true); | ||
|
||
throw new MarshalException(String.format("unable to make boolean from '%s'", source)); | ||
|
||
} | ||
|
||
public void validate(ByteBuffer bytes) throws MarshalException | ||
{ | ||
if (bytes.remaining() != 1 && bytes.remaining() != 0) | ||
throw new MarshalException(String.format("Expected 1 or 0 byte value (%d)", bytes.remaining())); | ||
} | ||
|
||
public Class<Boolean> getType() | ||
{ | ||
return Boolean.class; | ||
} | ||
|
||
public boolean isSigned() | ||
{ | ||
return false; | ||
} | ||
|
||
public boolean isCaseSensitive() | ||
{ | ||
return false; | ||
} | ||
|
||
public boolean isCurrency() | ||
{ | ||
return false; | ||
} | ||
|
||
public int getPrecision(Boolean obj) | ||
{ | ||
return -1; | ||
} | ||
|
||
public int getScale(Boolean obj) | ||
{ | ||
return -1; | ||
} | ||
|
||
public int getJdbcType() | ||
{ | ||
return Types.BOOLEAN; | ||
} | ||
|
||
public boolean needsQuotes() | ||
{ | ||
return false; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
package org.apache.cassandra.db.marshal; | ||
/* | ||
* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
* | ||
*/ | ||
import static org.apache.cassandra.db.marshal.TimeUUIDType.iso8601Patterns; | ||
|
||
import java.nio.ByteBuffer; | ||
import java.sql.Types; | ||
import java.text.ParseException; | ||
import java.text.SimpleDateFormat; | ||
import java.util.Date; | ||
|
||
import org.apache.cassandra.utils.ByteBufferUtil; | ||
import org.apache.commons.lang.time.DateUtils; | ||
|
||
public class DateType extends AbstractType<Date> | ||
{ | ||
public static final DateType instance = new DateType(); | ||
|
||
static final String DEFAULT_FORMAT = iso8601Patterns[3]; | ||
|
||
static final SimpleDateFormat FORMATTER = new SimpleDateFormat(DEFAULT_FORMAT); | ||
|
||
DateType() {} // singleton | ||
|
||
public Date compose(ByteBuffer bytes) | ||
{ | ||
return new Date(ByteBufferUtil.toLong(bytes)); | ||
} | ||
|
||
public ByteBuffer decompose(Date value) | ||
{ | ||
return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER | ||
: ByteBufferUtil.bytes(value.getTime()); | ||
} | ||
|
||
|
||
public int compare(ByteBuffer o1, ByteBuffer o2) | ||
{ | ||
if (o1.remaining() == 0) | ||
{ | ||
return o2.remaining() == 0 ? 0 : -1; | ||
} | ||
if (o2.remaining() == 0) | ||
{ | ||
return 1; | ||
} | ||
|
||
return ByteBufferUtil.compareUnsigned(o1, o2); | ||
} | ||
|
||
public String getString(ByteBuffer bytes) | ||
{ | ||
if (bytes.remaining() == 0) | ||
{ | ||
return ""; | ||
} | ||
if (bytes.remaining() != 8) | ||
{ | ||
throw new MarshalException("A date is exactly 8 bytes (stored as a long): "+bytes.remaining()); | ||
} | ||
|
||
// uses ISO-8601 formatted string | ||
return FORMATTER.format(new Date(bytes.getLong(bytes.position()))); | ||
} | ||
|
||
public String toString(Date d) | ||
{ | ||
// uses ISO-8601 formatted string | ||
return FORMATTER.format(d); | ||
} | ||
|
||
public ByteBuffer fromString(String source) throws MarshalException | ||
{ | ||
// Return an empty ByteBuffer for an empty string. | ||
if (source.isEmpty()) | ||
return ByteBufferUtil.EMPTY_BYTE_BUFFER; | ||
|
||
long millis; | ||
ByteBuffer idBytes = null; | ||
|
||
if (source.toLowerCase().equals("now")) | ||
{ | ||
millis = System.currentTimeMillis(); | ||
idBytes = ByteBufferUtil.bytes(millis); | ||
} | ||
// Milliseconds since epoch? | ||
else if (source.matches("^\\d+$")) | ||
{ | ||
try | ||
{ | ||
idBytes = ByteBufferUtil.bytes(Long.parseLong(source)); | ||
} | ||
catch (NumberFormatException e) | ||
{ | ||
throw new MarshalException(String.format("unable to make long (for date) from: '%s'", source), e); | ||
} | ||
} | ||
// Last chance, attempt to parse as date-time string | ||
else | ||
{ | ||
try | ||
{ | ||
millis = DateUtils.parseDate(source, iso8601Patterns).getTime(); | ||
idBytes = ByteBufferUtil.bytes(millis); | ||
} | ||
catch (ParseException e1) | ||
{ | ||
throw new MarshalException(String.format("unable to coerce '%s' to a formatted date (long)", source), e1); | ||
} | ||
} | ||
|
||
return idBytes; | ||
} | ||
|
||
public void validate(ByteBuffer bytes) throws MarshalException | ||
{ | ||
if (bytes.remaining() != 8 && bytes.remaining() != 0) | ||
throw new MarshalException(String.format("Expected 8 or 0 byte long for date (%d)", bytes.remaining())); | ||
} | ||
|
||
public Class<Date> getType() | ||
{ | ||
return Date.class; | ||
} | ||
|
||
public boolean isSigned() | ||
{ | ||
return false; | ||
} | ||
|
||
public boolean isCaseSensitive() | ||
{ | ||
return false; | ||
} | ||
|
||
public boolean isCurrency() | ||
{ | ||
return false; | ||
} | ||
|
||
public int getPrecision(Date obj) | ||
{ | ||
return -1; | ||
} | ||
|
||
public int getScale(Date obj) | ||
{ | ||
return -1; | ||
} | ||
|
||
public int getJdbcType() | ||
{ | ||
return Types.DATE; | ||
} | ||
|
||
public boolean needsQuotes() | ||
{ | ||
return false; | ||
} | ||
} |
Oops, something went wrong.