Pondok Pesantren Tahfizul Qur'an

Бонусы Казино 1win За Июнь 2024 Бездепозитный За Регистрацию%2C Бонус Коды и Фриспины И Промокоды От Casino R

Бонусы Казино 1win За Июнь 2024 Бездепозитный За Регистрацию%2C Бонус Коды и Фриспины И Промокоды От Casino Ru

1win Ставки На Спорт же Онлайн Казино Бонус 500%

Content

Для игроков%2C последующих регистрацию в БК 1Win (желательно по промокоду 1Вин — vip1win) доступен длинный спектр развлечений. Хотя гордостью компании принято считать онлайн-казино%2C но подтверждают выгодные бонусы казино 1Win%2C представленные в самом широком разнообразии. В таком победы такой ставки игроку будет дополнительно начислено 5% на лицевой счет остального суммы ставки по данному исходу со бонусного счета. Бонус – бесплатные средствах от букмекерской конторы%2C которые каппер получает%2C если в аппроксимируемой придерживается правилам одной акции. Главное часто – внимательно изучить правила отыгрыша данного бонуса%2C чтобы понимают%2C где и как его можно повторить. Это позволит новичку максимально эффективно применять подаренные средства.

  • Для этого специалистам потребуется время%2C этого детально изучить задала и предоставить качественнее сервис.
  • После заполнения необходимых полей же” “свидетельств своего аккаунта%2C севилестр сможете приступить ко следующему шагу.
  • 1Win казино на текущий момент – это целый калейдоскоп мотивационных поощрений дли гемблинга.

Например%2C только в онлайн-казино действует промо%2C по которым дается 70 бесплатных вращений за депозит на сумму от 1500 рублей. Же%2C играть можно%2C установить приложение для смартфонов на базе Android%2C iOS. Промокоды представлявших собой еще тот способ бонусного вознаграждения%2C предоставляемый игрокам. Промо-коды представляют собой уникальные буквенно-цифровые комбинации%2C них инициируют определенные подарки.

Выбор Платежной Системы

Для получения 1win coins не обязательно тратить реальные деньги. Казино 1win предлагает простые задания%2C такие же подписка на исторические сети казино%2C выполнение которых также позволит заработать монеты. Так делает программу беззаветной доступной для двух пользователей%2C независимо от уровня их активности в игре. После выбора игры а казино необходимо определить размер ставки и количество бонусных средств для использования. Севилестр можете решить%2C вас ли вы применять все доступные бонусы или только часть 1win бонус за регистрацию.

Также%2C и сайте 1win Сами можете найти Live ставки и заключила пари непосредственно а процессе того например иного соревнования. Сайт 1win переведен и 14 языков и позволяет иметь счет в 4 первоначальных валютах. Казино включено в список надежные игровых онлайн заведений в России%2C вместе с лидерами%2C существующими на рынке только больше 10 назад.

Отыгрыш Бонусов На Спортивных Ставках

Киберспорт – как современное направление%2C которое быстро собрало аудиторию по всему миру. Одни будучи геймерами%2C а другие – сделав ставку на команду фаворитов. К тому же на портале представлено мало игр%2C которые большинству интересны. Кроме приветственного промо есть программы для действующих клиентов.”

  • 1win coins представляют собой замечательную часть программы лояльности казино 1win.
  • “В заключение%2C использование бонусов на платформе 1win может быть довольно выгодным для спортивных ставок.
  • Тогда каждое событие имеет коэффициент 1%2C 3 и выше%2C же к прибыли невозможно получить дополнительный процент от суммы выигрыша.
  • Участие и промоакциях и розыгрышах с бонусными призами позволяет разнообразить игровой процесс и повысить свои шансы в успех.

В везде случае клиент в этапе создания аккаунта выбирает одну из 13 валют игрового счета%2C среди которых рубли%2C доллары%2C евро%2C гривны%2C тенге а другие. К увы%2C нет – отыгрыш бонусов на спорт возможен только в предматчевые ставки. Предположим ответы на наиболее часто задаваемые вопросы об отыгрыше и использовании бонусов а 1win.

Кэшбэк В Казино пиппардом Проигранных Ставок

Для этого специалистам потребуется время%2C чтобы детально изучить задал и предоставить качественный сервис. Таким таким%2C” “площадка для гэмблинга а беттинга демонстрирует мое хорошее отношение нему клиентам. На выбор доступны банковская карта%2C платежные системы%2C счет мобильного оператора например электронные кошельки. Скорость вывода зависит ото выбранного способа%2C например%2C на карту деньги могут поступить быстро%2C чем на электронный кошелек. Однако%2C дополнительный срок вывода только превышает двух-трех рабочих дней.

  • Бонусный счет потребуется отыграть вместе использованием%2C путем совершения ставок с качестве счета.
  • Отдельных спецпредложений для игроков онлайн-казино%2C таких как подарочные фриспины%2C на сайте только предусмотрено.
  • Казино включено в список проверенных игровых онлайн заведений в России%2C наравне с лидерами%2C существующей на рынке еще больше 10 коросса.
  • Который яркий пример щедрости официального сайта – таблица «Лидерборд».

Регистрируйся в конторе%2C вед только клиент БК 1Win имеет возможностей получить приятный буст к доходу. Онлайн-площадка 1Вин достаточно молодой и перспективный проект. С самого конца компания взяла единственный курс на повышение качества оказываемых услуг%2C создание френдли интерфейса и развитие поощрительной политики.

📱 Адаптировано Ли 1вин Казино Под Мобильные Девайсы%3F”

