{"id":170,"date":"2020-04-22T06:08:48","date_gmt":"2020-04-22T06:08:48","guid":{"rendered":"http:\/\/oracle-internals.com\/blog\/?p=170"},"modified":"2020-05-07T14:45:49","modified_gmt":"2020-05-07T14:45:49","slug":"imitation-is-the-sincerest-form-of-flattery","status":"publish","type":"post","link":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/","title":{"rendered":"Imitation is the Sincerest Form of Flattery"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Compilers and Interpreters Compatible with PL\/SQL<\/h3>\n\n\n\n<p>The <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/database\/technologies\/application-development-PL\/SQL.html\" target=\"_blank\">PL\/SQL <\/a><a href=\"https:\/\/www.oracle.com\/database\/technologies\/application-development-PL\/SQL.html\" target=\"_blank\" rel=\"noreferrer noopener\">programming<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/database\/technologies\/application-development-PL\/SQL.html\" target=\"_blank\"> language<\/a>, created by <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/index.html\" target=\"_blank\">Oracle<\/a>, is the most well-known database-oriented procedural language in existence. While everyone who knows about PL\/SQL knows it&#8217;s available in the <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/database\/\" target=\"_blank\">Oracle Database<\/a>, what most people don&#8217;t know is that a number of companies and individuals have implemented their own compilers and interpreters for the PL\/SQL language.<\/p>\n\n\n\n<p>This article, an aside in my <a href=\"http:\/\/oracle-internals.com\/blog\/2020\/04\/21\/demystifying-pl-sql-the-life-of-a-compilation-unit\/\">Demystifying PL\/SQL series<\/a>, contains a list of notable PL\/SQL implementations I&#8217;m aware of. Like an old post I had done on Data UnLoaders for Oracle, the goal of this post is to track all non-Oracle implementations of PL\/SQL. This will accompany another blog post on PL\/SQL-inspired procedural languages.<\/p>\n\n\n\n<p>Note: I don&#8217;t consider college projects and source-to-source translators to be notable.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center\">(In order from oldest to newest)<\/p>\n\n\n\n<p><strong>Oracle PL\/SQL<\/strong><br>The Big Kahuna. This is the canonical implementation of PL\/SQL by Oracle. None of the following implementations are, or will ever be, as full-featured or support nearly as many optimizations. In development for over thirty years, it&#8217;s a marvel of compiler engineering. Oracle&#8217;s PL\/SQL implementation is available in <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/20\/lnpls\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Database<\/a>, <a href=\"https:\/\/www.oracle.com\/application-development\/technologies\/forms\/forms.html\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Forms<\/a>, and <a href=\"https:\/\/docs.oracle.com\/cd\/E11882_01\/timesten.112\/e21639\/toc.htm\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle TimesTen<\/a>.<\/p>\n\n\n\n<p><strong>MaxDB<\/strong><br><a rel=\"noreferrer noopener\" href=\"http:\/\/maxdb.sap.com\/\" target=\"_blank\">MaxDB<\/a>, previously known as SAP DB, previously known as ADABAS D, is a mixed open-source\/commercial database system from SAP AG. As SAP is a business applications company, it has long competed with Oracle. Unfortunately for SAP, the majority of their customers ran their application on top of Oracle Database. This made their customers an easy target for Oracle. As such, SAP began adding <a rel=\"noreferrer noopener\" href=\"https:\/\/help.sap.com\/viewer\/58c8145174ef49c1b78fae156ce46f62\/1909.001\/en-US\/db5d5e1701364ad8a8b67d3b39a0bd5e.html\" target=\"_blank\">Oracle compatibility features<\/a> so that their customers could run on top of their own database. While the PL\/SQL prototype code is no longer public, MaxDB is implemented in Pascal, C, and C++.<\/p>\n\n\n\n<p><strong>Universal Procedural Language Compiler<\/strong><br>My own optimizing compiler, dating back to 1999, that is compatible with a large subset of PL\/SQL. Over the years, I&#8217;ve rewritten it three times. While it currently generates code using LLVM, it once had interpreters written in C, PHP, and JavaScript &#8211; enabling it to execute practically anywhere. The UPL has frontends compatible with SQL\/PSM, Transact-SQL, and PL\/SQL. The UPL compiler toolkit and runtime is implemented in C.<\/p>\n\n\n\n<p><strong>ANTs Data Server<\/strong><br>While it&#8217;s no longer available, ANTs Data Server included an optimizing compiler for PL\/SQL and Transact-SQL.<\/p>\n\n\n\n<p><strong>Fyracle<\/strong><br>Also billed as Oracle-mode Firebird, <a rel=\"noreferrer noopener\" href=\"http:\/\/www.biz-wise.nl\/fb_fyracle.html\" target=\"_blank\">Fyracle<\/a> was an Oracle-compatible database based on the <a rel=\"noreferrer noopener\" href=\"https:\/\/firebirdsql.org\/en\/firebird-rdbms\/\" target=\"_blank\">Firebird RDBMS<\/a>. The developer kit, licensed separately, compiled a subset of PL\/SQL into bytecode for the BlueBird Virtual Machine. In addition to PL\/SQL support, Fyracle came with a few common built-in functions compatible with Oracle. While it is neither developed nor supported, Fyracle&#8217;s claim-to-fame was enabling people to run the <a href=\"http:\/\/www.compiere.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Compiere open-source ERP system<\/a> on Firebird instead of Oracle Database. Compiere has since moved to support EnterpriseDB Advanced Server in addition to Oracle Database. Fyracle and it&#8217;s PL\/SQL compiler were implemented in C++.<\/p>\n\n\n\n<p><strong>Superset Procedural Language (SPL)<\/strong><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.enterprisedb.com\/enterprise-postgres\/edb-postgres-advanced-server\" target=\"_blank\">EnterpriseDB Advanced Server<\/a> is a fork of the <a rel=\"noreferrer noopener\" href=\"https:\/\/www.postgresql.org\/\" target=\"_blank\">PostgreSQL RDBMS<\/a> designed to be compatible with Oracle Database. Advanced Server contains a fork of the <a rel=\"noreferrer noopener\" href=\"https:\/\/www.postgresql.org\/docs\/current\/plpgsql.html\" target=\"_blank\">PL\/pgSQL procedural language<\/a> interpreter, called SPL, that has been enhanced to support packages and basic user-defined ADTs. EnterpriseDB and SPL are implemented in C. I worked on this interpreter.<\/p>\n\n\n\n<p><strong>IBM DB2<\/strong><br>IBM added support for a large <a href=\"https:\/\/www.ibm.com\/support\/knowledgecenter\/SSEPGG_11.1.0\/com.ibm.db2.luw.apdv.plsql.doc\/doc\/c0053607.html\" target=\"_blank\" rel=\"noreferrer noopener\">subset of the PL\/SQL language<\/a>, including support for several built-in packages, functions, and Oracle Database syntax. I worked on this project.<\/p>\n\n\n\n<p><strong>Tibero<\/strong><br>This is a product from <a rel=\"noreferrer noopener\" href=\"https:\/\/www.tmaxsoft.com\/products\/tibero\/\" target=\"_blank\">TmaxSoft<\/a>. It claims fairly high compatibility with Oracle and PL\/SQL. I haven&#8217;t played with it much, but I&#8217;ve heard it&#8217;s one of the most complete third-party implementations of PL\/SQL. It is implemented in C.<\/p>\n\n\n\n<p><strong>StepSqlite<\/strong><br>StepSqlite was a cloud-hosted compiler from MetaTranz, LLC. It billed itself as a PL\/SQL Compiler for use with SQLite and BerkelyDB. It was actually recommended by Oracle for users who wanted to use PL\/SQL with BerkeleyDB. StepSqlite is implemented in C++.<\/p>\n\n\n\n<p><strong>SpliceMachine<\/strong><br><a href=\"https:\/\/splicemachine.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">SpliceMachine<\/a> supports a subset of the PL\/SQL language to ease migration off of Oracle Database. This is implemented in Java.<\/p>\n\n\n\n<p><strong>Gunnar Ruhs&#8217; PL\/SQL Compiler<\/strong><br>While this only supports a tiny subset of PL\/SQL, it is the only self-hosting PL\/SQL compiler I&#8217;m aware of. It&#8217;s a single-pass compiler designed to run under, and generate code for, Microsoft Windows. It is bootstrapped using Oracle PL\/SQL.<\/p>\n\n\n\n<p><strong>HPL\/SQL<\/strong><br><a rel=\"noreferrer noopener\" href=\"http:\/\/www.hplsql.org\/\" target=\"_blank\">HPL\/SQL<\/a> is a simple open-source interpreter that supports a subset of ANSI\/ISO SQL\/PSM, PL\/SQL, and Transact-SQL syntax. HPL\/SQL is implemented in Java as an ANTLR parse tree visitor.<\/p>\n\n\n\n<p><strong>Oracle Mode MariaDB<\/strong><br><a rel=\"noreferrer noopener\" href=\"https:\/\/mariadb.com\/\" target=\"_blank\">MariaDB<\/a>, a fork of MySQL, implemented support for a <a rel=\"noreferrer noopener\" href=\"https:\/\/mariadb.com\/kb\/en\/sql_modeoracle-from-mariadb-103\/\" target=\"_blank\">subset of PL\/SQL<\/a> within their current stored procedure engine. This is implemented in C++.<\/p>\n\n\n\n<p><strong>KingbaseES<\/strong><br>Similar to EnterpriseDB Advanced Server, <a rel=\"noreferrer noopener\" href=\"https:\/\/kes.kingbase.com.cn\/\" target=\"_blank\">KingbaseES<\/a> is a Chinese-based fork of the PostgreSQL RDBMS, designed to be compatible with Oracle Database. Likewise, KingbaseES contains a fork of the PL\/pgSQL procedural language interpreter with support for a subset of PL\/SQL. KingbaseES PL\/SQL is implemented in C\/C++.<\/p>\n\n\n\n<p><strong>Universit\u00e4t T\u00fcbingen&#8217;s PL\/SQL to Recursive SQL Translator<\/strong><br>While this is technically a source-to-source translator, I find it notable as it&#8217;s structured as a compiler: the frontend parses a user-defined PL\/SQL function, it&#8217;s translated to an intermediate form, and the backend emits an equivalent plain (WITH RECURSIVE) SQL query. It&#8217;s an <a href=\"https:\/\/db.inf.uni-tuebingen.de\/publications.html#2020\" target=\"_blank\" rel=\"noreferrer noopener\">interesting academic project<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Compilers and Interpreters Compatible with PL\/SQL The PL\/SQL programming language, created by Oracle, is the most well-known database-oriented procedural language in existence. While everyone who knows about PL\/SQL knows it&#8217;s available in the Oracle Database, what most people don&#8217;t know is that a number of companies and individuals have implemented their own compilers and interpreters [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,9],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Imitation is the Sincerest Form of Flattery - Oracle Internals<\/title>\n<meta name=\"description\" content=\"Created by Oracle, PL\/SQL is the most popular database procedural language. A comprehensive list of notable third-party implementations can be found here.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Imitation is the Sincerest Form of Flattery - Oracle Internals\" \/>\n<meta property=\"og:description\" content=\"Created by Oracle, PL\/SQL is the most popular database procedural language. A comprehensive list of notable third-party implementations can be found here.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\" \/>\n<meta property=\"og:site_name\" content=\"Oracle Internals\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-22T06:08:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-07T14:45:49+00:00\" \/>\n<meta name=\"author\" content=\"Jonah Harris\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jonahharris\" \/>\n<meta name=\"twitter:site\" content=\"@jonahharris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonah Harris\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\"},\"author\":{\"name\":\"Jonah Harris\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"headline\":\"Imitation is the Sincerest Form of Flattery\",\"datePublished\":\"2020-04-22T06:08:48+00:00\",\"dateModified\":\"2020-05-07T14:45:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\"},\"wordCount\":930,\"publisher\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"articleSection\":[\"Oracle Database\",\"PL\/SQL\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\",\"url\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\",\"name\":\"Imitation is the Sincerest Form of Flattery - Oracle Internals\",\"isPartOf\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#website\"},\"datePublished\":\"2020-04-22T06:08:48+00:00\",\"dateModified\":\"2020-05-07T14:45:49+00:00\",\"description\":\"Created by Oracle, PL\/SQL is the most popular database procedural language. A comprehensive list of notable third-party implementations can be found here.\",\"breadcrumb\":{\"@id\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oracle-internals.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Imitation is the Sincerest Form of Flattery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#website\",\"url\":\"https:\/\/oracle-internals.com\/blog\/\",\"name\":\"Oracle Internals\",\"description\":\"Researching the Inner Workings of the World&#039;s Most Powerful Database\",\"publisher\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/oracle-internals.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\",\"name\":\"Jonah Harris\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g\",\"caption\":\"Jonah Harris\"},\"logo\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jonahharris\/\",\"https:\/\/x.com\/jonahharris\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Imitation is the Sincerest Form of Flattery - Oracle Internals","description":"Created by Oracle, PL\/SQL is the most popular database procedural language. A comprehensive list of notable third-party implementations can be found here.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/","og_locale":"en_US","og_type":"article","og_title":"Imitation is the Sincerest Form of Flattery - Oracle Internals","og_description":"Created by Oracle, PL\/SQL is the most popular database procedural language. A comprehensive list of notable third-party implementations can be found here.","og_url":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/","og_site_name":"Oracle Internals","article_published_time":"2020-04-22T06:08:48+00:00","article_modified_time":"2020-05-07T14:45:49+00:00","author":"Jonah Harris","twitter_card":"summary_large_image","twitter_creator":"@jonahharris","twitter_site":"@jonahharris","twitter_misc":{"Written by":"Jonah Harris","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/#article","isPartOf":{"@id":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/"},"author":{"name":"Jonah Harris","@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"headline":"Imitation is the Sincerest Form of Flattery","datePublished":"2020-04-22T06:08:48+00:00","dateModified":"2020-05-07T14:45:49+00:00","mainEntityOfPage":{"@id":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/"},"wordCount":930,"publisher":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"articleSection":["Oracle Database","PL\/SQL"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/","url":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/","name":"Imitation is the Sincerest Form of Flattery - Oracle Internals","isPartOf":{"@id":"https:\/\/oracle-internals.com\/blog\/#website"},"datePublished":"2020-04-22T06:08:48+00:00","dateModified":"2020-05-07T14:45:49+00:00","description":"Created by Oracle, PL\/SQL is the most popular database procedural language. A comprehensive list of notable third-party implementations can be found here.","breadcrumb":{"@id":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/oracle-internals.com\/blog\/2020\/04\/22\/imitation-is-the-sincerest-form-of-flattery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oracle-internals.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Imitation is the Sincerest Form of Flattery"}]},{"@type":"WebSite","@id":"https:\/\/oracle-internals.com\/blog\/#website","url":"https:\/\/oracle-internals.com\/blog\/","name":"Oracle Internals","description":"Researching the Inner Workings of the World&#039;s Most Powerful Database","publisher":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oracle-internals.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4","name":"Jonah Harris","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g","caption":"Jonah Harris"},"logo":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/jonahharris\/","https:\/\/x.com\/jonahharris"]}]}},"_links":{"self":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/170"}],"collection":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":37,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":259,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/170\/revisions\/259"}],"wp:attachment":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}