Sample code for 30+ languages & platforms
PureBasic

Google Cloud SQL - Stop Database Instance

See more Google Cloud SQL Examples

Demonstrates how to stop a Google Cloud SQL database instance.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    ; In this example, Get Google Cloud SQL OAuth2 Access Token, 
    ; the service account access token was saved to a text file.  This example fetches the access token from the file..
    sbToken.i = CkStringBuilder::ckCreate()
    If sbToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckLoadFile(sbToken,"qa_data/tokens/google_cloud_sql_access_token.txt","utf-8")

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Implements the following CURL command:

    ; curl -X PATCH \
    ; -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    ; -H "Content-Type: application/json; charset=utf-8" \
    ; -d '{
    ;   "settings": {
    ;     "activationPolicy": "NEVER" 
    ;   }
    ; }' \
    ; https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    ; Use this online tool to generate code from sample JSON:
    ; Generate Code to Create JSON

    ; The following JSON is sent in the request body.

    ; {
    ;   "settings": {
    ;     "activationPolicy": "NEVER"
    ;   }
    ; }

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateString(json,"settings.activationPolicy","NEVER")

    ; Causes the "Authorization: Bearer "$(gcloud auth print-access-token)" header to be added.
    CkHttp::setCkAuthToken(http, CkStringBuilder::ckGetAsString(sbToken))

    CkHttp::ckSetRequestHeader(http,"Content-Type","application/json; charset=utf-8")

    sbRequestBody.i = CkStringBuilder::ckCreate()
    If sbRequestBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckEmitSb(json,sbRequestBody)

    ; Replace "project-id" with your actual Google project ID.
    ; Replace "instance-id" with your database instance ID, which is the name of your database.  (For example, when I created my test database I named it "chilkat", and therefore my instance-id is "chilkat".)
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpSb(http,"PATCH","https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",sbRequestBody,"utf-8","application/json",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkStringBuilder::ckDispose(sbToken)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbRequestBody)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    sbResponseBody.i = CkStringBuilder::ckCreate()
    If sbResponseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttpResponse::ckGetBodySb(resp,sbResponseBody)
    jResp.i = CkJsonObject::ckCreate()
    If jResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(jResp,sbResponseBody)
    CkJsonObject::setCkEmitCompact(jResp, 0)

    Debug "Response Body:"
    Debug CkJsonObject::ckEmit(jResp)

    respStatusCode.i = CkHttpResponse::ckStatusCode(resp)
    Debug "Response Status Code = " + Str(respStatusCode)
    If respStatusCode = 401
        Debug "It may be that your access token expired."
        Debug "Try refreshing the access token by re-fetching it."
    EndIf

    If respStatusCode >= 400
        Debug "Response Header:"
        Debug CkHttpResponse::ckHeader(resp)
        Debug "Failed."
        CkStringBuilder::ckDispose(sbToken)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbRequestBody)
        CkHttpResponse::ckDispose(resp)
        CkStringBuilder::ckDispose(sbResponseBody)
        CkJsonObject::ckDispose(jResp)
        ProcedureReturn
    EndIf

    ; Sample JSON response:
    ; (Sample code for parsing the JSON response is shown below)

    ; {
    ;   "kind": "sql#operation",
    ;   "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
    ;   "status": "PENDING",
    ;   "user": "user@example.com",
    ;   "insertTime": "2020-01-20T21:30:35.667Z",
    ;   "operationType": "UPDATE",
    ;   "name": "operation-id",
    ;   "targetId": "instance-id",
    ;   "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
    ;   "targetProject": "project-id"
    ; }

    ; Sample code for parsing the JSON response...
    ; Use the following online tool to generate parsing code from sample JSON:
    ; Generate Parsing Code from JSON

    kind.s = CkJsonObject::ckStringOf(jResp,"kind")
    targetLink.s = CkJsonObject::ckStringOf(jResp,"targetLink")
    status.s = CkJsonObject::ckStringOf(jResp,"status")
    user.s = CkJsonObject::ckStringOf(jResp,"user")
    insertTime.s = CkJsonObject::ckStringOf(jResp,"insertTime")
    operationType.s = CkJsonObject::ckStringOf(jResp,"operationType")
    name.s = CkJsonObject::ckStringOf(jResp,"name")
    targetId.s = CkJsonObject::ckStringOf(jResp,"targetId")
    selfLink.s = CkJsonObject::ckStringOf(jResp,"selfLink")
    targetProject.s = CkJsonObject::ckStringOf(jResp,"targetProject")


    CkStringBuilder::ckDispose(sbToken)
    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(json)
    CkStringBuilder::ckDispose(sbRequestBody)
    CkHttpResponse::ckDispose(resp)
    CkStringBuilder::ckDispose(sbResponseBody)
    CkJsonObject::ckDispose(jResp)


    ProcedureReturn
EndProcedure