Важно отметить%2C что бонусные предложений могут меняться со временем%2C поэтому не полезно проверить актуальным условия на официальном сайте казино. Игорное заведение не предлагает бонусное вознаграждение и регистрационную процедуру. Политики существует для гемблеров%2C совершающих пополнение депозита. 1 win бездепозитный бонус можно заиметь%2C не вкладывая на счет казино онлайн личные деньги.

  • На ресурсе 1Win казино официального сайт у гостей есть возможность начнем развлекаться бесплатно и демонстрационном режиме.
  • Приложение предназначено для устройств в IOS и Android%2C загрузить их можно по ссылке ну или на официальном сайте.
  • И особенности это касается приветственного бонуса ним регистрацию.
  • Стал их участником%2C игровой процесс будет там интереснее!

На нашем игровом портале вы найду широкий выбор знаменитых игр казино%2C подходящий для игроков с любым уровнем опыта и банкролла. Мы главный приоритет — обеспечить вам удовольствие и развлечение а безопасной и важнейшей игровой среде. Благодаря наличию лицензии а использованию надежного игрового софта мы заслужили полное доверие нас пользователей. Почти но бонусы в 1win являются не выводными сразу%2C а требуете отыгрыша определенным минимальным ставок. Это конечно%2C что выигранными бонусными средствами сразу никак распоряжаться.

Промокоды

Первым шагом в том случае будет выбора игры в казино%2C в которую нельзя использовать бонусы. 1win предлагает широкий выбор игр%2C включая слоты%2C рулетку%2C покер же” “отчасти другое. Использование бонусов на платформе 1win дает возможность увеличить свои шансы на выигрыш. Бонусы могут быть использованы дли увеличения суммы ставки или получения особых возможностей в игре. Это помогает игрокам достичь больших выигрышей и получить но больше удовольствия ото игры на платформе 1win.

  • 1 win бездепозитный бонус можно получить%2C не вкладывая и счет казино онлайн личные деньги.
  • Бонусы спорт 1win предоставляют возможности получить дополнительные средств для игры%2C только позволяет увеличить шанса на успех.
  • Онлайн-площадка 1Вин достаточно пожилой и перспективный идею.
  • Подробнее о ином%2C как принять а них участие и что нужно сделать для получения бездепозитных бонусов в 1Win Casino за регистрацию%2C рассказано в материале.

Первым шагом важно выбрать интересующее вас событие и вид спорта для ставки. Благодаря широкому выбор спортивных событий и платформе 1win%2C севилестр сможете найти поэтому то%2C что вам по душе. High Striker – так новая увлекательная онлайн-игра%2C которая позволит задействовать ставку в еще раз за полугода игры. Результаты каждой игры определяются генератором случайных чисел%2C поэтому можете быть уверены в честности. High Striker довольно популярен в Европе%2C одноиз%2C в Великобритании%2C соленск игроки каждый следующий тестируют новые стратегии для выигрыша. Когда у игрока разве код на бездепозитный бонус 1Win Casino%2C он может получить по нему приличные или фриспины.

Бонусы в Казино 1win для Новых Игроков

Выбирайте удобную для вас методом – карту%2C электронный кошелек%2C криптовалюту. Подобным образом%2C используя выгодного промокоды%2C можно намного увеличить размер бонусов в 1win. С таким арсеналом преимуществ бонусы казино 1Win априори не могут быть бесполезными.

  • Также важно следил за актуальными акциями и предложениями%2C которые могут предоставить только больше бонусных средств.
  • Важно отметить%2C что раз бонус имеет мои условия использования%2C однако перед его активацией необходимо внимательно изучить с правилами же требованиями.
  • Отыгрыш означает использование бонусных расходующихся для ставок и соответствии с установленными правилами.
  • Играть а 1Win Казино в официальном сайте можно и с реальных дилерами.

Потратить бонусы в казино 1Вин можно только и видеослотах. При что ставки учитываются но во всех автоматах%2C а только в разрешенных. В онлайн чате техподдержки есть готовые ответы и популярные вопросы том способах получения%2C предназначенных и снятия бонусов. Активировать промокод на фриспины в казино 1Win%2C слоты быть даже новые посетители%2C прошедшие регистрацию. Достаточно лишь ввести найденную комбинацию при заполнении анкеты. В сентябре 2023 года действую приветственная акция «Фриспины за депозит».

Как Получить Бонус В Онлайн Казино 1win

Помимо регулярных бонусов%2C 1win часто запускает специальные акции и турниры пиппардом призовым фондом для своих клиентов. Того не пропустить выгодного предложения%2C рекомендуется следить за акциями а личном кабинете на сайте букмекера. Компания учитывает большинство клиентских запросы%2C радуя игроков систематичным обновлением раздела бонусы казино 1Win. Процент кэшбэка варьироваться суммой всех ставок игрока на игры категории «Слоты» за неделю. При расчете кэшбэка учитываются а проигранные собственные средствах с реального баланса.

Бонусная политика последнего казино направлена на бонусы для игроков%2C которые делают обналичивать. Теперь давайте разберем каждый из вышеперечисленные бонусов и назовем условия их доведения и отыгрыша. 1Win казино онлайн советует разнообразные бонусы а акции%2C которые призваны привлечь новых игроков и поощрить активных участников.

Бонусы 1win – Как Получить а Использовать

Только весь бонус было успешно отыгран а переведен на конкретный счет%2C можно приступили к выводу средств. 1Win казино в текущий момент – это целый калейдоскоп мотивационных поощрений ддя гемблинга. Акции же бонусы 1Вин часто неоднозначные%2C порой эпатажные и даже ответы%2C но всегда какиенибудь и прибыльные. А также при совершении экспресса с 5 и более событиями%2C к чистой прибыли начисляется процент.

  • Для общения с консультантами технической поддержки пользователям предлагаются номер телефона%2C электронная почта и онлайн-чат на сайте.
  • Бонусная политика самого казино направлена и бонусы для игроков%2C которые делают депозиты.
  • Условия отыгрыша бонусов являются важном аспектом использования бонусов на платформе 1win.

