<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Prasanna Kumar</title>
    <description>The latest articles on DEV Community by Prasanna Kumar (@p11r).</description>
    <link>https://dev.to/p11r</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F41133%2F858dbf6f-741c-44d0-802d-4f414330b8cb.jpg</url>
      <title>DEV Community: Prasanna Kumar</title>
      <link>https://dev.to/p11r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/p11r"/>
    <language>en</language>
    <item>
      <title>Google FireStore Data Source Plugin for Grafana.</title>
      <dc:creator>Prasanna Kumar</dc:creator>
      <pubDate>Mon, 20 Nov 2023 03:32:29 +0000</pubDate>
      <link>https://dev.to/p11r/google-firestore-data-source-plugin-for-grafana-29ph</link>
      <guid>https://dev.to/p11r/google-firestore-data-source-plugin-for-grafana-29ph</guid>
      <description>&lt;h1&gt;
  
  
  firestore-grafana-datasource
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/firestore"&gt;Google Firestore&lt;/a&gt; Data Source Plugin for &lt;a href="https://grafana.com/"&gt;Grafana&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Grafana Firestore Data Source Plugin enables integrating data on Firestore on to Grafana dashboards.&lt;/p&gt;

&lt;p&gt;It uses &lt;a href="https://github.com/pgollangi/FireQL"&gt;FireQL&lt;/a&gt; to capture user query that translated to issue queries on Firestore and construct results.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/pgollangi/FireQL"&gt;FireQL&lt;/a&gt; is a Go library to query Google Firestore database using SQL syntax.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use Google Firestore as a data source for Grafana dashboards&lt;/li&gt;
&lt;li&gt;Configure Firestore data source with GCP &lt;code&gt;Project Id&lt;/code&gt; and &lt;a href="https://cloud.google.com/firestore/docs/security/iam"&gt;&lt;code&gt;Service Account&lt;/code&gt;&lt;/a&gt; for authentication&lt;/li&gt;
&lt;li&gt;Store &lt;code&gt;Service Account&lt;/code&gt; data source configuration in Grafana encrypted storage &lt;a href="https://grafana.com/docs/grafana/latest/developers/plugins/create-a-grafana-plugin/extend-a-plugin/add-authentication-for-data-source-plugins/#encrypt-data-source-configuration"&gt;Secure JSON Data&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Query Firestore &lt;a href="https://firebase.google.com/docs/firestore/data-model#collections"&gt;collections&lt;/a&gt; and path to collections&lt;/li&gt;
&lt;li&gt;Auto detect data types: &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;json&lt;/code&gt;, &lt;code&gt;time.Time&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Query selected fields from the collection&lt;/li&gt;
&lt;li&gt;Order query results&lt;/li&gt;
&lt;li&gt;Limit query results&lt;/li&gt;
&lt;li&gt;Query &lt;a href="https://firebase.blog/posts/2019/06/understanding-collection-group-queries"&gt;Collection Groups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Firestore data source configuration
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CY6-LwRE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yllfipep0sqv7rwvbh7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CY6-LwRE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yllfipep0sqv7rwvbh7e.png" alt="Firestore data source configuration" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Using datasource
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lConyXu5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m73sh0gm35t030ovjuaz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lConyXu5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m73sh0gm35t030ovjuaz.png" alt="Using datasource" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>github</category>
      <category>database</category>
    </item>
    <item>
      <title>FireQL - Query Google Firestore database using SQL syntax.</title>
      <dc:creator>Prasanna Kumar</dc:creator>
      <pubDate>Wed, 04 Jan 2023 09:41:11 +0000</pubDate>
      <link>https://dev.to/p11r/fireql-query-google-firestore-database-using-sql-syntax-31lc</link>
      <guid>https://dev.to/p11r/fireql-query-google-firestore-database-using-sql-syntax-31lc</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/pgollangi/FireQL" rel="noopener noreferrer"&gt;&lt;code&gt;FireQL&lt;/code&gt;&lt;/a&gt; is the Golang library and interactive CLI tool to query the Google Firestore database using SQL syntax.&lt;/p&gt;

