internal NetTopologySuiteTypeHandlerResolver( NpgsqlConnector connector, CoordinateSequenceFactory coordinateSequenceFactory, PrecisionModel precisionModel, Ordinates handleOrdinates, bool geographyAsDefault) { _databaseInfo = connector.DatabaseInfo; _geographyAsDefault = geographyAsDefault; var(pgGeometryType, pgGeographyType) = (PgType("geometry"), PgType("geography")); // TODO: In multiplexing, these are used concurrently... not sure they're thread-safe :( var reader = new PostGisReader(coordinateSequenceFactory, precisionModel, handleOrdinates); var writer = new PostGisWriter(); if (pgGeometryType is not null) { _geometryHandler = new NetTopologySuiteHandler(pgGeometryType, reader, writer); } if (pgGeographyType is not null) { _geographyHandler = new NetTopologySuiteHandler(pgGeographyType, reader, writer); } }
internal JsonNetTypeHandlerResolver( NpgsqlConnector connector, Dictionary <Type, string> dataClrTypeNamesDataTypeNamesByClrClrType, JsonSerializerSettings settings) { _databaseInfo = connector.DatabaseInfo; _jsonbHandler = new JsonbHandler(PgType("jsonb"), connector, settings); _jsonHandler = new JsonHandler(PgType("json"), connector, settings); _dataTypeNamesByClrType = dataClrTypeNamesDataTypeNamesByClrClrType; }
public void SetDomainName(string domain) { DomainName = domain; NpgsqlDatabaseInfo.RegisterFactory(new Npgsql.CrateDb.CrateDbDatabaseInfoFactory()); NpgsqlConnectionStringBuilder builder = new NpgsqlConnectionStringBuilder(); builder.Database = "doc"; builder.Username = "******"; builder.Password = "******"; builder.Host = DomainName; builder.Pooling = true; client = new NpgsqlConnection(builder.ToString()); client2 = new NpgsqlConnection(builder.ToString()); client.Open(); client2.Open(); }
public async Task TransactionNotSupported() { if (IsMultiplexing) { Assert.Ignore("Need to rethink/redo dummy transaction mode"); } var connString = new NpgsqlConnectionStringBuilder(ConnectionString) { ApplicationName = nameof(TransactionNotSupported) + IsMultiplexing }.ToString(); NpgsqlDatabaseInfo.RegisterFactory(new NoTransactionDatabaseInfoFactory()); try { using var conn = await OpenConnectionAsync(connString); using var tx = conn.BeginTransaction(); // Detect that we're not really in a transaction var prevTxId = conn.ExecuteScalar("SELECT txid_current()"); var nextTxId = conn.ExecuteScalar("SELECT txid_current()"); // If we're in an actual transaction, the two IDs should be the same // https://stackoverflow.com/questions/1651219/how-to-check-for-pending-operations-in-a-postgresql-transaction Assert.That(nextTxId, Is.Not.EqualTo(prevTxId)); conn.Close(); } finally { NpgsqlDatabaseInfo.ResetFactories(); } using (var conn = await OpenConnectionAsync(connString)) { NpgsqlConnection.ClearPool(conn); conn.ReloadTypes(); } // Check that everything is back to normal using (var conn = await OpenConnectionAsync(connString)) using (var tx = conn.BeginTransaction()) { var prevTxId = conn.ExecuteScalar("SELECT txid_current()"); var nextTxId = conn.ExecuteScalar("SELECT txid_current()"); Assert.That(nextTxId, Is.EqualTo(prevTxId)); } }
/// <summary> /// Initializes the ModuleClient and sets up the callback to receive /// messages containing temperature information /// </summary> static async Task Init() { NpgsqlDatabaseInfo.RegisterFactory(new CrateDbDatabaseInfoFactory()); MqttTransportSettings mqttSetting = new MqttTransportSettings(TransportType.Mqtt_Tcp_Only); ITransportSettings[] settings = { mqttSetting }; // Open a connection to the Edge runtime ModuleClient ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings); await ioTHubModuleClient.OpenAsync(); Console.WriteLine("IoT Hub module client initialized."); // Register callback to be called when a message is received by the module await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage, ioTHubModuleClient); }
internal NodaTimeTypeHandlerResolver(NpgsqlConnector connector) { _databaseInfo = connector.DatabaseInfo; _timestampHandler = LegacyTimestampBehavior ? new LegacyTimestampHandler(PgType("timestamp without time zone")) : new TimestampHandler(PgType("timestamp without time zone")); _timestampTzHandler = LegacyTimestampBehavior ? new LegacyTimestampTzHandler(PgType("timestamp with time zone")) : new TimestampTzHandler(PgType("timestamp with time zone")); _dateHandler = new DateHandler(PgType("date")); _timeHandler = new TimeHandler(PgType("time without time zone")); _timeTzHandler = new TimeTzHandler(PgType("time with time zone")); _intervalHandler = new IntervalHandler(PgType("interval")); // Note that the range handlers are absent on some pseudo-PostgreSQL databases (e.g. CockroachDB), and multirange types // were only introduced in PG14. So we resolve these lazily. _arrayNullabilityMode = connector.Settings.ArrayNullabilityMode; }
NpgsqlDbColumn LoadColumnDefinition(NpgsqlDataReader reader, NpgsqlDatabaseInfo databaseInfo) { // Note: we don't set ColumnName and BaseColumnName. These should always contain the // column alias rather than the table column name (i.e. in case of "SELECT foo AS foo_alias"). // It will be set later. var column = new NpgsqlDbColumn { AllowDBNull = !reader.GetBoolean(reader.GetOrdinal("attnotnull")), BaseCatalogName = _connection.Database, BaseSchemaName = reader.GetString(reader.GetOrdinal("nspname")), BaseServerName = _connection.Host, BaseTableName = reader.GetString(reader.GetOrdinal("relname")), ColumnOrdinal = reader.GetInt32(reader.GetOrdinal("attnum")) - 1, ColumnAttributeNumber = (short)(reader.GetInt16(reader.GetOrdinal("attnum")) - 1), IsKey = reader.GetBoolean(reader.GetOrdinal("isprimarykey")), IsReadOnly = !reader.GetBoolean(reader.GetOrdinal("is_updatable")), IsUnique = reader.GetBoolean(reader.GetOrdinal("isunique")), TableOID = reader.GetFieldValue <uint>(reader.GetOrdinal("attrelid")), TypeOID = reader.GetFieldValue <uint>(reader.GetOrdinal("typoid")) }; column.PostgresType = databaseInfo.ByOID[column.TypeOID]; column.DataTypeName = column.PostgresType.DisplayName; // Facets do not get included var defaultValueOrdinal = reader.GetOrdinal("default"); column.DefaultValue = reader.IsDBNull(defaultValueOrdinal) ? null : reader.GetString(defaultValueOrdinal); column.IsAutoIncrement = reader.GetBoolean(reader.GetOrdinal("isidentity")) || column.DefaultValue != null && column.DefaultValue.StartsWith("nextval("); ColumnPostConfig(column, reader.GetInt32(reader.GetOrdinal("typmod"))); return(column); }
NpgsqlDbColumn LoadColumnDefinition(NpgsqlDataReader reader, NpgsqlDatabaseInfo databaseInfo, bool oldQueryMode) { // We don't set ColumnName here. It should always contain the column alias rather than // the table column name (i.e. in case of "SELECT foo AS foo_alias"). It will be set later. var column = new NpgsqlDbColumn { AllowDBNull = !reader.GetBoolean(reader.GetOrdinal("attnotnull")), BaseCatalogName = _connection.Database !, BaseSchemaName = reader.GetString(reader.GetOrdinal("nspname")), BaseServerName = _connection.Host !, BaseTableName = reader.GetString(reader.GetOrdinal("relname")), BaseColumnName = reader.GetString(reader.GetOrdinal("attname")), ColumnAttributeNumber = reader.GetInt16(reader.GetOrdinal("attnum")), IsKey = reader.GetBoolean(reader.GetOrdinal("isprimarykey")), IsReadOnly = !reader.GetBoolean(reader.GetOrdinal("is_updatable")), IsUnique = reader.GetBoolean(reader.GetOrdinal("isunique")), TableOID = reader.GetFieldValue <uint>(reader.GetOrdinal("attrelid")), TypeOID = reader.GetFieldValue <uint>(reader.GetOrdinal("typoid")) }; column.PostgresType = databaseInfo.ByOID[column.TypeOID]; column.DataTypeName = column.PostgresType.DisplayName; // Facets do not get included var defaultValueOrdinal = reader.GetOrdinal("default"); column.DefaultValue = reader.IsDBNull(defaultValueOrdinal) ? null : reader.GetString(defaultValueOrdinal); column.IsAutoIncrement = !oldQueryMode && reader.GetBoolean(reader.GetOrdinal("isidentity")) || column.DefaultValue != null && column.DefaultValue.StartsWith("nextval("); ColumnPostConfig(column, reader.GetInt32(reader.GetOrdinal("typmod"))); return(column); } NpgsqlDbColumn SetUpNonColumnField(FieldDescription field) { // ColumnName and BaseColumnName will be set later var column = new NpgsqlDbColumn { BaseCatalogName = _connection.Database !, BaseServerName = _connection.Host !, IsReadOnly = true, DataTypeName = field.PostgresType.DisplayName, TypeOID = field.TypeOID, TableOID = field.TableOID, ColumnAttributeNumber = field.ColumnAttributeNumber, PostgresType = field.PostgresType }; ColumnPostConfig(column, field.TypeModifier); return(column); } /// <summary> /// Performs some post-setup configuration that's common to both table columns and non-columns. /// </summary> void ColumnPostConfig(NpgsqlDbColumn column, int typeModifier) { var typeMapper = _connection.Connector !.TypeMapper; column.NpgsqlDbType = typeMapper.GetTypeInfoByOid(column.TypeOID).npgsqlDbType; column.DataType = typeMapper.TryGetByOID(column.TypeOID, out var handler) ? handler.GetFieldType() : null; if (column.DataType != null) { column.IsLong = handler is ByteaHandler; if (handler is ICompositeHandler) { column.UdtAssemblyQualifiedName = column.DataType.AssemblyQualifiedName; } } var facets = column.PostgresType.GetFacets(typeModifier); if (facets.Size != null) { column.ColumnSize = facets.Size; } if (facets.Precision != null) { column.NumericPrecision = facets.Precision; } if (facets.Scale != null) { column.NumericScale = facets.Scale; } } } }
internal void Bind(NpgsqlDatabaseInfo databaseInfo) { DatabaseInfo = databaseInfo; BindTypes(); }
protected void RegisterCrateDbDatabaseInfoFactory() { NpgsqlDatabaseInfo.RegisterFactory(new CrateDbDatabaseInfoFactory()); }