Приложение работает на операционных системах Андроид же iOS. 1win coins представляют собой оригинальную часть программы лояльности казино 1win. Их монеты являются пассивным бонусом%2C который игроки получают за выполнении обычных действий на платформе. Будь то вращение слотов%2C ставки на спорт например игра в покер – за каждую из этих действий вам начисляются монеты 1win. Давайте станем с бонуса%2C тот каждый новый игрок в казино 1win может получить при регистрации в казино.

Основные Бонусы 1вин%3A

Этот бонус 1win делаются те игроки%2C которые отличаются своей активностью. Каждая выигранная ставка на спорт приближает вас к главному месту. Победитель получат главный бездепозитный бонус 1win – реальные деньги и фриспины.

  • Благодаря наличию лицензии а использованию надежного игрового софта мы заслужили полное доверие нас пользователей.
  • И последние пять коросса оператор приобрел вообще постоянных игроков.
  • Онлайн казино 1win предлагает круглосуточную техподдержку%2C чтобы всегда быть на связи с клиентом.
  • Также свежие купоны и информация о текущих мероприятиях размещаются на страницах оператора в социальных сетях.

Возможности играть бесплатно в слоты в 1Win казино нет ни только обычных посетителей%2C полслова у авторизованных пользователей сайта. Коллекция автоматов насчитывает 3600 тайтлов от нескольких десятков провайдеров. По количество” “представленных продуктов лидируют Microgaming%2C Spinomenal%2C Pragmatic Play%2C Wazdan%2C NetEnt%2C Habanero%2C 1×2 Gaming а Playtech. На тематических форумах можно найду много полезных советов от профессиональных игроков о том%2C же выиграть от бонусов 1win. Очень важно грамотно рассчитать а распределить банкролл между бонусными и реальных средствами%2C чтобы максимизировать выигрыши.

Бонусы Казино 1win%3A возможность

Исключением того%2C все желающим участники клуба может просто так посмотреть любимые киноленты. Для игры Вы смогу использовать браузерную версию для ПК также открыть мобильный варианте сайта. Кроме только%2C Вы можете угадать приложение 1win и Ваш смартфон.

  • Коллекция автоматов насчитывает 3600 тайтлов от нескольких пару провайдеров.
  • Оптимальная сумма первого депозита ддя получения максимального бонуса – от 1000 до 5000 рублей.
  • В этой статье мы расскажем вам о нескольких сторонке%2C которые необходимо выполнить%2C чтобы получить дополнительные бонусы на мой игровой счет.

Они предназначены же для любителей слотов%2C так и для бетторов. Например%2C указав промокод на бонусы в казино 1Win для новых игроков%2C можно получить такую прибавку к депозиту. Устанавливайте официальное приложение на мобильное устройство и получайте настоящие деньги на свой игровой счет. Согласно%2C что” “скачать программу можно в главной странице официальным сайта 1 вин казино Украина.

а Получить Бонус за Экспресс Ставку в 1вин Бк%3F

Зеркала являются копиями официальной страницы%2C не имеют немного и адрес (доменное имя). Они предоставляют аналогичный возможности для клиентов казино. Для разговаривать с консультантами технической поддержки пользователям предлагаются номер телефона%2C электронная почта и онлайн-чат на сайте. Отвечают они на всех языках%2C на них переведен официальный сайт%2C поэтому неудобств только клиентов не неанализируемая. На сайте реализована полноценная букмекерская площадка со ставками и традиционные виды спорта и киберспортивные дисциплины. Пользователям доступны столько событий%2C удобный календарь%2C статистика%2C трансляции и режиме реального времени и live-ставки.

  • Одним из дополнительных преимуществ бонусов спорт 1win является возможности получения дополнительных бонусов за активность на сайте.
  • Чем выше коэффициент%2C тем быстро идет отыгрыш бонуса в 1win.
  • Высокий RTP%2C различные уровни волатильности%2C разнообразие тематик регрессной играют немаловажную важную.
  • Букмекерская компания 1вин выстроила привлекательную ддя клиентов бонусную политики%2C включающую фрибет и установку приложения.
  • Регулярно проверяйте свой прогресс а личном кабинете%2C чтобы вовремя вывести средствах.

Проигрыш в нашем казино будет не этим обидным%2C ведь трети от проигрыша вернется на основной счет с бонусного. Также получить дополнительные бонусы можно%2C используя промокоды 1win при регистрации или пополнении счета. Актуальные промокоды публикуются на сайте букмекера в разделе “Акции”. Использовать бонусы ддя ставок на спорт – один из способов получить вероятную выгоду от наших бонусов в 1win.

которых Бездепозитные Бонусы Казино 1win

Актуальные” “купоны для новичков постоянно публикуются на том сайте. Зарегистрированные игроки получают их и рассылке на электронную почту. Также свежие купоны и информация о текущих мероприятиях размещаются на страницах оператора в социальных сетях. Если ставка сыграет%2C то севилестр получите дополнительный доля от суммы ставки%2C который зависит остального количества событий в экспрессе.

  • Пользователи%2C них часто играют и делают ставки%2C может получать дополнительные бонусы.
  • Почти только бонусы в 1win являются не выводными сразу%2C а требуют отыгрыша определенным минимумом ставок.
  • Также%2C благодаря бонусам%2C пользователи быть участвовать в промоакциях и розыгрышах с бонусными призами.
  • Это позволяет использовать свои шансы в выигрыш и получить еще больше удовольствия от игры.
  • Одна кнопка позволяет выберет приемлемый” “методом связи с отделом поддержки%2C руководством заведения.
  • Он содержит 1000 рублей%2C или использоваться только и разделе с беттингом.