&lt;p&gt;It is built on top of the official &lt;a href="https://pkg.go.dev/cloud.google.com/go/firestore" rel="noopener noreferrer"&gt;Google Firestore Client SDK&lt;/a&gt; that will allow running queries Cloud Firestore database using SQL syntax.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pgollangi" rel="noopener noreferrer"&gt;
        pgollangi
      &lt;/a&gt; / &lt;a href="https://github.com/pgollangi/FireQL" rel="noopener noreferrer"&gt;
        FireQL
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Interactive CLI and Go library to query Google Firestore database using SQL syntax.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/pgollangi/FireQL/actions/workflows/build.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/pgollangi/FireQL/actions/workflows/build.yml/badge.svg" alt="build"&gt;&lt;/a&gt;
&lt;a href="https://app.codecov.io/gh/pgollangi/FireQL" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/17dac3299be179af26eff4ddb6b68dcb6fe600067a2d2656791c21cf48982113/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f70676f6c6c616e67692f66697265716c" alt="Codecov"&gt;&lt;/a&gt;
&lt;a href="https://goreportcard.com/report/github.com/pgollangi/FireQL" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/99284a5819bb77046c3f1eba13ec0b283eea1f362af374f87deab7d73764b6dc/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f70676f6c6c616e67692f46697265514c" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0ac9e6513a69b06ec22f6b81ba75e609cb50f6143962a65049884666a62addd0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f676f2d6d6f642f676f2d76657273696f6e2f70676f6c6c616e67692f46697265514c"&gt;&lt;img src="https://camo.githubusercontent.com/0ac9e6513a69b06ec22f6b81ba75e609cb50f6143962a65049884666a62addd0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f676f2d6d6f642f676f2d76657273696f6e2f70676f6c6c616e67692f46697265514c" alt="GitHub go.mod Go version"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/73bbd1f03f8f905acb921078776d5fb0c5a210d50f34a47e6ada8131834e24b3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f70676f6c6c616e67692f46697265514c"&gt;&lt;img src="https://camo.githubusercontent.com/73bbd1f03f8f905acb921078776d5fb0c5a210d50f34a47e6ada8131834e24b3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f70676f6c6c616e67692f46697265514c" alt="GitHub release (latest by date)"&gt;&lt;/a&gt;
&lt;a href="https://pkg.go.dev/github.com/pgollangi/FireQL" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a08357a90e40245702b052f59259e6de32a30c4506593b84450c8091a35d7da3/68747470733a2f2f706b672e676f2e6465762f62616467652f6769746875622e636f6d2f70676f6c6c616e67692f46697265514c" alt="PkgGoDev"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/bbf2d1053578419f7bd32a9194cee1a47e2db8c482cae9b007a59170d0c96b95/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f70676f6c6c616e67692f46697265514c"&gt;&lt;img src="https://camo.githubusercontent.com/bbf2d1053578419f7bd32a9194cee1a47e2db8c482cae9b007a59170d0c96b95/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f70676f6c6c616e67692f46697265514c" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;FireQL&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;FireQL&lt;/code&gt; is the Golang library and interactive CLI tool to query the Google Firestore database using SQL syntax.&lt;/p&gt;
&lt;p&gt;It is built on top of the official &lt;a href="https://pkg.go.dev/cloud.google.com/go/firestore" rel="nofollow noopener noreferrer"&gt;Google Firestore Client SDK&lt;/a&gt; that will allow running queries Cloud Firestore database using SQL syntax. Inspired by &lt;a href="https://firebaseopensource.com/projects/jsayol/firesql/" rel="nofollow noopener noreferrer"&gt;Firebase FireSQL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://asciinema.org/a/548756?cols=150&amp;amp;rows=50" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fpgollangi%2FFireQLexamples%2Ffireql_help.png" alt="fireql"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;FireQL&lt;/code&gt; can be used as Go library or interactive command-line tool.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Go Library&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;An example of querying collections using SQL syntax:&lt;/p&gt;
&lt;div class="highlight highlight-source-go notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; (
    &lt;span class="pl-s"&gt;"github.com/pgollangi/fireql"&lt;/span&gt;
)
&lt;span class="pl-k"&gt;func&lt;/span&gt; &lt;span class="pl-s1"&gt;main&lt;/span&gt;() {
    &lt;span class="pl-s1"&gt;fql&lt;/span&gt;, &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;fireql&lt;/span&gt;.&lt;span class="pl-c1"&gt;New&lt;/span&gt;(&lt;span class="pl-s"&gt;"&amp;lt;GCP_PROJECT_ID&amp;gt;"&lt;/span&gt;)
    &lt;span class="pl-c"&gt;//OR&lt;/span&gt;
    &lt;span class="pl-s1"&gt;fql&lt;/span&gt;, &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;fireql&lt;/span&gt;.&lt;span class="pl-c1"&gt;New&lt;/span&gt;(&lt;span class="pl-s"&gt;"&amp;lt;GCP_PROJECT_ID&amp;gt;"&lt;/span&gt;, &lt;span class="pl-s1"&gt;fireql&lt;/span&gt;.&lt;span class="pl-c1"&gt;OptionServiceAccount&lt;/span&gt;(&lt;span class="pl-s"&gt;"&amp;lt;SERVICE_ACCOUNT_JSON&amp;gt;"&lt;/span&gt;))
    &lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;!=&lt;/span&gt; &lt;span class="pl-c1"&gt;nil&lt;/span&gt; {
        &lt;span class="pl-s1"&gt;panic&lt;/span&gt;(&lt;span class="pl-s1"&gt;err&lt;/span&gt;)
    }
    
    &lt;span class="pl-c"&gt;// Now, execute SELECT query&lt;/span&gt;
    &lt;span class="pl-s1"&gt;result&lt;/span&gt;, &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;fql&lt;/span&gt;.&lt;span class="pl-c1"&gt;Execute&lt;/span&gt;(&lt;span class="pl-s"&gt;"SELECT * `users` order by id desc limit 10"&lt;/span&gt;)
    &lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-s1"&gt;err&lt;/span&gt; &lt;span class="pl-c1"&gt;!=&lt;/span&gt; &lt;span class="pl-c1"&gt;nil&lt;/span&gt; {
        &lt;span class="pl-s1"&gt;panic&lt;/span&gt;(&lt;span class="pl-s1"&gt;err&lt;/span&gt;)
    }
    &lt;span class="pl-s1"&gt;_&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;result&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pgollangi/FireQL" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;FireQL&lt;/code&gt; can be used as a Go library or interactive command-line tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go Library
