@@ -88,6 +88,7 @@ class ImmudbClient {
8888 return new Promise ( ( resolve ) => resolve ( ImmudbClient . instance ) ) ;
8989 } catch ( err ) {
9090 await ImmudbClient . instance . shutdown ( ) ;
91+
9192 return new Promise ( ( _ , reject ) => reject ( err ) ) ;
9293 }
9394 }
@@ -1650,6 +1651,174 @@ class ImmudbClient {
16501651 console . error ( err ) ;
16511652 }
16521653 }
1654+
1655+ async SQLExec ( { sql, paramsList, nowait } : Parameters . SQLExec ) : Promise < schemaTypes . SQLExecResult . AsObject | undefined > {
1656+ try {
1657+ const req = new schemaTypes . SQLExecRequest ( ) ;
1658+
1659+ const sqlParamsList = paramsList . map ( ( { name, value = null } ) => {
1660+ const param = new schemaTypes . NamedParam ( ) ;
1661+
1662+ param . setName ( name )
1663+
1664+ if ( value !== null ) {
1665+ const sqlValue = new schemaTypes . SQLValue ( ) ;
1666+ const { pb_null, n, s, b, bs } = value ;
1667+
1668+ sqlValue . setNull ( pb_null ) ;
1669+ sqlValue . setN ( n ) ;
1670+ sqlValue . setS ( s ) ;
1671+ sqlValue . setB ( b ) ;
1672+ sqlValue . setBs ( bs ) ;
1673+
1674+ param . setValue ( sqlValue )
1675+ }
1676+
1677+ return param ;
1678+ } ) ;
1679+
1680+ req . setParamsList ( sqlParamsList ) ;
1681+ req . setSql ( sql ) ;
1682+ req . setNowait ( nowait ) ;
1683+
1684+ return new Promise ( ( resolve , reject ) => this . client . sQLExec ( req , this . _metadata , ( err , res ) => {
1685+ if ( err ) {
1686+ console . error ( 'SQLExec error' , err )
1687+
1688+ reject ( err )
1689+ } else {
1690+ const ctxsList = res
1691+ . getCtxsList ( )
1692+ . map ( txMetadata => ( {
1693+ id : txMetadata . getId ( ) ,
1694+ prevalh : util . getAlh ( txMetadata ) ,
1695+ ts : txMetadata . getTs ( ) ,
1696+ nentries : txMetadata . getNentries ( ) ,
1697+ eh : txMetadata . getEh ( ) ,
1698+ bltxid : txMetadata . getBltxid ( ) ,
1699+ blroot : txMetadata . getBlroot ( ) ,
1700+ } ) )
1701+ const dtxsList = res
1702+ . getCtxsList ( )
1703+ . map ( txMetadata => ( {
1704+ id : txMetadata . getId ( ) ,
1705+ prevalh : util . getAlh ( txMetadata ) ,
1706+ ts : txMetadata . getTs ( ) ,
1707+ nentries : txMetadata . getNentries ( ) ,
1708+ eh : txMetadata . getEh ( ) ,
1709+ bltxid : txMetadata . getBltxid ( ) ,
1710+ blroot : txMetadata . getBlroot ( ) ,
1711+ } ) )
1712+
1713+ resolve ( {
1714+ ctxsList,
1715+ dtxsList,
1716+ } )
1717+ }
1718+ } ) )
1719+ } catch ( err ) {
1720+ console . error ( err ) ;
1721+ }
1722+ }
1723+
1724+ async SQLQuery ( { sql, paramsList, reusesnapshot } : Parameters . SQLQuery ) : Promise < schemaTypes . SQLQueryResult . AsObject | undefined > {
1725+ try {
1726+ const req = new schemaTypes . SQLQueryRequest ( ) ;
1727+
1728+ const sqlParamsList = paramsList . map ( ( { name, value = null } ) => {
1729+ const param = new schemaTypes . NamedParam ( ) ;
1730+
1731+ param . setName ( name )
1732+
1733+ if ( value !== null ) {
1734+ const sqlValue = new schemaTypes . SQLValue ( ) ;
1735+ const { pb_null, n, s, b, bs } = value ;
1736+
1737+ sqlValue . setNull ( pb_null ) ;
1738+ sqlValue . setN ( n ) ;
1739+ sqlValue . setS ( s ) ;
1740+ sqlValue . setB ( b ) ;
1741+ sqlValue . setBs ( bs ) ;
1742+
1743+ param . setValue ( sqlValue )
1744+ }
1745+
1746+ return param ;
1747+ } ) ;
1748+
1749+ req . setSql ( sql ) ;
1750+ req . setParamsList ( sqlParamsList ) ;
1751+ req . setReusesnapshot ( reusesnapshot ) ;
1752+
1753+ return new Promise ( ( resolve , reject ) => this . client . sQLQuery ( req , this . _metadata , ( err , res ) => {
1754+ if ( err ) {
1755+ console . error ( 'SQLQuery error' , err )
1756+
1757+ reject ( err )
1758+ } else {
1759+ const columnsList = res
1760+ . getColumnsList ( )
1761+ . map ( column => column . toObject ( ) ) ;
1762+ const rowsList = res
1763+ . getRowsList ( )
1764+ . map ( row => {
1765+ const valuesList = row
1766+ . getValuesList ( )
1767+ . map ( value => value . toObject ( ) ) ;
1768+
1769+ return {
1770+ columnsList : row . getColumnsList ( ) ,
1771+ valuesList
1772+ }
1773+ } ) ;
1774+
1775+ resolve ( {
1776+ columnsList,
1777+ rowsList,
1778+ } )
1779+ }
1780+ } ) )
1781+ } catch ( err ) {
1782+ console . error ( err ) ;
1783+ }
1784+ }
1785+
1786+ async listTables ( ) : Promise < schemaTypes . SQLQueryResult . AsObject | undefined > {
1787+ try {
1788+ const req = new empty . Empty ( )
1789+
1790+ return new Promise ( ( resolve , reject ) => this . client . listTables ( req , this . _metadata , ( err , res ) => {
1791+ if ( err ) {
1792+ console . error ( 'listTables error' , err ) ;
1793+
1794+ reject ( err ) ;
1795+ } else {
1796+ const columnsList = res
1797+ . getColumnsList ( )
1798+ . map ( column => column . toObject ( ) ) ;
1799+ const rowsList = res
1800+ . getRowsList ( )
1801+ . map ( row => {
1802+ const valuesList = row
1803+ . getValuesList ( )
1804+ . map ( value => value . toObject ( ) ) ;
1805+
1806+ return {
1807+ columnsList : row . getColumnsList ( ) ,
1808+ valuesList
1809+ }
1810+ } ) ;
1811+
1812+ resolve ( {
1813+ columnsList,
1814+ rowsList,
1815+ } )
1816+ }
1817+ } ) )
1818+ } catch ( err ) {
1819+ console . error ( err ) ;
1820+ }
1821+ }
16531822}
16541823
16551824export default ImmudbClient ;
0 commit comments