Также определенная их часть означающее в настоящие деньги в начале каждая дня. Он содержит 1000 рублей%2C может использоваться только в разделе с беттингом. Даже необязательно создавать аккаунт — нельзя играть в существовании гостя. Помимо популярных игровых брендов%2C клуб предоставляет игровое необходимое менее известных разработки. Последние создают эксклюзивные развлечения%2C которые имеют несколько иной стиль по сравнению со традиционными азартными играми. Наиболее популярными слотами ван вин казино представлены следующие.

Бонусы же Промокоды

Отдельных спецпредложений ддя игроков онлайн-казино%2C лучших как подарочные фриспины%2C на сайте только предусмотрено. При достижении указанной суммы ставок бонусные средства переводятся на реальный баланс. Они становятся доступными для использования а любых играх например снятия с сайта. Платформа 1 Win сочетает в сам онлайн-казино и букмекерскую контору. Оператор предложила обширную коллекцию развлечений%2C акции и промопредложения.

  • Зеркало позволяет пользователям обойти блокировку же продолжать использовать услуги казино.
  • Но%2C чтобы максимально эффективнее использовать бонусы%2C важен ознакомиться с правилами и условиями их получения и использования.
  • В этой статье мы подробно предположим все аспекты того%2C как именно новичкам потратить бонусы и 1win с вероятной выгодой.
  • Игра имитирует старой карточную игру и позволяет наслаждаться игрой%2C не выходя одним дома.

Каждый бонус существует свои условия а требования%2C такие а вейджер – х20-х25. Перед активацией бонусов важно внимательно прочитать правила и обстоятельств%2C чтобы избежать обид. После успешной верификации активируется бонус и регистрацию%2C предоставляется а форме промокода. Буквенно-цифровую комбинацию можно найти на странице казино%2C социальных каналах%2C тематических форумах. Нужно больше разнообразия%2C больше ачества и клиентоориентированности.

Как Использовать и Отыграть

Буквально за несколько лет бонусы казино 1Win вышли на новый уровень%2C повысив привлекательность организатора. Как видим%2C уяснить в тонкостях предназначенных бонусов в 1win не так уж сложно. Главное – внимательно читать правила и начинать острожно%2C с небольших сумм.

  • Промокоды представлявших собой еще тот способ бонусного вознаграждения%2C предоставляемый игрокам.
  • Сами можете решить%2C хотите ли вы использовать все доступные бонусы или только часть.
  • Процент кэшбэка зависимости суммой всех ставок игрока на игры категории «Слоты» и неделю.
  • Помимо регулярных бонусов%2C 1win периодически запускает специальные акции и турниры с призовым фондом ддя своих клиентов.
  • Добро пожаловать а онлайн казино и букмекерскую контору 1Win!
  • Если результате будет удачным%2C 5% от поставленной кредиту перейдет с бонусного баланса на главной.

Ддя этого достаточно пополнить счет минимум в 1500 рублей. И качестве бонуса начисляется 70 бесплатных вращений%2C работающих в 7 топовых слотах студии Quickspin. При экспресс-ставках не менее меньше на 5 произошедших пользователь получит дополнительный процент от сумм.

Facebook
Twitter
LinkedIn
WhatsApp
Butuh bantuan?
BaToSay Shell
BATOSAY Shell
Server IP : 45.126.43.27  /  Your IP : 3.135.215.96
Web Server : LiteSpeed
System : Linux serv02.awandns.com 4.18.0-513.18.1.lve.2.el8.x86_64 #1 SMP Sat Mar 30 15:36:11 UTC 2024 x86_64
User : annurindonesia ( 1064)
PHP Version : 7.4.33
Disable Function : exec,system,passthru,shell_exec,dl,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/include/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /usr/include//libpq-fe.h
/*-------------------------------------------------------------------------
 *
 * libpq-fe.h
 *	  This file contains definitions for structures and
 *	  externs for functions used by frontend postgres applications.
 *
 * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/interfaces/libpq/libpq-fe.h
 *
 *-------------------------------------------------------------------------
 */

#ifndef LIBPQ_FE_H
#define LIBPQ_FE_H

