You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by ma...@apache.org on 2010/01/22 21:55:51 UTC
svn commit: r902264 - in /hadoop/avro/trunk: CHANGES.txt
lang/c/src/datum_equal.c lang/c/src/datum_read.c lang/c/src/datum_write.c
lang/c/tests/test_avro_data.c lang/c/version.sh
Author: massie
Date: Fri Jan 22 20:55:51 2010
New Revision: 902264
URL: http://svn.apache.org/viewvc?rev=902264&view=rev
Log:
AVRO-369. Add support for encoding/decoding enum values
Modified:
hadoop/avro/trunk/CHANGES.txt
hadoop/avro/trunk/lang/c/src/datum_equal.c
hadoop/avro/trunk/lang/c/src/datum_read.c
hadoop/avro/trunk/lang/c/src/datum_write.c
hadoop/avro/trunk/lang/c/tests/test_avro_data.c
hadoop/avro/trunk/lang/c/version.sh
Modified: hadoop/avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=902264&r1=902263&r2=902264&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Fri Jan 22 20:55:51 2010
@@ -244,6 +244,8 @@
AVRO-367. Complete memory management for the C implementation (massie)
+ AVRO-369. Add support for encoding/decoding enum values (massie)
+
OPTIMIZATIONS
AVRO-172. More efficient schema processing (massie)
Modified: hadoop/avro/trunk/lang/c/src/datum_equal.c
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_equal.c?rev=902264&r1=902263&r2=902264&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_equal.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_equal.c Fri Jan 22 20:55:51 2010
@@ -83,6 +83,12 @@
return args.rval;
}
+static int enum_equal(struct avro_enum_datum_t *a, struct avro_enum_datum_t *b)
+{
+ return strcmp(a->name, b->name) == 0
+ && strcmp(a->symbol, b->symbol) == 0;
+}
+
int avro_datum_equal(avro_datum_t a, avro_datum_t b)
{
if (!(is_avro_datum(a) && is_avro_datum(b))) {
@@ -125,6 +131,8 @@
avro_datum_to_record(b));
case AVRO_ENUM:
+ return enum_equal(avro_datum_to_enum(a), avro_datum_to_enum(b));
+
case AVRO_FIXED:
case AVRO_UNION:
case AVRO_LINK:
Modified: hadoop/avro/trunk/lang/c/src/datum_read.c
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_read.c?rev=902264&r1=902263&r2=902264&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_read.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_read.c Fri Jan 22 20:55:51 2010
@@ -14,6 +14,7 @@
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
+#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include "encoding.h"
@@ -101,10 +102,27 @@
static int
read_enum(avro_reader_t reader, const avro_encoding_t * enc,
- avro_schema_t writers_schema, avro_schema_t readers_schema,
- avro_datum_t * datum)
+ struct avro_enum_schema_t *writers_schema,
+ struct avro_enum_schema_t *readers_schema, avro_datum_t * datum)
{
- return 1;
+ int rval;
+ int64_t i, index;
+ struct avro_enum_symbol_t *sym;
+
+ rval = enc->read_long(reader, &index);
+ if (rval) {
+ return rval;
+ }
+
+ sym = STAILQ_FIRST(&writers_schema->symbols);
+ for (i = 0; i != index && sym != NULL;
+ sym = STAILQ_NEXT(sym, symbols), i++) {
+ }
+ if (!sym) {
+ return EINVAL;
+ }
+ *datum = avro_enum(writers_schema->name, sym->symbol);
+ return 0;
}
static int
@@ -370,8 +388,8 @@
case AVRO_ENUM:
rval =
- read_enum(reader, enc, writers_schema, readers_schema,
- datum);
+ read_enum(reader, enc, avro_schema_to_enum(writers_schema),
+ avro_schema_to_enum(readers_schema), datum);
break;
case AVRO_ARRAY:
Modified: hadoop/avro/trunk/lang/c/src/datum_write.c
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_write.c?rev=902264&r1=902263&r2=902264&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_write.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_write.c Fri Jan 22 20:55:51 2010
@@ -16,6 +16,7 @@
*/
#include <errno.h>
#include <assert.h>
+#include <string.h>
#include "schema.h"
#include "datum.h"
#include "encoding.h"
@@ -39,12 +40,19 @@
static int
write_enum(avro_writer_t writer, const avro_encoding_t * enc,
- avro_schema_t writer_schema, avro_datum_t datum)
+ struct avro_enum_schema_t *enump, struct avro_enum_datum_t *datum)
{
- /*
- * TODO
- */
- return EINVAL;
+ int64_t index;
+ struct avro_enum_symbol_t *sym = STAILQ_FIRST(&enump->symbols);
+ for (index = 0; sym != NULL; sym = STAILQ_NEXT(sym, symbols), index++) {
+ if (strcmp(sym->symbol, datum->symbol) == 0) {
+ break;
+ }
+ }
+ if (!sym) {
+ return EINVAL;
+ }
+ return enc->write_long(writer, index);
}
static int
@@ -221,7 +229,9 @@
avro_schema_to_record(writer_schema), datum);
break;
case AVRO_ENUM:
- rval = write_enum(writer, enc, writer_schema, datum);
+ rval =
+ write_enum(writer, enc, avro_schema_to_enum(writer_schema),
+ avro_datum_to_enum(datum));
break;
case AVRO_FIXED:
rval = write_fixed(writer, enc, writer_schema, datum);
Modified: hadoop/avro/trunk/lang/c/tests/test_avro_data.c
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/tests/test_avro_data.c?rev=902264&r1=902263&r2=902264&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/tests/test_avro_data.c (original)
+++ hadoop/avro/trunk/lang/c/tests/test_avro_data.c Fri Jan 22 20:55:51 2010
@@ -177,9 +177,18 @@
static int test_enum(void)
{
- /*
- * TODO
- */
+ avro_schema_t schema = avro_schema_enum("language");
+ avro_datum_t datum = avro_enum("language", "C");
+
+ avro_schema_enum_symbol_append(schema, "C");
+ avro_schema_enum_symbol_append(schema, "C++");
+ avro_schema_enum_symbol_append(schema, "Python");
+ avro_schema_enum_symbol_append(schema, "Ruby");
+ avro_schema_enum_symbol_append(schema, "Java");
+
+ write_read_check(schema, NULL, datum, "enum");
+ avro_datum_decref(datum);
+ avro_schema_decref(schema);
return 0;
}
Modified: hadoop/avro/trunk/lang/c/version.sh
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/version.sh?rev=902264&r1=902263&r2=902264&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/version.sh (original)
+++ hadoop/avro/trunk/lang/c/version.sh Fri Jan 22 20:55:51 2010
@@ -18,9 +18,9 @@
# libavro_binary_age = 0
# libavro_interface_age = 0
#
-libavro_micro_version=8
+libavro_micro_version=9
libavro_interface_age=0
-libavro_binary_age=3
+libavro_binary_age=4
# IGNORE EVERYTHING ELSE FROM HERE DOWN.........
if test $# != 1; then