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/02/06 04:39:09 UTC

svn commit: r907169 - in /hadoop/avro/trunk: CHANGES.txt lang/c/examples/quickstop.c

Author: massie
Date: Sat Feb  6 03:39:08 2010
New Revision: 907169

URL: http://svn.apache.org/viewvc?rev=907169&view=rev
Log:
AVRO-409. Update contact database example to use a file object container for C implementation

Modified:
    hadoop/avro/trunk/CHANGES.txt
    hadoop/avro/trunk/lang/c/examples/quickstop.c

Modified: hadoop/avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=907169&r1=907168&r2=907169&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Sat Feb  6 03:39:08 2010
@@ -313,6 +313,9 @@
 
     AVRO-400. Adding warning for unused parameters (Eli Collins via massie)
 
+    AVRO-409. Update contact database example to use a file object 
+              container for C implementation (massie)
+
   OPTIMIZATIONS
 
     AVRO-172. More efficient schema processing (massie)

Modified: hadoop/avro/trunk/lang/c/examples/quickstop.c
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/examples/quickstop.c?rev=907169&r1=907168&r2=907169&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/examples/quickstop.c (original)
+++ hadoop/avro/trunk/lang/c/examples/quickstop.c Sat Feb  6 03:39:08 2010
@@ -16,9 +16,9 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <avro.h>
 
-char buf[4096];
 avro_schema_t person_schema;
 int64_t id = 0;
 
@@ -46,7 +46,7 @@
 
 /* Create a datum to match the person schema and save it */
 void
-add_person(avro_writer_t writer, const char *first, const char *last,
+add_person(avro_file_writer_t db, const char *first, const char *last,
 	   const char *phone, int32_t age)
 {
 	avro_datum_t person = avro_record("Person");
@@ -66,7 +66,7 @@
 		exit(EXIT_FAILURE);
 	}
 
-	if (avro_write_data(writer, person_schema, person)) {
+	if (avro_file_writer_append(db, person)) {
 		fprintf(stderr,
 			"Unable to write Person datum to memory buffer");
 		exit(EXIT_FAILURE);
@@ -83,12 +83,12 @@
 	fprintf(stdout, "Successfully added %s, %s id=%ld\n", last, first, id);
 }
 
-int print_person(avro_reader_t reader, avro_schema_t reader_schema)
+int print_person(avro_file_reader_t db, avro_schema_t reader_schema)
 {
 	int rval;
 	avro_datum_t person;
 
-	rval = avro_read_data(reader, person_schema, reader_schema, &person);
+	rval = avro_file_reader_read(db, reader_schema, &person);
 	if (rval == 0) {
 		int64_t i64;
 		int32_t i32;
@@ -126,40 +126,44 @@
 
 int main(void)
 {
-	avro_reader_t reader;
-	avro_writer_t writer;
+	int rval;
+	avro_file_reader_t dbreader;
+	avro_file_writer_t db;
 	avro_schema_t projection_schema, first_name_schema, phone_schema;
 	int64_t i;
+	const char *dbname = "quickstop.db";
 
 	/* Initialize the schema structure from JSON */
 	init_schema();
 
+	/* Delete the database if it exists */
+	unlink(dbname);
+	/* Create a new database */
+	rval = avro_file_writer_create(dbname, person_schema, &db);
+	if (rval) {
+		fprintf(stderr, "There was an error creating %s\n", dbname);
+		exit(EXIT_FAILURE);
+	}
 	/* Add people to the database */
-	writer = avro_writer_memory(buf, sizeof(buf));
-	add_person(writer, "Dante", "Hicks", "(555) 123-4567", 32);
-	add_person(writer, "Randal", "Graves", "(555) 123-5678", 30);
-	add_person(writer, "Veronica", "Loughran", "(555) 123-0987", 28);
-	add_person(writer, "Caitlin", "Bree", "(555) 123-2323", 27);
-	add_person(writer, "Bob", "Silent", "(555) 123-6422", 29);
-	add_person(writer, "Jay", "???", "(555) 123-9182", 26);
-	avro_writer_free(writer);
-
-	fprintf(stdout,
-		"\nAvro is compact. Here is the data for all %ld people.\n",
-		id);
-	avro_writer_dump(writer, stdout);
+	add_person(db, "Dante", "Hicks", "(555) 123-4567", 32);
+	add_person(db, "Randal", "Graves", "(555) 123-5678", 30);
+	add_person(db, "Veronica", "Loughran", "(555) 123-0987", 28);
+	add_person(db, "Caitlin", "Bree", "(555) 123-2323", 27);
+	add_person(db, "Bob", "Silent", "(555) 123-6422", 29);
+	add_person(db, "Jay", "???", "(555) 123-9182", 26);
+	avro_file_writer_close(db);
 
 	fprintf(stdout, "\nNow let's read all the records back out\n");
 
 	/* Read all the records and print them */
-	reader = avro_reader_memory(buf, sizeof(buf));
+	avro_file_reader(dbname, &dbreader);
 	for (i = 0; i < id; i++) {
-		if (print_person(reader, NULL)) {
+		if (print_person(dbreader, NULL)) {
 			fprintf(stderr, "Error printing person\n");
 			exit(EXIT_FAILURE);
 		}
 	}
-	avro_reader_free(reader);
+	avro_file_reader_close(dbreader);
 
 	/* You can also use projection, to only decode only the data you are
 	   interested in.  This is particularly useful when you have 
@@ -176,14 +180,14 @@
 	/* Read only the record you're interested in */
 	fprintf(stdout,
 		"\n\nUse projection to print only the First name and phone numbers\n");
-	reader = avro_reader_memory(buf, sizeof(buf));
+	avro_file_reader(dbname, &dbreader);
 	for (i = 0; i < id; i++) {
-		if (print_person(reader, projection_schema)) {
+		if (print_person(dbreader, projection_schema)) {
 			fprintf(stderr, "Error printing person\n");
 			exit(EXIT_FAILURE);
 		}
 	}
-	avro_reader_free(reader);
+	avro_file_reader_close(dbreader);
 	avro_schema_decref(first_name_schema);
 	avro_schema_decref(phone_schema);
 	avro_schema_decref(projection_schema);