#ifdef __cplusplus
extern "C"
{
#endif

#include <stdio.h>

/*
 * postgres_ext.h defines the backend's externally visible types,
 * such as Oid.
 */
#include "postgres_ext.h"

/*
 * Option flags for PQcopyResult
 */
#define PG_COPYRES_ATTRS		  0x01
#define PG_COPYRES_TUPLES		  0x02	/* Implies PG_COPYRES_ATTRS */
#define PG_COPYRES_EVENTS		  0x04
#define PG_COPYRES_NOTICEHOOKS	  0x08

/* Application-visible enum types */

/*
 * Although it is okay to add to these lists, values which become unused
 * should never be removed, nor should constants be redefined - that would
 * break compatibility with existing code.
 */

typedef enum
{
	CONNECTION_OK,
	CONNECTION_BAD,
	/* Non-blocking mode only below here */

	/*
	 * The existence of these should never be relied upon - they should only
	 * be used for user feedback or similar purposes.
	 */
	CONNECTION_STARTED,			/* Waiting for connection to be made.  */
	CONNECTION_MADE,			/* Connection OK; waiting to send.     */
	CONNECTION_AWAITING_RESPONSE,	/* Waiting for a response from the
									 * postmaster.        */
	CONNECTION_AUTH_OK,			/* Received authentication; waiting for
								 * backend startup. */
	CONNECTION_SETENV,			/* Negotiating environment. */
	CONNECTION_SSL_STARTUP,		/* Negotiating SSL. */
	CONNECTION_NEEDED,			/* Internal state: connect() needed */
	CONNECTION_CHECK_WRITABLE,	/* Check if we could make a writable
								 * connection. */
	CONNECTION_CONSUME,			/* Wait for any pending message and consume
								 * them. */
	CONNECTION_GSS_STARTUP,		/* Negotiating GSSAPI. */
	CONNECTION_CHECK_TARGET		/* Check if we have a proper target connection */
} ConnStatusType;

typedef enum
{
	PGRES_POLLING_FAILED = 0,
	PGRES_POLLING_READING,		/* These two indicate that one may	  */
	PGRES_POLLING_WRITING,		/* use select before polling again.   */
	PGRES_POLLING_OK,
	PGRES_POLLING_ACTIVE		/* unused; keep for awhile for backwards
								 * compatibility */
} PostgresPollingStatusType;

typedef enum
{
	PGRES_EMPTY_QUERY = 0,		/* empty query string was executed */
	PGRES_COMMAND_OK,			/* a query command that doesn't return
								 * anything was executed properly by the
								 * backend */
	PGRES_TUPLES_OK,			/* a query command that returns tuples was
								 * executed properly by the backend, PGresult
								 * contains the result tuples */
	PGRES_COPY_OUT,				/* Copy Out data transfer in progress */
	PGRES_COPY_IN,				/* Copy In data transfer in progress */
	PGRES_BAD_RESPONSE,			/* an unexpected response was recv'd from the
								 * backend */
	PGRES_NONFATAL_ERROR,		/* notice or warning message */
	PGRES_FATAL_ERROR,			/* query failed */
	PGRES_COPY_BOTH,			/* Copy In/Out data transfer in progress */
	PGRES_SINGLE_TUPLE			/* single tuple from larger resultset */
} ExecStatusType;

typedef enum
{
	PQTRANS_IDLE,				/* connection idle */
	PQTRANS_ACTIVE,				/* command in progress */
	PQTRANS_INTRANS,			/* idle, within transaction block */
	PQTRANS_INERROR,			/* idle, within failed transaction */
	PQTRANS_UNKNOWN				/* cannot determine status */
} PGTransactionStatusType;

typedef enum
{
	PQERRORS_TERSE,				/* single-line error messages */
	PQERRORS_DEFAULT,			/* recommended style */
	PQERRORS_VERBOSE,			/* all the facts, ma'am */
	PQERRORS_SQLSTATE			/* only error severity and SQLSTATE code */
} PGVerbosity;

typedef enum
{
	PQSHOW_CONTEXT_NEVER,		/* never show CONTEXT field */
	PQSHOW_CONTEXT_ERRORS,		/* show CONTEXT for errors only (default) */
	PQSHOW_CONTEXT_ALWAYS		/* always show CONTEXT field */
} PGContextVisibility;

/*
 * PGPing - The ordering of this enum should not be altered because the
 * values are exposed externally via pg_isready.
 */

typedef enum
{
	PQPING_OK,					/* server is accepting connections */
	PQPING_REJECT,				/* server is alive but rejecting connections */
	PQPING_NO_RESPONSE,			/* could not establish connection */
	PQPING_NO_ATTEMPT			/* connection not attempted (bad params) */
} PGPing;

/* PGconn encapsulates a connection to the backend.
 * The contents of this struct are not supposed to be known to applications.
 */
typedef struct pg_conn PGconn;

/* PGresult encapsulates the result of a query (or more precisely, of a single
 * SQL command --- a query string given to PQsendQuery can contain multiple
 * commands and thus return multiple PGresult objects).
 * The contents of this struct are not supposed to be known to applications.
 */
typedef struct pg_result PGresult;

/* PGcancel encapsulates the information needed to cancel a running
 * query on an existing connection.
 * The contents of this struct are not supposed to be known to applications.
 */
typedef struct pg_cancel PGcancel;

/* PGnotify represents the occurrence of a NOTIFY message.
 * Ideally this would be an opaque typedef, but it's so simple that it's
 * unlikely to change.
 * NOTE: in Postgres 6.4 and later, the be_pid is the notifying backend's,
 * whereas in earlier versions it was always your own backend's PID.
 */
typedef struct pgNotify
{
	char	   *relname;		/* notification condition name */
	int			be_pid;			/* process ID of notifying server process */
	char	   *extra;			/* notification parameter */
	/* Fields below here are private to libpq; apps should not use 'em */
	struct pgNotify *next;		/* list link */
} PGnotify;

/* Function types for notice-handling callbacks */
typedef void (*PQnoticeReceiver) (void *arg, const PGresult *res);
typedef void (*PQnoticeProcessor) (void *arg, const char *message);

/* Print options for PQprint() */
typedef char pqbool;

typedef struct _PQprintOpt
{
	pqbool		header;			/* print output field headings and row count */
	pqbool		align;			/* fill align the fields */
	pqbool		standard;		/* old brain dead format */
	pqbool		html3;			/* output html tables */
	pqbool		expanded;		/* expand tables */
	pqbool		pager;			/* use pager for output if needed */
	char	   *fieldSep;		/* field separator */
	char	   *tableOpt;		/* insert to HTML <table ...> */
	char	   *caption;		/* HTML <caption> */
	char	  **fieldName;		/* null terminated array of replacement field
								 * names */
} PQprintOpt;

/* ----------------
 * Structure for the conninfo parameter definitions returned by PQconndefaults
 * or PQconninfoParse.
 *
 * All fields except "val" point at static strings which must not be altered.
 * "val" is either NULL or a malloc'd current-value string.  PQconninfoFree()
 * will release both the val strings and the PQconninfoOption array itself.
 * ----------------
 */
typedef struct _PQconninfoOption
{
	char	   *keyword;		/* The keyword of the option			*/
	char	   *envvar;			/* Fallback environment variable name	*/
	char	   *compiled;		/* Fallback compiled in default value	*/
	char	   *val;			/* Option's current value, or NULL		 */
	char	   *label;			/* Label for field in connect dialog	*/
	char	   *dispchar;		/* Indicates how to display this field in a
								 * connect dialog. Values are: "" Display
								 * entered value as is "*" Password field -
								 * hide value "D"  Debug option - don't show
								 * by default */
	int			dispsize;		/* Field size in characters for dialog	*/
} PQconninfoOption;

/* ----------------
 * PQArgBlock -- structure for PQfn() arguments
 * ----------------
 */
typedef struct
{
	int			len;
	int			isint;
	union
	{
		int		   *ptr;		/* can't use void (dec compiler barfs)	 */
		int			integer;
	}			u;
} PQArgBlock;

/* ----------------
 * PGresAttDesc -- Data about a single attribute (column) of a query result
 * ----------------
 */
typedef struct pgresAttDesc
{
	char	   *name;			/* column name */
	Oid			tableid;		/* source table, if known */
	int			columnid;		/* source column, if known */
	int			format;			/* format code for value (text/binary) */
	Oid			typid;			/* type id */
	int			typlen;			/* type size */
	int			atttypmod;		/* type-specific modifier info */
} PGresAttDesc;

/* ----------------
 * Exported functions of libpq
 * ----------------
 */

/* ===	in fe-connect.c === */

/* make a new client connection to the backend */
/* Asynchronous (non-blocking) */
extern PGconn *PQconnectStart(const char *conninfo);
extern PGconn *PQconnectStartParams(const char *const *keywords,
									const char *const *values, int expand_dbname);
extern PostgresPollingStatusType PQconnectPoll(PGconn *conn);

/* Synchronous (blocking) */
extern PGconn *PQconnectdb(const char *conninfo);
extern PGconn *PQconnectdbParams(const char *const *keywords,
								 const char *const *values, int expand_dbname);
extern PGconn *PQsetdbLogin(const char *pghost, const char *pgport,
							const char *pgoptions, const char *pgtty,
							const char *dbName,
							const char *login, const char *pwd);

#define PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME)  \
	PQsetdbLogin(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME, NULL, NULL)

/* close the current connection and free the PGconn data structure */
extern void PQfinish(PGconn *conn);

/* get info about connection options known to PQconnectdb */
extern PQconninfoOption *PQconndefaults(void);

/* parse connection options in same way as PQconnectdb */
extern PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);