&lt;/h3&gt;

&lt;p&gt;An example of querying collections using SQL syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/pgollangi/fireql"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fql&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;fireql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;GCP_PROJECT_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c"&gt;//OR&lt;/span&gt;
    &lt;span class="n"&gt;fql&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fireql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;GCP_PROJECT_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fireql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OptionServiceAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;SERVICE_ACCOUNT_JSON&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;// Now, execute SELECT query&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;fql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SELECT * `users` order by id desc limit 10"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Command-Line
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fireql &lt;span class="o"&gt;[&lt;/span&gt;flags]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;fireql &lt;span class="nt"&gt;--project&lt;/span&gt; &lt;span class="nv"&gt;$PROJECT_ID&lt;/span&gt;
Welcome! Use SQL to query Firestore.
Use Ctrl+D, &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="s2"&gt;"exit"&lt;/span&gt; to exit.
Visit github.com/pgollangi/FireQL &lt;span class="k"&gt;for &lt;/span&gt;more details.
fireql&amp;gt;select &lt;span class="nb"&gt;id&lt;/span&gt;, name from &lt;span class="nb"&gt;users &lt;/span&gt;limit 2
+------+------------+
|  ID  |    NAME    |
+------+------------+
| 1046 | bob        |
| 1047 | smith      |
+------+------------+
&lt;span class="o"&gt;(&lt;/span&gt;2 rows&lt;span class="o"&gt;)&lt;/span&gt;
fireql&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Read the &lt;a href="https://pgollangi.github.io/FireQL/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for more information on CLI usage.&lt;/p&gt;


&lt;div class="ltag_asciinema"&gt;
  
&lt;/div&gt;



&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;Some cool &lt;code&gt;SELECT&lt;/code&gt; queries that are possible with &lt;code&gt;FireQL&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;email_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;`address.city`&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nv"&gt;`users`&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="s1"&gt;'address.city'&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt; &lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nv"&gt;`users`&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;LENGTH&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;contacts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;total_contacts&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nv"&gt;`users`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See &lt;a href="https://github.com/pgollangi/FireQL/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt; for more examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Homebrew
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pgollangi/tap/fireql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Updating:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew upgrade fireql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scoop (for windows)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;scoop&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="n"&gt;pgollangi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;pgollangi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;scoop&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;
&lt;span class="n"&gt;scoop&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;fireql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run pgollangi/fireql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Go
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/pgollangi/fireql@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Manual
&lt;/h3&gt;

