Sample code for 30+ languages & platforms
SQL Server

Firebase PUT - Writing Data

See more Firebase Examples

Demonstrates how to PUT new data to a Firebase JSON database. The data used in this example is at Chilkat Firebase Pigs Database, and is shown here:

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @sTmp1 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    --  Demonstrates how to PUT new data to a Firebase JSON database.

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

    --  This example assumes a JWT authentication token, if required, has been previously obtained.
    --  See Get Firebase Access Token from JSON Service Account Private Key for sample code.

    --  Load the previously obtained Firebase access token into a string.
    DECLARE @fac int
    EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @fac OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @accessToken nvarchar(4000)
    EXEC sp_OAMethod @fac, 'ReadEntireTextFile', @accessToken OUT, 'qa_data/tokens/firebaseToken.txt', 'utf-8'
    EXEC sp_OAGetProperty @fac, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        EXEC sp_OAGetProperty @fac, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @fac
        RETURN
      END

    DECLARE @rest int
    EXEC @hr = sp_OACreate 'Chilkat.Rest', @rest OUT

    --  Make the initial connection (without sending a request yet).
    --  Once connected, any number of requests may be sent.  It is not necessary to explicitly
    --  call Connect before each request.  
    EXEC sp_OAMethod @rest, 'Connect', @success OUT, 'chilkat.firebaseio.com', 443, 1, 1
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @fac
        EXEC @hr = sp_OADestroy @rest
        RETURN
      END
    DECLARE @authGoogle int
    EXEC @hr = sp_OACreate 'Chilkat.AuthGoogle', @authGoogle OUT

    EXEC sp_OASetProperty @authGoogle, 'AccessToken', @accessToken
    EXEC sp_OAMethod @rest, 'SetAuthGoogle', @success OUT, @authGoogle

    --  Chilkat's sample data (pig-rescue data) is publicly readable at: https://chilkat.firebaseio.com/.json
    --  This data is publicly readable, but not writable.  You'll need to 
    --  run against your own database..

    --  Generate a new push ID.
    DECLARE @prng int
    EXEC @hr = sp_OACreate 'Chilkat.Prng', @prng OUT

    DECLARE @pushId nvarchar(4000)
    EXEC sp_OAMethod @prng, 'FirebasePushId', @pushId OUT

    --  We're going to add a new pig with just the name.
    DECLARE @pigRecord int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @pigRecord OUT

    EXEC sp_OAMethod @pigRecord, 'AppendString', @success OUT, 'name', 'William'

    DECLARE @path int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @path OUT

    EXEC sp_OAMethod @path, 'Append', @success OUT, '/pig-rescue/animal/'
    EXEC sp_OAMethod @path, 'Append', @success OUT, @pushId
    EXEC sp_OAMethod @path, 'Append', @success OUT, '.json'

    --  The string content of the last arg passed is  {"name":"William"} 
    DECLARE @jsonResponse nvarchar(4000)
    EXEC sp_OAMethod @path, 'GetAsString', @sTmp0 OUT
    EXEC sp_OAMethod @pigRecord, 'Emit', @sTmp1 OUT
    EXEC sp_OAMethod @rest, 'FullRequestString', @jsonResponse OUT, 'PUT', @sTmp0, @sTmp1
    EXEC sp_OAGetProperty @rest, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        --  Something happened in the communications (either no request was sent, or no response was received.
        --  (The Chilkat REST API also has lower-level methods where an app can send the request in one call,
        --  and then receive the response in another call.)
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @fac
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authGoogle
        EXEC @hr = sp_OADestroy @prng
        EXEC @hr = sp_OADestroy @pigRecord
        EXEC @hr = sp_OADestroy @path
        RETURN
      END

    --  Check the response status code.   A 200 response status indicates success.
    EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @iTmp0 OUT
    IF @iTmp0 <> 200
      BEGIN
        EXEC sp_OAGetProperty @rest, 'ResponseStatusText', @sTmp0 OUT
        PRINT @sTmp0

        PRINT @jsonResponse

        PRINT 'Failed.'
        EXEC @hr = sp_OADestroy @fac
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authGoogle
        EXEC @hr = sp_OADestroy @prng
        EXEC @hr = sp_OADestroy @pigRecord
        EXEC @hr = sp_OADestroy @path
        RETURN
      END


    PRINT @jsonResponse

    PRINT 'Success.'

    --  Note: In many of the Chilkat examples, you may notice strange ways
    --  of doing something that should be simpler and shorter.  For example,
    --  building the path (above) could've been written differently,
    --  with some simple string concatenation.
    --  
    --  The reason is that the Chilkat examples are written in a 
    --  proprietary "example code" scripting language,
    --  and then automatically generated to each of the different programming
    --  languages you see on example-code.com.  The code generation is
    --  limited in what it can do.  For example, string concatentation
    --  is not yet a feature of the "example code" scripting language (as of May 2016), 
    --  and therefore you won't see the use of a programming language's string
    --  concatentation operators in any example.  
    --  

    EXEC @hr = sp_OADestroy @fac
    EXEC @hr = sp_OADestroy @rest
    EXEC @hr = sp_OADestroy @authGoogle
    EXEC @hr = sp_OADestroy @prng
    EXEC @hr = sp_OADestroy @pigRecord
    EXEC @hr = sp_OADestroy @path


END
GO