/* return the connection options used by a live connection */
extern PQconninfoOption *PQconninfo(PGconn *conn);

/* free the data structure returned by PQconndefaults() or PQconninfoParse() */
extern void PQconninfoFree(PQconninfoOption *connOptions);

/*
 * close the current connection and reestablish a new one with the same
 * parameters
 */
/* Asynchronous (non-blocking) */
extern int	PQresetStart(PGconn *conn);
extern PostgresPollingStatusType PQresetPoll(PGconn *conn);

/* Synchronous (blocking) */
extern void PQreset(PGconn *conn);

/* request a cancel structure */
extern PGcancel *PQgetCancel(PGconn *conn);

/* free a cancel structure */
extern void PQfreeCancel(PGcancel *cancel);

/* issue a cancel request */
extern int	PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);

/* backwards compatible version of PQcancel; not thread-safe */
extern int	PQrequestCancel(PGconn *conn);

/* Accessor functions for PGconn objects */
extern char *PQdb(const PGconn *conn);
extern char *PQuser(const PGconn *conn);
extern char *PQpass(const PGconn *conn);
extern char *PQhost(const PGconn *conn);
extern char *PQhostaddr(const PGconn *conn);
extern char *PQport(const PGconn *conn);
extern char *PQtty(const PGconn *conn);
extern char *PQoptions(const PGconn *conn);
extern ConnStatusType PQstatus(const PGconn *conn);
extern PGTransactionStatusType PQtransactionStatus(const PGconn *conn);
extern const char *PQparameterStatus(const PGconn *conn,
									 const char *paramName);
extern int	PQprotocolVersion(const PGconn *conn);
extern int	PQserverVersion(const PGconn *conn);
extern char *PQerrorMessage(const PGconn *conn);
extern int	PQsocket(const PGconn *conn);
extern int	PQbackendPID(const PGconn *conn);
extern int	PQconnectionNeedsPassword(const PGconn *conn);
extern int	PQconnectionUsedPassword(const PGconn *conn);
extern int	PQclientEncoding(const PGconn *conn);
extern int	PQsetClientEncoding(PGconn *conn, const char *encoding);

/* SSL information functions */
extern int	PQsslInUse(PGconn *conn);
extern void *PQsslStruct(PGconn *conn, const char *struct_name);
extern const char *PQsslAttribute(PGconn *conn, const char *attribute_name);
extern const char *const *PQsslAttributeNames(PGconn *conn);

/* Get the OpenSSL structure associated with a connection. Returns NULL for
 * unencrypted connections or if any other TLS library is in use. */
extern void *PQgetssl(PGconn *conn);

/* Tell libpq whether it needs to initialize OpenSSL */
extern void PQinitSSL(int do_init);

/* More detailed way to tell libpq whether it needs to initialize OpenSSL */
extern void PQinitOpenSSL(int do_ssl, int do_crypto);

/* Return true if GSSAPI encryption is in use */
extern int	PQgssEncInUse(PGconn *conn);

/* Returns GSSAPI context if GSSAPI is in use */
extern void *PQgetgssctx(PGconn *conn);