&lt;p&gt;You can alternately download a suitable binary for your OS at the &lt;a href="https://github.com/pgollangi/fireql/releases" rel="noopener noreferrer"&gt;releases page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;All of &lt;a href="https://firebase.google.com/docs/firestore/query-data/queries#query_limitations" rel="noopener noreferrer"&gt;firestore query limitations&lt;/a&gt; are applicable when running queries using &lt;code&gt;FireQL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In addition to that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Only &lt;code&gt;SELECT&lt;/code&gt; queries for now. Support for &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt; might come in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only &lt;code&gt;AND&lt;/code&gt; conditions supported in &lt;code&gt;WHERE&lt;/code&gt; clause.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No support for &lt;code&gt;JOIN&lt;/code&gt;s.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;LIMIT&lt;/code&gt; doesn't accept an &lt;code&gt;OFFSET&lt;/code&gt;, only a single number.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No support of &lt;code&gt;GROUP BY&lt;/code&gt; and aggregate function &lt;code&gt;COUNT&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future scope
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Expand support for all logical conditions in &lt;code&gt;WHERE&lt;/code&gt; clause by internally issuing multiple query requests to Firestore and merging results locally before returning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;GROUP BY&lt;/code&gt; support&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support other DML queries: &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for the read! Try using this if you are working with Firestore and share feedback.&lt;/p&gt;

&lt;p&gt;Originally posted on my blog &lt;a href="https://me.p11r.dev/fireql" rel="noopener noreferrer"&gt;https://me.p11r.dev/fireql&lt;/a&gt; &lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>go</category>
      <category>showdev</category>
    </item>
    <item>
      <title>India: Covid19 hospitals on Map</title>
      <dc:creator>Prasanna Kumar</dc:creator>
      <pubDate>Fri, 07 May 2021 04:28:00 +0000</pubDate>
      <link>https://dev.to/p11r/india-covid19-hospitals-on-map-1mi7</link>
      <guid>https://dev.to/p11r/india-covid19-hospitals-on-map-1mi7</guid>
      <description>&lt;p&gt;Hello!&lt;/p&gt;

&lt;p&gt;I have created a site to locate covid19 hospitals in India on map with details like beds availability, contact information and directions to the hospitals.&lt;/p&gt;

&lt;p&gt;Idea is to bring all hospitals on the map so that any one quickly search nearby hospitals or search hospitals near to an address. And be able to navigate to it using the directions.&lt;/p&gt;

&lt;p&gt;Site: &lt;a href="https://covidhospitals.online/"&gt;https://covidhospitals.online/&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/covidhospitals/covidhospitals"&gt;https://github.com/covidhospitals/covidhospitals&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Explore nearby hospitals using current device location&lt;/li&gt;
&lt;li&gt;Search address to look at hospitals around that.&lt;/li&gt;
&lt;li&gt;See hospitals contact details like phone, address along with beds availability&lt;/li&gt;
&lt;li&gt;Get directions to navigate to hospital location&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leafletjs.com/"&gt;Leaflet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openstreetmap.org"&gt;OpenStreetMap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ReactJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mapquest.com/"&gt;MapQuest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Source of Data
&lt;/h2&gt;

