Skip to content

Commit

Permalink
Update data providers and improve connection handling
Browse files Browse the repository at this point in the history
Updated RdlEngineConfigInit to include new data providers and custom report items. Removed conditional compilation for sqlite and postgresql in GetConnection. Eliminated debug Console.WriteLine statements. Enhanced connection instance creation with nullable reference types and explicit exception handling for invalid casts.
  • Loading branch information
majorsilence committed Jan 1, 2025
1 parent 1df316a commit 5bcdad3
Showing 1 changed file with 211 additions and 107 deletions.
318 changes: 211 additions & 107 deletions RdlEngine/Runtime/RdlEngineConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,98 +106,214 @@ static public void RdlEngineConfigInit(params string[] dirs)
if (SqlEntries != null) // we don't need to reinit with internal one
return;
xDoc.InnerXml = @"
<config>
<DataSources>
<DataSource>
<DataProvider>SQL</DataProvider>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>ODBC</DataProvider>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
<ReplaceParameters>true</ReplaceParameters>
</DataSource>
<DataSource>
<DataProvider>OLEDB</DataProvider>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>XML</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.XmlConnection</ClassName>
<TableSelect></TableSelect>
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>WebService</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.WebServiceConnection</ClassName>
<TableSelect></TableSelect>
<Interface>WebService</Interface>
</DataSource>
<DataSource>
<DataProvider>WebLog</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.LogConnection</ClassName>
<TableSelect></TableSelect>
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>Text</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.TxtConnection</ClassName>
<TableSelect></TableSelect>
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>FileDirectory</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.FileDirConnection</ClassName>
<TableSelect></TableSelect>
<Interface>File</Interface>
</DataSource>
</DataSources>
<Compression>
<CodeModule>ICSharpCode.SharpZipLib.dll</CodeModule>
<ClassName>ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream</ClassName>
<Finish>Finish</Finish>
<Enable>true</Enable>
</Compression>
<CustomReportItems>
<CustomReportItem>
<Type>BarCode EAN-13</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeEAN13</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCode Bookland</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeBookland</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>QR Code</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.QrCode</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCode39</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCode39</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCode128</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCode128</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCodeEAN8</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeEAN8</ClassName>
</CustomReportItem>
</CustomReportItems>
<?xml version=""1.0"" encoding=""utf-8""?>
<config>
<DataSources>
<DataSource>
<DataProvider>SQL</DataProvider>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>Microsoft.Data.SqlClient</DataProvider>
<CodeModule>Microsoft.Data.SqlClient.dll</CodeModule>
<ClassName>Microsoft.Data.SqlClient.SqlConnection</ClassName>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>SQLce</DataProvider>
<CodeModule>C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll</CodeModule>
<ClassName>System.Data.SqlServerCe.SqlCeConnection</ClassName>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME, TABLE_TYPE</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>ODBC</DataProvider>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
<ReplaceParameters>true</ReplaceParameters>
</DataSource>
<DataSource>
<DataProvider>OLEDB</DataProvider>
<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>Oracle</DataProvider>
<CodeModule>F:\oracle\product\10.2.0\db_2\BIN\Oracle.DataAccess.dll</CodeModule>
<ClassName>Oracle.DataAccess.Client.OracleConnection</ClassName>
<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>MySQL.NET</DataProvider>
<CodeModule>C:\Program Files (x86)\MySQL\MySQL Connector Net 6.3.7\Assemblies\v2.0\MySql.Data.dll</CodeModule>
<ClassName>MySql.Data.MySqlClient.MySqlConnection</ClassName>
<TableSelect>show tables</TableSelect>
<Interface>SQL</Interface>
<ReplaceParameters>true</ReplaceParameters>
</DataSource>
<DataSource>
<DataProvider>Firebird.NET</DataProvider>
<CodeModule>C:\Program Files\FirebirdNETProvider1.7\FirebirdSql.Data.Firebird.dll</CodeModule>
<ClassName>FirebirdSql.Data.Firebird.FbConnection</ClassName>
<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%' ORDER BY 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>Firebird.NET 2.0</DataProvider>
<CodeModule>FirebirdSql.Data.FirebirdClient.dll</CodeModule>
<ClassName>FirebirdSql.Data.FirebirdClient.FbConnection</ClassName>
<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>SQLite</DataProvider>
<CodeModule>System.Data.SQLite.dll</CodeModule>
<ClassName>System.Data.SQLite.SQLiteConnection</ClassName>
<TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>Microsoft.Data.Sqlite</DataProvider>
<CodeModule>Microsoft.Data.Sqlite.dll</CodeModule>
<ClassName>Microsoft.Data.Sqlite.SqliteConnection</ClassName>
<TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>iAnywhere.NET</DataProvider>
<CodeModule>F:\Sybase\SQL Anywhere Studio 9\win32\iAnywhere.Data.AsaClient.dll</CodeModule>
<ClassName>iAnywhere.Data.AsaClient.AsaConnection</ClassName>
<TableSelect>
select table_name from systable
where table_type = 'BASE' and table_name not like 'SYS%'
and table_name not like 'ix_%'
and table_name not like 'ml_%'
and table_name not like 'ul_%'
and table_name not like 'rl_%'
and table_name not like 'rs_%'
and table_name not like 'migrate_%'
and table_name not like 'spt_%'
and table_name not like 'jdbc_%'
and table_name not in ('DUMMY', 'RowGenerator', 'EXCLUDEOBJECT')
</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>XML</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.XmlConnection</ClassName>
<TableSelect />
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>WebService</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.WebServiceConnection</ClassName>
<TableSelect />
<Interface>WebService</Interface>
</DataSource>
<DataSource>
<DataProvider>WebLog</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.LogConnection</ClassName>
<TableSelect />
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>Text</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.TxtConnection</ClassName>
<TableSelect />
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>iTunes</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.iTunesConnection</ClassName>
<TableSelect />
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>FileDirectory</DataProvider>
<CodeModule>DataProviders.dll</CodeModule>
<ClassName>fyiReporting.Data.FileDirConnection</ClassName>
<TableSelect />
<Interface>File</Interface>
</DataSource>
<DataSource>
<DataProvider>OracleSp</DataProvider>
<CodeModule>OracleSp.dll</CodeModule>
<ClassName>fyiReporting.OracleSp.OracleSpConnection</ClassName>
<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>PostgreSQL</DataProvider>
<CodeModule>Npgsql.dll</CodeModule>
<ClassName>Npgsql.NpgsqlConnection</ClassName>
<TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
<DataSource>
<DataProvider>PostgreSQL_Devart</DataProvider>
<CodeModule>Devart.Data.PostgreSql.dll</CodeModule>
<ClassName>Devart.Data.PostgreSql.PgSqlConnection</ClassName>
<TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>
<Interface>SQL</Interface>
</DataSource>
</DataSources>
<Compression>
<CodeModule>ICSharpCode.SharpZipLib.dll</CodeModule>
<ClassName>ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream</ClassName>
<Finish>Finish</Finish>
<Enable>true</Enable>
</Compression>
<CustomReportItems>
<CustomReportItem>
<Type>BarCode EAN-13</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeEAN13</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCode Bookland</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeBookland</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>QR Code</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.QrCode</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>ITF-14</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeITF14</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>AztecCode</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.AztecCode</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCode39</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCode39</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCode128</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCode128</ClassName>
</CustomReportItem>
<CustomReportItem>
<Type>BarCodeEAN8</Type>
<CodeModule>RdlCri.dll</CodeModule>
<ClassName>fyiReporting.CRI.BarCodeEAN8</ClassName>
</CustomReportItem>
</CustomReportItems>
</config>";
}
XmlNode xNode;
Expand Down Expand Up @@ -431,24 +547,12 @@ public static IDbConnection GetConnection(string provider, string cstring)
case "itunes":
cn = new fyiReporting.Data.iTunesConnection(cstring);
break;
#if EnableBundleLinux
// See properties -> Build -> Conditional compilation symbols
case "sqlite":
cn = new Mono.Data.Sqlite.SqliteConnection(cstring);
break;
case "postgresql":
cn = new Npgsql.NpgsqlConnection(cstring);
break;
#endif
default:
if (SqlEntries == null)
{ // if never initialized; we should init
RdlEngineConfigInit();
}



System.Console.WriteLine("Attempt to find provider");
SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry;
if (sce == null || sce.CodeModule == null)
{
Expand All @@ -458,14 +562,14 @@ public static IDbConnection GetConnection(string provider, string cstring)
}
break;
}
System.Console.WriteLine("Provider Create Instance");

object[] args = new object[] { cstring };
Assembly asm = sce.CodeModule;
object o = asm.CreateInstance(sce.ClassName, false,
object? o = asm.CreateInstance(sce.ClassName, false,
BindingFlags.CreateInstance, null, args, null, null);
if (o == null)
throw new Exception(string.Format(Strings.RdlEngineConfig_Error_UnableCreateInstance, sce.ClassName, provider));
cn = o as IDbConnection;
cn = o as IDbConnection ?? throw new InvalidCastException($"Unable to cast instance of {sce.ClassName} to IDbConnection.");
break;
}

Expand Down

0 comments on commit 5bcdad3

Please sign in to comment.