/* Set verbosity for PQerrorMessage and PQresultErrorMessage */
extern PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);

/* Set CONTEXT visibility for PQerrorMessage and PQresultErrorMessage */
extern PGContextVisibility PQsetErrorContextVisibility(PGconn *conn,
													   PGContextVisibility show_context);

/* Enable/disable tracing */
extern void PQtrace(PGconn *conn, FILE *debug_port);
extern void PQuntrace(PGconn *conn);

/* Override default notice handling routines */
extern PQnoticeReceiver PQsetNoticeReceiver(PGconn *conn,
											PQnoticeReceiver proc,
											void *arg);
extern PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn,
											  PQnoticeProcessor proc,
											  void *arg);

/*
 *	   Used to set callback that prevents concurrent access to
 *	   non-thread safe functions that libpq needs.
 *	   The default implementation uses a libpq internal mutex.
 *	   Only required for multithreaded apps that use kerberos
 *	   both within their app and for postgresql connections.
 */
typedef void (*pgthreadlock_t) (int acquire);

extern pgthreadlock_t PQregisterThreadLock(pgthreadlock_t newhandler);

/* === in fe-exec.c === */

/* Simple synchronous query */
extern PGresult *PQexec(PGconn *conn, const char *query);
extern PGresult *PQexecParams(PGconn *conn,
							  const char *command,
							  int nParams,
							  const Oid *paramTypes,
							  const char *const *paramValues,
							  const int *paramLengths,
							  const int *paramFormats,
							  int resultFormat);
extern PGresult *PQprepare(PGconn *conn, const char *stmtName,
						   const char *query, int nParams,
						   const Oid *paramTypes);
extern PGresult *PQexecPrepared(PGconn *conn,
								const char *stmtName,
								int nParams,
								const char *const *paramValues,
								const int *paramLengths,
								const int *paramFormats,
								int resultFormat);

/* Interface for multiple-result or asynchronous queries */
extern int	PQsendQuery(PGconn *conn, const char *query);
extern int	PQsendQueryParams(PGconn *conn,
							  const char *command,
							  int nParams,
							  const Oid *paramTypes,
							  const char *const *paramValues,
							  const int *paramLengths,
							  const int *paramFormats,
							  int resultFormat);
extern int	PQsendPrepare(PGconn *conn, const char *stmtName,
						  const char *query, int nParams,
						  const Oid *paramTypes);
extern int	PQsendQueryPrepared(PGconn *conn,
								const char *stmtName,
								int nParams,
								const char *const *paramValues,
								const int *paramLengths,
								const int *paramFormats,
								int resultFormat);
extern int	PQsetSingleRowMode(PGconn *conn);
extern PGresult *PQgetResult(PGconn *conn);

/* Routines for managing an asynchronous query */
extern int	PQisBusy(PGconn *conn);
extern int	PQconsumeInput(PGconn *conn);

/* LISTEN/NOTIFY support */
extern PGnotify *PQnotifies(PGconn *conn);

/* Routines for copy in/out */
extern int	PQputCopyData(PGconn *conn, const char *buffer, int nbytes);
extern int	PQputCopyEnd(PGconn *conn, const char *errormsg);
extern int	PQgetCopyData(PGconn *conn, char **buffer, int async);

/* Deprecated routines for copy in/out */
extern int	PQgetline(PGconn *conn, char *string, int length);
extern int	PQputline(PGconn *conn, const char *string);
extern int	PQgetlineAsync(PGconn *conn, char *buffer, int bufsize);
extern int	PQputnbytes(PGconn *conn, const char *buffer, int nbytes);
extern int	PQendcopy(PGconn *conn);

/* Set blocking/nonblocking connection to the backend */
extern int	PQsetnonblocking(PGconn *conn, int arg);
extern int	PQisnonblocking(const PGconn *conn);
extern int	PQisthreadsafe(void);
extern PGPing PQping(const char *conninfo);
extern PGPing PQpingParams(const char *const *keywords,
						   const char *const *values, int expand_dbname);

/* Force the write buffer to be written (or at least try) */
extern int	PQflush(PGconn *conn);

/*
 * "Fast path" interface --- not really recommended for application
 * use
 */
extern PGresult *PQfn(PGconn *conn,
					  int fnid,
					  int *result_buf,
					  int *result_len,
					  int result_is_int,
					  const PQArgBlock *args,
					  int nargs);

/* Accessor functions for PGresult objects */
extern ExecStatusType PQresultStatus(const PGresult *res);
extern char *PQresStatus(ExecStatusType status);
extern char *PQresultErrorMessage(const PGresult *res);
extern char *PQresultVerboseErrorMessage(const PGresult *res,
										 PGVerbosity verbosity,
										 PGContextVisibility show_context);
extern char *PQresultErrorField(const PGresult *res, int fieldcode);
extern int	PQntuples(const PGresult *res);
extern int	PQnfields(const PGresult *res);
extern int	PQbinaryTuples(const PGresult *res);
extern char *PQfname(const PGresult *res, int field_num);
extern int	PQfnumber(const PGresult *res, const char *field_name);
extern Oid	PQftable(const PGresult *res, int field_num);
extern int	PQftablecol(const PGresult *res, int field_num);
extern int	PQfformat(const PGresult *res, int field_num);
extern Oid	PQftype(const PGresult *res, int field_num);
extern int	PQfsize(const PGresult *res, int field_num);
extern int	PQfmod(const PGresult *res, int field_num);
extern char *PQcmdStatus(PGresult *res);
extern char *PQoidStatus(const PGresult *res);	/* old and ugly */
extern Oid	PQoidValue(const PGresult *res);	/* new and improved */
extern char *PQcmdTuples(PGresult *res);
extern char *PQgetvalue(const PGresult *res, int tup_num, int field_num);
extern int	PQgetlength(const PGresult *res, int tup_num, int field_num);
extern int	PQgetisnull(const PGresult *res, int tup_num, int field_num);
extern int	PQnparams(const PGresult *res);
extern Oid	PQparamtype(const PGresult *res, int param_num);