&lt;p&gt;Currently hospital location, and beds information is being collected for AP, and Delhi states. Feel free to volunteer to contribute the data adhering the JSON format. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State or Locality&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Normalised data&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Andhra Pradesh&lt;/td&gt;
&lt;td&gt;&lt;a href="http://dashboard.covid19.ap.gov.in/"&gt;http://dashboard.covid19.ap.gov.in/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://api.npoint.io/4594de00c3f1d76a08ec"&gt;See here&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delhi&lt;/td&gt;
&lt;td&gt;&lt;a href="https://coronabeds.jantasamvad.org/"&gt;https://coronabeds.jantasamvad.org/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://api.npoint.io/4d61424b0910b4a2b692"&gt;See here&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A big thanks &lt;a href="https://netlify.com/"&gt;Netlify&lt;/a&gt; for hosting the &lt;a href="https://covidhospitals.online/"&gt;covidhospitals.online&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Thanks to &lt;a href="https://npoint.io"&gt;npoint.io&lt;/a&gt; for hosting the AP hospital location data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please feel to make changes to the site and add more data sources to it. Any contributions are most welcome. &lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>react</category>
    </item>
    <item>
      <title>go-portfinder: Go implementation of npm portfinder</title>
      <dc:creator>Prasanna Kumar</dc:creator>
      <pubDate>Wed, 14 Apr 2021 13:15:53 +0000</pubDate>
      <link>https://dev.to/p11r/go-portfinder-go-implementation-of-npm-portfinder-52jm</link>
      <guid>https://dev.to/p11r/go-portfinder-go-implementation-of-npm-portfinder-52jm</guid>
      <description>&lt;p&gt;Go implementation of npm &lt;a href="https://www.npmjs.com/package/portfinder"&gt;portfinder&lt;/a&gt;. A simple tool to find an open port on the current machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;go get github.com/pgollangi/go-portfinder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Usage
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/pgollangi/go-portfinder"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
     &lt;span class="c"&gt;// scans and returns first open port on all network interfaces of current machine.&lt;/span&gt;
     &lt;span class="n"&gt;openPort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;portfinder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetPort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;PortFinderOptions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="n"&gt;StartPort&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9090&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="n"&gt;StopPort&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9099&lt;/span&gt;
     &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;a href="https://github.com/pgollangi/go-portfinder"&gt;https://github.com/pgollangi/go-portfinder&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>go</category>
      <category>programming</category>
    </item>
    <item>
      <title>fastget - ultra fast download files over HTTP(S)</title>
      <dc:creator>Prasanna Kumar</dc:creator>
      <pubDate>Mon, 14 Sep 2020 04:27:56 +0000</pubDate>
      <link>https://dev.to/p11r/fastget-ultra-fast-download-files-over-http-s-11e0</link>
      <guid>https://dev.to/p11r/fastget-ultra-fast-download-files-over-http-s-11e0</guid>
      <description>&lt;p&gt;⚡&lt;code&gt;fastget&lt;/code&gt; is an open source CLI tool and Go library to ultra fast download files over HTTP(S).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pgollangi/fastget" rel="noopener noreferrer"&gt;https://github.com/pgollangi/fastget&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Concurrent download of files over HTTP(S) if server supports Accept-Ranges. Otherwise, fallback to single thread download.&lt;/li&gt;
&lt;li&gt;Increase no. of concurrent workers to speed up download. Use flag --workers.&lt;/li&gt;
&lt;li&gt;Add curl like custom headers to authentifacte HTTP(S) requests. Use flag --header.&lt;/li&gt;
&lt;li&gt;Specify output file to write downloads. Default to file name of URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fpgollangi%2Ffastget%2Fraw%2Fmaster%2Fassets%2Ffastget_demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fpgollangi%2Ffastget%2Fraw%2Fmaster%2Fassets%2Ffastget_demo.gif" alt="fastget Demo"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>githunt</category>
      <category>go</category>
      <category>opensource</category>
    </item>
    <item>
      <title>netselect: A CLI tool to find the fastest host based on the lowest ICMP latency.</title>
      <dc:creator>Prasanna Kumar</dc:creator>
      <pubDate>Fri, 28 Aug 2020 18:01:57 +0000</pubDate>
      <link>https://dev.to/p11r/netselect-a-cli-tool-to-find-the-fastest-host-based-on-the-lowest-icmp-latency-gep</link>
      <guid>https://dev.to/p11r/netselect-a-cli-tool-to-find-the-fastest-host-based-on-the-lowest-icmp-latency-gep</guid>
      <description>&lt;p&gt;&lt;code&gt;netselect&lt;/code&gt; is a CLI tool and go library to select the fastest host based on the lowest ICMP latency.&lt;br&gt;
Try it and let me know your feedback. I would greatly appreciate it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pgollangi/netselect"&gt;https://github.com/pgollangi/netselect&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;netselect google.com google.in google.us
google.com       55 ms  100% ok         &lt;span class="o"&gt;(&lt;/span&gt; 3/ 3&lt;span class="o"&gt;)&lt;/span&gt;
google.in        56 ms  100% ok         &lt;span class="o"&gt;(&lt;/span&gt; 3/ 3&lt;span class="o"&gt;)&lt;/span&gt;
google.us        59 ms  100% ok         &lt;span class="o"&gt;(&lt;/span&gt; 3/ 3&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>go</category>
      <category>githunt</category>
      <category>showdev</category>
      <category>github</category>
    </item>
  </channel>
</rss>
