feat(spanner): add support for Proto Columns (#9315)

* feat(spanner): add support for Proto Columns (#6886)

* feat(spanner): Adding support for Proto Message and Proto Enum

* feat(spanner): Add license header to new files

* code refactoring and additional checks

* nit: code changes

* go.mod update to prevent failing builds

* go.mod update to prevent failing builds

* go.mod and build_samples.sh update to prevent failing builds

* revert back grpc version

* revert back changes

* Using standard Singers example, refactoring redundant code

* code and proto refactoring

* Add proto_type_fqn for Proto Message and Proto Enum

* code refactoring

* go mod tidy: go.mod and go.sum version updates

* add changes to support compatibility between Int64 and Enum & compatibility between Bytes and Proto

* Revert "go mod tidy: go.mod and go.sum version updates"

This reverts commit 484b00c15967bc9697be5bdea7c0d83cadf323c2.

* add Integration Tests for Proto Message, Proto Enum, compatibility tests

* code refactoring

* code refactoring

* add unit tests for nil proto types

* Add error when nil proto message or nil enum is passed

* feat(spanner): add support for handling null value in Proto columns (#6954)

* feat(spanner): add support for handling null value in Proto columns

* code refactor: get protoTypeFqn from user defined nil types

* code refactoring

* code refactoring

* code refactoring

* code refactoring

* Add tests for MarshalJSON and UnmarshalJSON methods

* refactoring test file

* code refactoring

* feat(spanner): add support for Array of Proto columns (#7014)

* feat(spanner): add support for array of proto columns

* refactoring comments and added negative test cases while reading array of protos

* change decoding logic of handling array of proto columns

* feat(spanner): add support for handling null values in array of proto columns (#7042)

* feat(spanner): add support for handling null values in Array of Proto Columns

* add comments for code readability

* nit: change in error message

* feat(spanner): Modify configuration for integration test and add license header (#7059)

* feat(spanner): update go-genproto dependency (#7066)

* feat(spanner): support for enum columns as keys, index and integration tests (#7091)

* feat(spanner): support for proto columns as primary key and tests for parameterized queries, primary key and indexes

* feat(spanner): close read-only transaction to prevent session leak

* feat(spanner): update table schema to have GPK on proto field

* feat(spanner): add proto changes to support proto columns feature

* feat(spanner): remove gen-proto dep overwrite for proto column support

* feat(spanner): remove gen-proto dep overwrite from kokoro build

* feat(spanner): reset array of proto, enum when null from database (#7176)

* feat(spanner): reset array of proto, enum when null from database

* feat(spanner): fix license header to fix vet.sh build

* feat(spanner): fix proto generated file to fix vet.sh build

* feat(spanner): organize imports to fix vet.sh build

* feat(spanner): golint changes to fix vet.sh build

* feat(spanner): add support for Proto column DDL (#7292)

* feat(spanner): add proto changes for Proto Columns DDL support

* feat(spanner): add Proto descriptor file and integration tests for Proto DDL feature

* feat(spanner): skip pg tests and code refactoring for proto ddl

* feat(spanner): rename NewDatabaseAdminRESTClient to NewDatabaseAdminClient due to visibility label issue fix

* feat(spanner): remove hardcoded cloud-devel host

* feat(spanner): remove hardcoded project id

* feat(spanner): revert autogenerated code

* feat(spanner): just to validate integration tests running

* feat(spanner): change copyright year

* feat(spanner): set project id for integration tests

* feat(spanner): use jsoniter instead of json for marshal and unmarshal

* feat(spanner): revert presubmit.sh changes

* chore(spanner): run integration tests in presubmit

* chore(spanner): revert presubmit.sh changes

* feat(spanner): fix json

---------

Co-authored-by: rahul2393 <irahul@google.com>
9 files changed
tree: af5ca05ac419ce920e24fc4d25ed2ce525f373f7
  1. .devcontainer/
  2. .github/
  3. accessapproval/
  4. accesscontextmanager/
  5. advisorynotifications/
  6. ai/
  7. aiplatform/
  8. alloydb/
  9. analytics/
  10. apigateway/
  11. apigeeconnect/
  12. apigeeregistry/
  13. apikeys/
  14. appengine/
  15. apphub/
  16. apps/
  17. area120/
  18. artifactregistry/
  19. asset/
  20. assuredworkloads/
  21. auth/
  22. automl/
  23. backupdr/
  24. baremetalsolution/
  25. batch/
  26. beyondcorp/
  27. bigquery/
  28. bigtable/
  29. billing/
  30. binaryauthorization/
  31. certificatemanager/
  32. channel/
  33. chat/
  34. civil/
  35. cloudbuild/
  36. cloudcontrolspartner/
  37. clouddms/
  38. cloudprofiler/
  39. cloudquotas/
  40. cloudtasks/
  41. commerce/
  42. compute/
  43. confidentialcomputing/
  44. config/
  45. contactcenterinsights/
  46. container/
  47. containeranalysis/
  48. datacatalog/
  49. dataflow/
  50. dataform/
  51. datafusion/
  52. datalabeling/
  53. dataplex/
  54. dataproc/
  55. dataqna/
  56. datastore/
  57. datastream/
  58. debugger/
  59. deploy/
  60. dialogflow/
  61. discoveryengine/
  62. dlp/
  63. documentai/
  64. domains/
  65. edgecontainer/
  66. edgenetwork/
  67. errorreporting/
  68. essentialcontacts/
  69. eventarc/
  70. filestore/
  71. firestore/
  72. functions/
  73. gkebackup/
  74. gkeconnect/
  75. gkehub/
  76. gkemulticloud/
  77. grafeas/
  78. gsuiteaddons/
  79. httpreplay/
  80. iam/
  81. iap/
  82. identitytoolkit/
  83. ids/
  84. internal/
  85. iot/
  86. kms/
  87. language/
  88. lifesciences/
  89. logging/
  90. longrunning/
  91. managedidentities/
  92. maps/
  93. mediatranslation/
  94. memcache/
  95. metastore/
  96. migrationcenter/
  97. monitoring/
  98. netapp/
  99. networkconnectivity/
  100. networkmanagement/
  101. networksecurity/
  102. notebooks/
  103. optimization/
  104. orchestration/
  105. orgpolicy/
  106. osconfig/
  107. oslogin/
  108. parallelstore/
  109. phishingprotection/
  110. policysimulator/
  111. policytroubleshooter/
  112. privatecatalog/
  113. profiler/
  114. pubsub/
  115. pubsublite/
  116. rapidmigrationassessment/
  117. recaptchaenterprise/
  118. recommendationengine/
  119. recommender/
  120. redis/
  121. resourcemanager/
  122. resourcesettings/
  123. retail/
  124. rpcreplay/
  125. run/
  126. scheduler/
  127. secretmanager/
  128. securesourcemanager/
  129. security/
  130. securitycenter/
  131. securitycentermanagement/
  132. securityposture/
  133. servicecontrol/
  134. servicedirectory/
  135. servicehealth/
  136. servicemanagement/
  137. serviceusage/
  138. shell/
  139. shopping/
  140. spanner/
  141. speech/
  142. storage/
  143. storageinsights/
  144. storagetransfer/
  145. streetview/
  146. support/
  147. talent/
  148. telcoautomation/
  149. texttospeech/
  150. third_party/
  151. tpu/
  152. trace/
  153. translate/
  154. vertexai/
  155. video/
  156. videointelligence/
  157. vision/
  158. visionai/
  159. vmmigration/
  160. vmwareengine/
  161. vpcaccess/
  162. webrisk/
  163. websecurityscanner/
  164. workflows/
  165. workstations/
  166. .gitignore
  167. .release-please-manifest-individual.json
  168. .release-please-manifest-submodules.json
  169. .release-please-manifest.json
  170. CHANGES.md
  171. CODE_OF_CONDUCT.md
  172. CONTRIBUTING.md
  173. debug.md
  174. doc.go
  175. go.mod
  176. go.sum
  177. go.work
  178. go.work.sum
  179. LICENSE
  180. migration.md
  181. README.md
  182. release-please-config-individual.json
  183. release-please-config-yoshi-submodules.json
  184. release-please-config.json
  185. RELEASING.md
  186. SECURITY.md
  187. testing.md
README.md

Google Cloud Client Libraries for Go

Go Reference

Go packages for Google Cloud Platform services.

import "cloud.google.com/go"

To install the packages on your system, do not clone the repo. Instead:

  1. Change to your project directory: cd /my/cloud/project
  2. Get the package you want to use. Some products have their own module, so it's best to go get the package(s) you want to use:
go get cloud.google.com/go/firestore # Replace with the package you want to use.

NOTE: Some of these packages are under development, and may occasionally make backwards-incompatible changes.

Supported APIs

For an updated list of all of our released APIs please see our reference docs.

Go Versions Supported

Our libraries are compatible with at least the three most recent, major Go releases. They are currently compatible with:

  • Go 1.22
  • Go 1.21
  • Go 1.20
  • Go 1.19

Authorization

By default, each API will use Google Application Default Credentials for authorization credentials used in calling the API endpoints. This will allow your application to run in many environments without requiring explicit configuration.

client, err := storage.NewClient(ctx)

To authorize using a JSON key file, pass option.WithCredentialsFile to the NewClient function of the desired package. For example:

client, err := storage.NewClient(ctx, option.WithCredentialsFile("path/to/keyfile.json"))

You can exert more control over authorization by using the golang.org/x/oauth2 package to create an oauth2.TokenSource. Then pass option.WithTokenSource to the NewClient function:

tokenSource := ...
client, err := storage.NewClient(ctx, option.WithTokenSource(tokenSource))

Contributing

Contributions are welcome. Please, see the CONTRIBUTING document for details.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See Contributor Code of Conduct for more information.

Links