diff --git a/documents/SUMMARY.md b/documents/SUMMARY.md index d3345830..425a6397 100644 --- a/documents/SUMMARY.md +++ b/documents/SUMMARY.md @@ -32,4 +32,6 @@ * [Development](development.md) * [Architecture](development.md#architecture) * [Write Plugins](development.md#write-plugins) +* [Dialects](dialects.md) + * [Dialect Specific Columns](dialects.md#dialect-specific-columns) * [Change Log](changelog.md) diff --git a/documents/dialects.md b/documents/dialects.md new file mode 100644 index 00000000..2c56a48f --- /dev/null +++ b/documents/dialects.md @@ -0,0 +1,58 @@ +# Dialects + + + +## Dialect Specific Columns + +Certain dialects of SQL ship with their own custom, non-standard column types, such as the ```jsonb``` column in PostgreSQL. GORM supports loading several of such types, as listed in the following sections. + +#### PostgreSQL +GORM supports loading the following PostgreSQL exclusive column types: +- jsonb +- hstore + +Given the following Model definition: +````go +import ( + "encoding/json" + "fmt" + "reflect" + "github.com/jinzhu/gorm" + "github.com/jinzhu/gorm/dialects/postgres" +) + +type Document struct { + Metadata postgres.Jsonb + Secrets postgres.Hstore + Body string + + ID int +} +```` + +You may use the model like so: + +````go +password := "0654857340" +metadata := json.RawMessage(`{"is_archived": 0}`) +sampleDoc := Document{ + Body : "This is a test document", + Metadata : postgres.Jsonb{ metadata }, + Secrets : postgres.Hstore{"password" : &password }, +} + +//insert sampleDoc into the database +db.Create(&sampleDoc) + +//retrieve the fields again to confirm if they were inserted correctly +resultDoc := Document{} +db.Where("id = ?", sampleDoc.ID).First(&resultDoc) + +metadataIsEqual := reflect.DeepEqual( resultDoc.Metadata, sampleDoc.Metadata) +secretsIsEqual := reflect.DeepEqual( resultDoc.Secrets, resultDoc.Secrets) + +//this should print "true" +fmt.Println("Inserted fields are as expected:", metadataIsEqual && secretsIsEqual) + +```` +