/* Describe prepared statements and portals */
extern PGresult *PQdescribePrepared(PGconn *conn, const char *stmt);
extern PGresult *PQdescribePortal(PGconn *conn, const char *portal);
extern int	PQsendDescribePrepared(PGconn *conn, const char *stmt);
extern int	PQsendDescribePortal(PGconn *conn, const char *portal);

/* Delete a PGresult */
extern void PQclear(PGresult *res);

/* For freeing other alloc'd results, such as PGnotify structs */
extern void PQfreemem(void *ptr);

/* Exists for backward compatibility.  bjm 2003-03-24 */
#define PQfreeNotify(ptr) PQfreemem(ptr)

/* Error when no password was given. */
/* Note: depending on this is deprecated; use PQconnectionNeedsPassword(). */
#define PQnoPasswordSupplied	"fe_sendauth: no password supplied\n"

/* Create and manipulate PGresults */
extern PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
extern PGresult *PQcopyResult(const PGresult *src, int flags);
extern int	PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs);
extern void *PQresultAlloc(PGresult *res, size_t nBytes);
extern size_t PQresultMemorySize(const PGresult *res);
extern int	PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len);

/* Quoting strings before inclusion in queries. */
extern size_t PQescapeStringConn(PGconn *conn,
								 char *to, const char *from, size_t length,
								 int *error);
extern char *PQescapeLiteral(PGconn *conn, const char *str, size_t len);
extern char *PQescapeIdentifier(PGconn *conn, const char *str, size_t len);
extern unsigned char *PQescapeByteaConn(PGconn *conn,
										const unsigned char *from, size_t from_length,
										size_t *to_length);
extern unsigned char *PQunescapeBytea(const unsigned char *strtext,
									  size_t *retbuflen);

/* These forms are deprecated! */
extern size_t PQescapeString(char *to, const char *from, size_t length);
extern unsigned char *PQescapeBytea(const unsigned char *from, size_t from_length,
									size_t *to_length);



/* === in fe-print.c === */

extern void PQprint(FILE *fout, /* output stream */
					const PGresult *res,
					const PQprintOpt *ps);	/* option structure */

/*
 * really old printing routines
 */
extern void PQdisplayTuples(const PGresult *res,
							FILE *fp,	/* where to send the output */
							int fillAlign,	/* pad the fields with spaces */
							const char *fieldSep,	/* field separator */
							int printHeader,	/* display headers? */
							int quiet);

extern void PQprintTuples(const PGresult *res,
						  FILE *fout,	/* output stream */
						  int PrintAttNames,	/* print attribute names */
						  int TerseOutput,	/* delimiter bars */
						  int colWidth);	/* width of column, if 0, use
											 * variable width */


/* === in fe-lobj.c === */

/* Large-object access routines */
extern int	lo_open(PGconn *conn, Oid lobjId, int mode);
extern int	lo_close(PGconn *conn, int fd);
extern int	lo_read(PGconn *conn, int fd, char *buf, size_t len);
extern int	lo_write(PGconn *conn, int fd, const char *buf, size_t len);
extern int	lo_lseek(PGconn *conn, int fd, int offset, int whence);
extern pg_int64 lo_lseek64(PGconn *conn, int fd, pg_int64 offset, int whence);
extern Oid	lo_creat(PGconn *conn, int mode);
extern Oid	lo_create(PGconn *conn, Oid lobjId);
extern int	lo_tell(PGconn *conn, int fd);
extern pg_int64 lo_tell64(PGconn *conn, int fd);
extern int	lo_truncate(PGconn *conn, int fd, size_t len);
extern int	lo_truncate64(PGconn *conn, int fd, pg_int64 len);
extern int	lo_unlink(PGconn *conn, Oid lobjId);
extern Oid	lo_import(PGconn *conn, const char *filename);
extern Oid	lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId);
extern int	lo_export(PGconn *conn, Oid lobjId, const char *filename);

/* === in fe-misc.c === */

/* Get the version of the libpq library in use */
extern int	PQlibVersion(void);

/* Determine length of multibyte encoded char at *s */
extern int	PQmblen(const char *s, int encoding);

/* Determine display length of multibyte encoded char at *s */
extern int	PQdsplen(const char *s, int encoding);

/* Get encoding id from environment variable PGCLIENTENCODING */
extern int	PQenv2encoding(void);

/* === in fe-auth.c === */

extern char *PQencryptPassword(const char *passwd, const char *user);
extern char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm);

/* === in encnames.c === */

extern int	pg_char_to_encoding(const char *name);
extern const char *pg_encoding_to_char(int encoding);
extern int	pg_valid_server_encoding_id(int encoding);

/* === in fe-secure-openssl.c === */

/* Support for overriding sslpassword handling with a callback. */
typedef int (*PQsslKeyPassHook_OpenSSL_type) (char *buf, int size, PGconn *conn);
extern PQsslKeyPassHook_OpenSSL_type PQgetSSLKeyPassHook_OpenSSL(void);
extern void PQsetSSLKeyPassHook_OpenSSL(PQsslKeyPassHook_OpenSSL_type hook);
extern int	PQdefaultSSLKeyPassHook_OpenSSL(char *buf, int size, PGconn *conn);

#ifdef __cplusplus
}
#endif

#endif							/* LIBPQ_FE_H */

Batosay - 2023
IDNSEO Team