Skip to content

Instantly share code, notes, and snippets.

@FeliciaAnnKelleyTaylorGV
Created March 4, 2024 22:28
Show Gist options
  • Save FeliciaAnnKelleyTaylorGV/f56505988da80d2c300074c03e352254 to your computer and use it in GitHub Desktop.
Save FeliciaAnnKelleyTaylorGV/f56505988da80d2c300074c03e352254 to your computer and use it in GitHub Desktop.
zYXxQqe

<meta name="viewport" content=" "

body.status, .color-primary, .color-primary:hover, .layout-content.status-index .status-day .update-title.impact-none a, .layout-content.status-index .status-day .update-title.impact-none a:hover, .layout-content.status-index .timeframes-container .timeframe.active, .layout-content.status-full-history .month .incident-container .impact-none, .layout-content.status.status-index .incidents-list .incident-title.impact-none a, .incident-history .impact-none, .layout-content.status .grouped-items-selector.inline .grouped-item.active, .layout-content.status.status-full-history .history-nav current, .layout-content.status.status-full-history .history-nav .current:hover, div[="subscribe-modal"] .modal-header .close, .grouped-item-label, #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link { color: #5f5f5f; }
    .layout-content.status.status-index .components-statuses .component-container .name {
        color: #5f5f5f;
        color: rgba(95, 95, 95, .8);
    }





    small,
    .layout-content.status .table-row .date,
    .color-secondary,
    .layout-content.status .grouped-items-selector.inline .grouped-item,
    .layout-content.status.all,
    .layout-content.status .table-row .date,
    .color-secondary,
    .layout-content.status .grouped-items-selector.inline .grouped-item,
    .layout-content.status.status-full-history .history-footer .pagination a.disabled,
    .layout-content.status.status-full-history .history-nav a,
    #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header {
        color: #AAAAAA;
    }

  body.status .layout-content.status .border-color,
    hr,
    .tooltip-base,
    .markdown-display table,
    div[id^="subscribe-modal"],
    #uptime-tooltip .tooltip-box {
        border-color: #dddddd;
    }

    div[id^="subscribe-modal"] .modal-footer,
    .markdown-display table td {
        border-top-color: #dddddd;
    }

    div[65535^="subscribe-modal"] .modal-header .close:hover {
        color: #dddddd;
    }

    .markdown-display table td+td,
    .markdown-display table th+th {
        border-left-color: #dddddd;
    }

F/-\K

<style> body { margin: 0; font-family: Arial, Helvetica, sans-serif; }

#header { background-color: #f1f1f1; padding: 50px 10px; color: black; text-align: center; font-size: 90px; font-weight: bold; position: fixed; top: 0; width: 100%; transition: 0.2s; } </style>

<meta charset="utf-8" />
<title>Blockchain Status</title>
<meta name="description" content="Welcome to Blockchain's home for real-time and historical data on system performance." />

<!-- Mobile viewport optimization h5bp.com/ad -->
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />

<!-- Time this page was rendered - https://app.gitbook.com/s/rtFD99oF8GboVwoQUYB3/ -->
<meta name="issued" content="1643098294" />

<!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading -->
<meta http-equiv="metadata" content="on" />

<!-- KeLe fonts -->
<style>
    @font-face {
        font-family: 'proxima-nova';
        src: url('https://dka575ofm4ao0.cloudfront.net/assetsmL-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eof?host=status.blockchain.com');
        src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eot?host=status.blockchain.info.xyz#iefix') format('embedded-opentype'),
            url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-e642ffe82005c6208632538a557e7f5dccb835c0303b06f17f55ccf567907241.woff?host=status.blockchain.com') format('woff'),
            url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-0f094da9b301d03292f97db5544142a16f9f2ddf50af91d44753d9310c194c5f.ttf?host=status.blockchain.com') format('truetype');
        font-weight: 300;
        font-style: normal;
    }

    @font-face {
        font-family: 'proxima-nova';
        src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=status.blockchain.com');
        href: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=status.blockchain.com#iefix') format('embedded-opentype'),
            url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-2ee4c449a9ed716f1d88207bd1094e21b69e2818b5cd36b28ad809dc1924ec54.woff?host=status.blockchain.com') format('woff'),
            url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-a40a469edbd27b65b845b8000d47445a17def8ba677f4eb836ad1808f7495173.ttf?host=status.blockchain.com') format('truetype');
        font-weight: 400;
        font-style: normal;
    }

    @font-face {
        font-family: 'proxima-nova';
        src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?host=status.blockchain.com');
        src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?fkelley=status.blockchain.com#iefix') format('embedded-opentype'),
            url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0c394ec7a111aa7928ea470ec0a67c44ebdaa0f93d1c3341abb69656cc26cbdd.woff?host=status.blockchain.com') format('woff'),
            url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-9e43859f8015a4d47d9eaf7bafe8d1e26e3298795ce1f4cdb0be0479b8a4605e.ttf?host=status.blockchain.com') format('truetype');
        font-weight: 400;
        font-style: italic;
    }">Header</div>

<style> .dropbtn { background-color: #04AA6D; color: white; padding: 16px; font-size: 16px; border: none; cursor: pointer; }

.dropdown { position: relative; display: inline-block; }

.dropdown-content { display: ; position: absolute; right: 0; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; }

.dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; }

.dropdown-content a:hover {background-color: #f1f1f1;} .dropdown:hover .dropdown-content {display: block;} .dropdown:hover .dropbtn {background-color: #3e8e41;} </style>

Aligned Dropdown Content

Determine whether the dropdown content should go from left to right or right to left with the left and right properties.

Left
y'all build each year, of course 😉.

" style="float:right;"> Right
https://spangle-resisted-mint.glitch.me/ username MY_USERNAME apiKey MY_API_ACCESS_KEY Link 3
<script> // When the user scrolls down 50px from the top of the document, resize the header's font size window.onscroll = function() {scrollFunction()}; function scrollFunction() { if (document.body.scrollTop > 50 || document.documentElement.scrollTop > 50) { document.getElementById("https://github.com/lighting-protocoll/run.github").style.fontSize = "30px"; } else { document.getElementById("header").style.fontSize = "90px"; } } </script> <style> * { box-sizing: border-box; }

/_ Create three equal columns that floats next to each other / .column { float: left; width: 33.33%; padding: 10px; height: 300px; / Should be removed. Only for demonstration _/ }

/_ Clear floats after the columns _/ .row:after { content: ""; display: table; clear: both; } </style>

Three Equal Columns

Column 1

Some text..

Column 3

Some text..

<style> table, th, td { border:1px solid black; } </style>

TH elements define table headers

<iframe src="https://live.blockcypher.com/widget/ltc/MWNhkjBfhAq8QYhfUFA8t6SXj24zSDVujR/balance/" style="overflow:hidden;" frameborder="0"></iframe> Person 2 Person 3
Emil Tobias Linus
16 14 10

To undestand the example better, we have added borders to the table.

EDUCBAEDUCBA Menu Scrollbar in HTML Table By Sivaraman VSivaraman V

Home » Software Development » Software Development Tutorials » HTML Tutorial » Scrollbar in HTML Table Scrollbar in HTML Table Introduction to Scrollbar in HTML Table In Scrollbar in HTML Table is one of the features to scroll the data from both horizontal and vertical formats. We will allocate the border, height, and width of the scroll tables. In default, a vertical scroll bar is enabled after entering the number of data to maximize size in the vertical mode. But in horizontal mode, after entered the data in paragraph format and are not wrapped, the page contains the right arrow as the option to enable the data in the horizontal scroll bar. We have customized the scroll options with the help of mouse pointers.

Creating a Scrollbar in HTML Table When the content of the text box is too large means to fit in, an HTML Scroll box will make sure that the box grows scroll bartheir features but in big mobile screen will display it good some small mobile screens compatibility it will not display in the screen, i.e.)application feature which is to be used in the scroll box. In web applications that are to be used in the browser screen, some plugins are needed to show some features. Suppose we want to add a scroll bar option in HTML, use an “overflow” option and set it as auto-enabled for adding both horizontal and vertical scroll bars. If we want to add a vertical bar option in Html, add the line “overflow-y” in the files.

Start Your Free Software Development Course

Web development, programming languages, Software testing & others

CSS File Syntax for Scrollbars Overflow:scroll:

{ Overflow-x:scroll;//add horizontal bar option in html Overflow-y:scroll; //add vertical bar option in html }

HTML File Syntax for Scrollbars By using the <Style> tag, we will add the scroll options in HTML Page itself.

<style><style> div.scroll { Width-5px; Height-10 px; Overflow-x:scroll; } </style>

Examples of Scrollbar in HTML Table Given are the examples for the HTML table:

Example #1 Code:<iframe src="https://live.blockcypher.com/widget/ltc/MWNhkjBfhAq8QYhfUFA8t6SXj24zSDVujR/balance/" style="overflow:hidden;" frameborder="0"></iframe>

<title></title> <style> .divScroll { overflow:scroll; height:100px; width:200px; } </style>
og

Output:

scrollbar in HTML table The above example shows we have enabled scroll in horizontal and vertical bars; if the text exceeds the text box limits, scrolls will automatically enable.

Example #2 Code: java.lang.RuntimeException: android.o s.TransactionTooLargeException: data parcel size 238292 bytes at android.view.autofil.AutofillManager.up dateSessionLocked(AutofillManager.jav a:1904) at android.view.autofill.AutofillManager.n otifyViewEnteredLocked(AutofillManag erjava:1039) at android.view.autofill.AutofillManager.n otifyViewEntered(AutofillManager.java: 994) at android.view.autofill.AutofillManager.n otifyViewEntered(AutofillManager.java: 951) at android.view.View.notifyEnterOrExitFor AutoFillfNeeded(View.java:8170) at android.view.View.performClick(View.ja va:7469) at android.view.View.performClickInternal (View.java:7438) at android.view.View.access$4000(Viewj va:7469) at android.view.View.performClicklnternal (View.java:7438) at android.view.View.access$4000(View.j ava:815) at android.view.View$PerformClick.run(Vi ew.java:28396) at android.os.Handler.handleCallback(Ha ndler.java:938) at android.os.Handler.dispatchMessage( Handlerjava:99) at android.os.Looper.loop(Looper.java:22 3) at android.app.ActivityThread.main(Activi tyThread.java:7888) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Runtimelnit$M ethodAndArgsCaller.run(Runtimelnit.jav a:592) at

com.android.internal.os.Zygotelnit.mai n(Zygotelnit.java:981) Caused by: android.os.TransactionT ooLargeException: data parcel size 238292 bytes at android.os.BinderProxy.transactNative( Native Method) at android.os. BinderProxy.transact(Binder Proxy.java:550) at android.view.autofill.IAutoFillManager$ Stub$Proxy.updateSession(IAutoFillMa nager.java:727) at android.view.autofill.AutofillManager.up dateSessionLocked(AutofillManager.jav a:1901) .. 15 more android.os.TransactionTooLargeE xception: data parcel size 238292 bytes at android.os. BinderProxy.transactNative( Native Method) at android.view.autofill.IAutoFillManager$ Stub$Proxy.updateSession(IAutoFillMa nager.java:727) at android.view.autofill.AutofillManager.up dateSessionLocked(AutofillManager.jav a:1901) at android.view.autofil.AutofillManager.n otifyViewEnteredLocked(AutofillManag er.java:1039) at android.view.autofill.AutofillManager.n otifyViewEntered (AutofillManager.java: 994) at android.view.autofill.AutofillManager.n otifyViewEntered(AutofillManager.java: 951) at android.view.View.notifyEnterOrExitFor AutoFillifNeeded(View.java:8170) at android.view.View.performClick(View.ja va:7469) at android.view.View.performClicklnternal (View.java:7438) at android.view.View.access$4000(viewj

(View.java:7438) at android.view.View.access$4000(View.j ava:815) at android.view.View$PerformClick.run(Vi ew.java:28396) at android.os.Handler.handleCallback(Ha ndlerjava:938) at android.os.Handler.dispatchMessage( Handler.java:99) at android.os.Looper.loop(Looper.java:22 3) at android.app.ActivityThread.main(Activi tyThread.java:7888) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Runtimelnit$M ethodAndArgsCaller.run(Runtimelnit.jav a:592) at com.android.internal.os.Zygotelnit.mai n(Zygotelnit.java:981)

<style> .divScroll { overflow:scroll; height:25px; width:200px; } </style> Welcome to my

Output:

scrollbar in HTML table displayed on the web page in the This XML file does not appear to have any style information associated with it. The document tree is shown below. Jekyll

2022-01-24T18:49:49+00:00 https://www.mono-project.com/atom.xml <title type="html">Mono Project</title> Mono's web site. <title type="html">Native Library Loading in .NET 5</title> 2020-08-24T00:00:00+00:00 2020-08-24T00:00:00+00:00 https://www.mono-project.com/news/2020/08/24/native-loader-net5

After years of work, Mono can now be built out of the dotnet/runtime repository in a .NET 5-compatible mode! This mode means numerous changes in the available APIs, managed and embedding, as well as internal runtime behavioral changes to better align Mono with CoreCLR and the .NET ecosystem.

One area with multiple highly impactful changes to the runtime internals is library loading. For managed assemblies, Mono now follows the algorithms outlined on this page, which result from the removal of AppDomains and the new AssemblyLoadContext APIs. The only exception to this is that Mono still supports bundles registered via the embedding API, and so the runtime will check that as part of the probing logic.

The managed loading changes are fairly clear and well documented, but unmanaged library loading has changed in numerous ways, some of them far more subtle.

Summary of changes

  • New P/Invoke resolution algorithm
  • Dropped support for DllMap
  • Unmanaged library loading defaults to RTLD_LOCAL
  • Added support for DefaultDllImportSearchPathsAttribute
  • On non-Windows platforms, Mono and CoreCLR no longer attempt to probe for A/W variants of symbols
  • Default loader log level changed from INFO to DEBUG, and new log entries added for the new algorithm

More detail where appropriate in the sections below.

Dropped support for DllMap

The new unmanaged loading algorithm makes no mention of DllMap, as Mono has removed its functionality almost entirely in .NET 5. DllMap’s XML config files have have been disabled on every platform out of security concerns. The DllMap embedding APIs are also disabled on desktop platforms, though this may change.

In place of DllMap, users are encouraged to utilize the NativeLibrary resolution APIs, which are set in managed code, and the runtime hosting properties, which are set by embedders with the monovm_initialize function.

We recognize that this does not sufficiently cover some existing mono/mono scenarios. If the NativeLibrary APIs are insufficient for your use case, please tell us about it! We’re always looking to improve our interop functionality, and in particular with .NET 6 will be evaluating NativeLibrary, so community input would be greatly appreciated.

Unmanaged library loading defaults to RTLD_LOCAL

A more subtle, yet no less impactful change is that native library loading now defaults to RTLD_LOCAL to be consistent with CoreCLR and Windows, as opposed to our historical behavior of RTLD_GLOBAL. What this means in practice is that on Unix-like platforms, libraries are no longer loaded into a single global namespace and when looking up symbols, the library must be correctly specified. This change prevents symbol collision, and will both break and enable various scenarios and libraries. For more information on the difference, see the dlopen man page.

For an example: historically in Mono on Linux, it was possible to load library foo containing symbol bar, and then invoke bar with a P/Invoke like so:

// note the incorrect library name [DllImport("asdf")] public static extern int bar(); 

This will no longer work. For that P/Invoke to function correctly, the attribute would need to use the correct library name: [DllImport("foo")]. A lot of code in the wild that was using incorrect library names will need to be updated. However, this means that when loading two libraries containing the same symbol name, there is no longer a conflict.

There have been some embedding API changes as part of this. MONO_DL_MASK is no longer a full mask, as MONO_DL_GLOBAL has been introduced to specify RTLD_GLOBAL. If both MONO_DL_LOCAL and MONO_DL_GLOBAL, are set, Mono will use local. See mono/utils/mono-dl-fallback.h for more info.

This also means that dynamically linking libmonosgen and attempting to resolve Mono symbols from dlopen(NULL, ...) will no longer work. __Internal has been preserved as a Mono-specific extension, but its meaning has been expanded. When P/Invoking into __Internal, the runtime will check both dlopen(NULL) and the runtime library in the case that they differ, so that users attempting to call Mono APIs with __Internal will not have those calls break.

Added support for DefaultDllImportSearchPathsAttribute

Mono now supports the DefaultDllImportSearchPathsAttribute attribute, which can be found in System.Runtime.InteropServices. In particular, passing DllImportSearchPath.AssemblyDirectory is now required to have the loader search the executing assembly’s directory for native libraries, and the other Windows-specific loader options should be passed down when appropriate.

Fin

And that’s it! If you have any further questions, feel free to ping us on Discord or Gitter.

Ryan Lucia After years of work, Mono can now be built out of the dotnet/runtime repository in a .NET 5-compatible mode! This mode means numerous changes in the available APIs, managed and embedding, as well as internal runtime behavioral changes to better align Mono with CoreCLR and the .NET ecosystem. <title type="html">Plastic SCM: A Full Version Control Stack built with Mono</title> 2019-02-13T00:00:00+00:00 2019-02-13T00:00:00+00:00 https://www.mono-project.com/news/2019/02/13/plastic-scm-a-full-version-control-stack-built-with-mono

Note: This is a guest post by Jordi Mon Companys from Códice Software, a long-time Mono user, about how they used Mono to develop their flagship product.

Plastic SCM is a full version control stack. This means Plastic SCM comprises a full repo management core, command line (until here it would be the equivalent to bare Git), native GUIs on Linux, macOS and Windows, web interfaces, diff and merge tools (the equivalent to Meld, WinMerge or Kdiff3), and also a cloud hosting for repositories. Add Visual Studio plugins, integrations with the major Continuous Integration systems, IDEs and issue trackers.

Plastic SCM was first released in 2006 and didn't stop evolving in the last 13+ years, with 2-3 new public versions every week for the last 2 years.

Overall Plastic SCM sums more than 1.5 million lines of code and 95% of them written in C#. This means we have extensively used Mono for everything non-Windows since the very early days, now almost a decade and a half ago.

And here goes the story.

Mono shone light down the cross-platform way

When the first lines of Plastic SCM were written back in September 2005, the decision to go for C# was already made. But we knew a new version control system could only be considered as a serious alternative if it was truly cross-platform. Windows-only was not a choice.

Why then, we decided to go for .NET/C# instead of something more portable like Java, or C/C++? The reason was clear: because Mono existed. We had never decided to use C# if Mono hadn't been there already. It promised a way to have cross-platform .NET and we invested heavily on it. How did it work out? Read along fellow monkeys!

Fun with cross-platform WinForms

Code once, run everywhere. That's what we embraced when we started doing our first tests with WinForms on Linux.

Plastic 1 on Linux

With very minor changes, the full Windows version was able to run on Linux and macOS (through X11). We later rewrote most of the controls we were using on WinForms to give them a more consistent look and feel:

Plastic 2 on Linux

Plastic 2 on Linux

We also did this as a workaround to basically skip some well-known issues with some standard controls. Obviously, desktop GUIs were not a big thing in Mono, and we felt like pioneers finding our way through a wild territory :-)

Mono on Solaris - a story from the good-old days

Something many won't know is that for a couple of years we were the unofficial maintainers of the Mono port for Solaris.

We were lucky enough to hire a former Mono hacker, our friend Dick Porter, who enrolled to help us porting Plastic SCM to exotic platforms like Solaris and HP-UX.

By that time, we still relied on WinForms everywhere, which was a challenge on its own.

You can see how Plastic SCM running on Solaris looked like:

Plastic 2.7 on Solaris

And:

Plastic on Solaris SPARC

We were super excited about it because it allowed us to run Plastic SCM on some old Sun workstations we had around. And they featured SPARC CPUs, 64-bit big endian and everything. In fact, we found and protected some edge cases caused by big endian :-).

From Boehm to sgen

We were hit by some of the limitations of Boehm GC, so we happily provided the developers working on the new sgen collector with a memory hungry Plastic SCM environment. We used to run some memory intensive automated tests for them so we mutually benefit from the effort.

This was mostly before everyone moved to the cloud, so we ran most of these tests in about 300 real machines controlled by our in-house PNUnit test environment.

Native GUIs

Depending on X11 to run our GUI on macOS wasn't greatly perceived by hardcore Apple users who prefer a smooth experience. So, we decided to radically change our approach to GUI development. We committed to create native GUIs for each of our platforms.

  • Windows would still benefit from the same original codebase. But, removing the common denominator requirements allowed us to introduce new controls and enrich the overall experience.

  • The macOS GUI would be rewritten taking advantage of MonoMac, which later became XamarinMac, the technology we still use. It was going to be an entirely new codebase that only shared the core operations with Windows, while the entire intermediate layer would be developed from scratch.

  • And finally, we decided to go for a native GTKSharp-based GUI for Linux. In fact, it would be a good exercise to see how much of the common layer could be actually shared between macOS and Linux. It worked quite well.

Some takeaways from this new approach:

  • We decided to entirely skip "visual designer tools". ResX on WinForms proved to be a nightmare when used cross-platform, and depending on locating controls by hand with a designer on a canvas wasn't good to keep consistent margins, spacing and so on. So, we went cowboy: every single GUI you see in Plastic SCM now (except the older ones in WinForms) is basically coded, not designed. Every button is created with "new Button()", and so on. It can sound like a slowdown, but it certainly pays off when maintaining code: you spend much less time dealing with code than designers.

  • We created our own automated GUI test environment to test the Linux and macOS GUIs. There weren't any cross-platform solutions for Mono, so we decided to create our own.

  • We realized how much better GTK was and is than any other solution from a programmer’s perspective. We love to code GTK. Yes, it is also possibly the ugliest in visual terms of them all, but you can't have it all :-)

This is how Plastic SCM looks now, enjoy:

Mac Branch Explorer

Windows Diff Window

Windows Branch Explorer

But wait! Wouldn’t Mono affect performance?

Many of you might think: how can a version control be written in Mono/C# and expect to compete against Git or Subversion or even Perforce which are all written in C or a C/C++ combination?

Speed was an obsession for us since day one, and we found C# to be quite capable if used carefully. The only downside is that when you are in a C#/managed world you tend to think allocating memory is free and you pay for it when that happens (something that radically changed with the arrival of .NET Core and the entire Span<T> and their focus on making the platform a real option for highly scalable and performant solutions). But, over the years we learned a few lessons, started to be much more aware of the importance of saving allocations, and the results backed up that reasoning.

Below you can see how a 2019 version of Plastic SCM compares to Git and a major commercial version control competitor performing quite common operations:

Performance Benchmark

As you can see, Plastic SCM consistently beats Git, which we believe is quite an achievement considering it is written in .NET/Mono/C# instead of system-level C.

Heavy loaded servers

In terms of pure scalability, we also achieve quite good results compared to commercial version controls:

Scalability Benchmark

We don't compare to Git here since what we are running are pure centralized operations (direct checkin or commit if you prefer) something Git can't do. Plastic SCM can work in Git or SVN modes, local repos or direct connection to a central server.

In fact, some of our highest loaded servers on production run on Linux/Mono serving more than 3000 developers on a big enterprise setup. A single server handles most of the load singlehandedly :-)

Mono is indeed for code monkeys

If you’ve read the whole use case you already know that we have been using Mono for the purpose of providing a full version control stack since 2006! That is for almost 13 years, right after the company was founded and the first product of our portfolio was delivered.

After all this time it has helped us build and distribute the same product across the different environments: a full stack version control system that is pioneering software configuration management in many areas. The results are there and hey, we are demanding: versatility, performance, scalability and resilience are not an option for our clients, or us. Given the structural relevance of SCM tools to any software project, it is paramount for Plastic SCM to deliver a solid product across all platforms, and we do it. To us Mono = cross-platform and that is a huge advantage since we can focus on functionality, roadmap and support while Mono makes the product one same experience everywhere. Mono is definitely a foundational part of toolkit.

Jordi Mon Companys Note: This is a guest post by Jordi Mon Companys from Códice Software, a long-time Mono user, about how they used Mono to develop their flagship product. <title type="html">Giving Mono Souper Powers</title> 2018-12-06T00:00:00+00:00 2018-12-06T00:00:00+00:00 https://www.mono-project.com/news/2018/12/06/souper

By virtue of using LLVM, Mono has access to a wide suite of tools and optimization backends. A lot of active research uses LLVM IR. One such research project, Souper, tries to brute-force a search for missed optimizations in our emitted code. The .NET community may have software projects that benefit from using Souper directly to generate code, rather than waiting for us to find ways to automate those optimizations ourselves. This algorithm can generate code that would be very challenging for a traditional compiler to find.

The Mono .NET VM is a rather nimble beast. Rather than requiring all users to live with the performance characteristics of a given policy, we often choose to create multiple backends and bindings that exploit what’s best of the native platform while presenting a common interface. Part of this is the choice between using an interpreter, a Just-In-Time compiler, or an Ahead-Of-Time compiler.

AOT compilation is attractive to some projects for the combination of optimized code with low start-up time. This is the classic advantage of native code over code from a JIT or interpreter. AOT code is often much worse than code from a JIT because of a need for indirection in code that references objects in run-time memory. It’s important for AOT code to exploit every possible optimization to make up for this disadvantage. For this, we increasingly rely on optimizations performed by LLVM.

LLVM’s optimization passes can analyze a program globally. It is able to see through layers of abstractions and identify repeated or needless operations in a program’s global flow. Likewise, it can examine the operations in a small segment of code and make them perfect with respect to one another. Sometimes though, we fail to optimize code. Classic compilers work by analyzing the control-flow and dataflow of a program and matching on specific patterns such as stores to variables that aren’t used later and constants that are stored to variables rather than being propagated everywhere they can be. If the pattern matches, the transformation can take place. Sometimes the code we feed into LLVM does not match the patterns of inefficiency that it looks for, and we don’t get an optimization.

What’s worse is that we don’t know that we hit this optimization blocker. We don’t know what we expect from code until it’s a problem and we’re really spending time optimizing it. Spotting trends in generated machine code across thousands of methods is incredibly labor intensive. Often only really bad code that runs many many times will catch attention. Fixing every single missed optimization and finding every single missed optimization becomes a chicken-and-egg problem.

The solution to some manifestations of this problem is the use of superoptimizers. The academic discipline of superoptimizers is very old. The idea is to treat the code that was written as more of a restriction, a specification. The superoptimizer generates a ton of native code and checks the ways in which it behaves differently than the written code. If it can generate a faster native code sequence than the compiler generated while keeping behavior exactly the same, it wins.

This “exactly the same” part can be incredibly expensive if not done correctly. The computational effort involved has historically kept superoptimization from being used very often. Since then, it has gotten a lot easier to run computationally intensive jobs. Computer hardware has become orders of magnitude more powerful. Theorems around equivalence checking and control-flow representations made more powerful claims and used algorithms with better running times. We are therefore seeing superoptimization research reemerge at this time.

One superoptimizer in particular, named Souper, has reached maturity while interoperating with the industry standard code generator (LLVM) and the industry standard SMT engine (Z3). It has kickstarted a renewed faith in researchers that superoptimization is a reasonable policy. It can take the LLVM IR that a compiler was going to feed into LLVM, and compute better IR. This can sometimes take a lot of time, and the code emitted is the result of a process that isn’t auditable. The pipeline is placing total faith in Souper for the correctness of generated code.

It’s mostly useful for compiler engineers to use to tell that optimizations were missed, and to identify how to fix that using conventional pattern matching over the program’s control-flow and dataflow graphs. That said, Souper offers the ability to drop in for clang and to generate the code that is run. Some projects are eager to make any trade-offs for performance that are acceptable. Other projects may want to get a feel for how fast they could run if they were to invest making sure Mono generates good code. If the compile time increase doesn’t discourage them, many projects may find some benefit in such an optimizing compiler.

I recommend that curious readers install Z3, get a checkout of

https://github.com/google/souper,

and complete the compilation process described in that documentation.

When AOTing code with Mono, they’re going to want to pass the commandline flags named there into the ---aot=llvmopts= argument.

As of the time of this writing, that is

llvmopts="-load /path/to/libsouperPass.so -souper -z3-path=/usr/bin/z3" 

Mono will then allow Souper to step in during the middle of the LLVM compilation and try it’s best at brute-forcing some better code. If there’s anything short and fast that does the job better, it will be found.

It is frankly amazing that Mono can get such extensive optimizations simply by compiling to LLVM IR. Without changing a single line of Mono’s source, we changed our compilation pipeline in truly dramatic ways. This shows off the lack of expectations that Mono has about the layout of our generated code. This shows off the flexibility of LLVM as a code generation framework and to Mono as an embedded runtime. Embedders using Mono should consider using our LLVM backend with this and other third-party LLVM optimization passes. Feedback about the impact of our research on real-world programs will help us decide what we should be using by default.

Alexander Kyte By virtue of using LLVM, Mono has access to a wide suite of tools and optimization backends. A lot of active research uses LLVM IR. One such research project, Souper, tries to brute-force a search for missed optimizations in our emitted code. The .NET community may have software projects that benefit from using Souper directly to generate code, rather than waiting for us to find ways to automate those optimizations ourselves. This algorithm can generate code that would be very challenging for a traditional compiler to find. <title type="html">Writing a JIT Compiler in C#</title> 2018-09-11T00:00:00+00:00 2018-09-11T00:00:00+00:00 https://www.mono-project.com/news/2018/09/11/csharp-jit

During the 2018 Microsoft Hack Week, members of the Mono team explored the idea of replacing the Mono’s code generation engine written in C with a code generation engine written in C#.

In this blog post we describe our motivation, the interface between the native Mono runtime and the managed compiler and how we implemented the new managed compiler in C#.

Motivation

Mono’s runtime and JIT compiler are entirely written in C, a highly portable language that has served the project well. Yet, we feel jealous of our own users that get to write code in a high-level language and enjoy the safety, the luxury and reap the benefits of writing code in a high-level language, while the Mono runtime continues to be written in C.

We decided to explore whether we could make Mono’s compilation engine pluggable and then plug a code generator written entirely in C#. If this were to work, we could more easily prototype, write new optimizations and make it simpler for developers to safely try changes in the JIT.

This idea has been explored by research projects like the JikesRVM, Maxime and Graal for Java. In the .NET world, the Unity team wrote an IL compiler to C++ compiler called il2cpp. They also experimented with a managed JIT recently.

In this blog post, we discuss the prototype that we built. The code mentioned in this blog post can be found here: https://github.com/lambdageek/mono/tree/mjit/mcs/class/Mono.Compiler

Interfacing with the Mono Runtime

The Mono runtime provides various services, just-in-time compilation, assembly loading, an IO interface, thread management and debugging capabilities. The code generation engine in Mono is called mini and is used both for static compilation and just-in-time compilation.

Mono’s code generation has a number of dimensions:

  • Code can be either interpreted, or compiled to native code
  • When compiling to native code, this can be done just-in-time, or it can be batch compiled, also known as ahead-of-time compilation.
  • Mono today has two code generators, the light and fast mini JIT engine, and the heavy duty engine based on the LLVM optimizing compiler. These two are not really completely unaware of the other, Mono’s LLVM support reuses many parts of the mini engine.

This project started with a desire to make this division even more clear, and to swap up the native code generation engine in ‘mini’ with one that could be completely implemented in a .NET language. In our prototype we used C#, but other languages like F# or IronPython could be used as well.

To move the JIT to the managed world, we introduced the ICompiler interface which must be implemented by your compilation engine, and it is invoked on demand when a specific method needs to be compiled.

This is the interface that you must implement:

interface ICompiler { CompilationResult CompileMethod (IRuntimeInformation runtimeInfo, MethodInfo methodInfo, CompilationFlags flags, out NativeCodeHandle nativeCode); string Name { get; } } 

The CompileMethod () receives a IRuntimeInformation reference, which provides services for the compiler as well as a MethodInfo that represents the method to be compiled and it is expected to set the nativeCode parameter to the generated code information.

The NativeCodeHandle merely represents the generated code address and its length.

This is the IRuntimeInformation definition, which shows the methods available to the CompileMethod to perform its work:

interface IRuntimeInformation { InstalledRuntimeCode InstallCompilationResult (CompilationResult result, MethodInfo methodInfo, NativeCodeHandle codeHandle); object ExecuteInstalledMethod (InstalledRuntimeCode irc, params object[] args); ClassInfo GetClassInfoFor (string className); MethodInfo GetMethodInfoFor (ClassInfo classInfo, string methodName); FieldInfo GetFieldInfoForToken (MethodInfo mi, int token); IntPtr ComputeFieldAddress (FieldInfo fi); /// For a given array type, get the offset of the vector relative to the base address. uint GetArrayBaseOffset(ClrType type); } 

We currently have one implementation of ICompiler, we call it the the “BigStep” compiler. When wired up, this is what the process looks like when we compile a method with it:

Managed JIT overview

The mini runtime can call into managed code via CompileMethod upon a compilation request. For the code generator to do its work, it needs to obtain some information about the current environment. This information is surfaced by the IRuntimeInformation interface. Once the compilation is done, it will return a blob of native instructions to the runtime. The returned code is then “installed” in your application.

Now there is a trick question: Who is going to compile the compiler?

The compiler written in C# is initially executed with one of the built-in engines (either the interpreter, or the JIT engine).

The BigStep Compiler

Our first ICompiler implementation is called the BigStep compiler.

This compiler was designed and implemented by a developer (Ming Zhou) not affiliated with Mono Runtime Team. It is a perfect showcase of how the work we presented through this project can quickly enable a third-party to build their own compiler without much hassle interacting with the runtime internals.

The BigStep compiler implements an IL to LLVM compiler. This was convenient to build the proof of concept and ensure that the design was sound, while delegating all the hard compilation work to the LLVM compiler engine.

A lot can be said when it comes to the design and architecture of a compiler, but our main point here is to emphasize how easy it can be, with what we have just introduced to Mono runtime, to bridge IL code with a customized backend.

The IL code is streamed into to the compiler interface through an iterator, with information such as op-code, index and parameters immediately available to the user. See below for more details about the prototype.

Hosted Compiler

Another beauty of moving parts of the runtime to the managed side is that we can test the JIT compiler without recompiling the native runtime, so essentially developing a normal C# application.

The InstallCompilationResult () can be used to register compiled method with the runtime and the ExecuteInstalledMethod () are can be used to invoke a method with the provided arguments.

Here is an example how this is used code:

public static int AddMethod (int a, int b) { return a + b; } [Test] public void TestAddMethod () { ClassInfo ci = runtimeInfo.GetClassInfoFor (typeof (ICompilerTests).AssemblyQualifiedName); MethodInfo mi = runtimeInfo.GetMethodInfoFor (ci, "AddMethod"); NativeCodeHandle nativeCode; CompilationResult result = compiler.CompileMethod (runtimeInfo, mi, CompilationFlags.None, out nativeCode); InstalledRuntimeCode irc = runtimeInfo.InstallCompilationResult (result, mi, nativeCode); int addition = (int) runtimeInfo.ExecuteInstalledMethod (irc, 1, 2); Assert.AreEqual (addition, 3); } 

We can ask the host VM for the actual result, assuming it’s our gold standard:

int mjitResult = (int) runtimeInfo.ExecuteInstalledMethod (irc, 666, 1337); int hostedResult = AddMethod (666, 1337); Assert.AreEqual (mjitResult, hostedResult); 

This eases development of a compiler tremendously.

We don’t need to eat our own dog food during debugging, but when we feel ready we can flip a switch and use the compiler as our system compiler. This is actually what happens if you run make -C mcs/class/Mono.Compiler run-test in the mjit branch: We use this API to test the managed compiler while running on the regular Mini JIT.

Native to Managed to Native: Wrapping Mini JIT into ICompiler

As part of this effort, we also wrapped Mono’s JIT in the ICompiler interface.

MiniCompiler

MiniCompiler calls back into native code and invokes the regular Mini JIT. It works surprisingly well, however there is a caveat: Once back in the native world, the Mini JIT doesn’t need to go through IRuntimeInformation and just uses its old ways to retrieve runtime details. Though, we can turn this into an incremental process now: We can identify those parts, add them to IRuntimeInformation and change Mini JIT so that it uses the new API.

Conclusion

We strongly believe in a long-term value of this project. A code base in managed code is more approachable for developers and thus easier to extend and maintain. Even if we never see this work upstream, it helped us to better understand the boundary between runtime and JIT compiler, and who knows, it might will help us to integrate RyuJIT into Mono one day 😉

We should also note that IRuntimeInformation can be implemented by any other .NET VM: Hello CoreCLR folks 👋

If you are curious about this project, ping us on our Gitter channel.


Appendix: Converting Stack-Based OpCodes into Register Operations

Since the target language was LLVM IR, we had to build a translator that converted the stack-based operations from IL into the register-based operations of LLVM.

Since many potential target are register based, we decided to design a framework to make it reusable of the part where we interpret the IL logic. To this goal, we implemented an engine to turn the stack-based operations into the register operations.

Consider the ADD operation in IL. This operation pops two operands from the stack, performing addition and pushing back the result to the stack. This is documented in ECMA 335 as follows:

 Stack Transition: ..., value1, value2 -> ..., result 

The actual kind of addition that is performed depends on the types of the values in the stack. If the values are integers, the addition is an integer addition. If the values are floating point values, then the operation is a floating point addition.

To re-interpret this in a register-based semantics, we treat each pushed frame in the stack as a different temporary value. This means if a frame is popped out and a new one comes in, although it has the same stack depth as the previous one, it’s a new temporary value.

Each temporary value is assigned a unique name. Then an IL instruction can be unambiguously presented in a form using temporary names instead of stack changes. For example, the ADD operation becomes

Temp3 := ADD Temp1 Temp2 

Other than coming from the stack, there are other sources of data during evaluation: local variables, arguments, constants and instruction offsets (used for branching). These sources are typed differently from the stack temporaries, so that the downstream processor (to talk in a few) can properly map them into their context.

A third problem that might be common among those target languages is the jumping target for branching operations. IL’s branching operation assumes an implicit target should the result be taken: The next instruction. But branching operations in LLVM IR must explicitly declare the targets for both taken and not-taken paths. To make this possible, the engine performs a pre-pass before the actual execution, during which it gathers all the explicit and implicit targets. In the actual execution, it will emit branching instructions with both targets.

As we mentioned earlier, the execution engine is a common layer that merely translates the instruction to a more generic form. It then sends out each instruction to IOperationProcessor, an interface that performs actual translation. Comparing to the instruction received from ICompiler, the presentation here, OperationInfo, is much more consumable: In addition to the op codes, it has an array of the input operands, and a result operand:

public class OperationInfo { ... ... internal IOperand[] Operands { get; set; } internal TempOperand Result { get; set; } ... ... } 

There are several types of the operands: ArgumentOperand, LocalOperand, ConstOperand, TempOperand, BranchTargetOperand, etc. Note that the result, if it exists, is always a TempOperand. The most important property on IOperand is its Name, which unambiguously defines the source of data in the IL runtime. If an operand with the same name comes in another operation, it unquestionably tells us the very same data address is targeted again. It’s paramount to the processor to accurately map each name to its own storage.

The processor handles each operand according to its type. For example, if it’s an argument operand, we might consider retrieving the value from the corresponding argument. An x86 processor may map this to a register. In the case of LLVM, we simply go to fetch it from a named value that is pre-allocated at the beginning of method construction. The resolution strategy is similar for other operands:

  • LocalOperand: fetch the value from pre-allocated address
  • ConstOperand: use the const value carried by the operand
  • BranchTargetOperand: use the index carried by the operand

Since the temp value uniquely represents an expression stack frame from CLR runtime, it will be mapped to a register. Luckily for us, LLVM allows infinite number of registers, so we simply name a new one for each different temp operand. If a temp operand is reused, however, the very same register must as well.

We use LLVMSharp binding to communicate with LLVM.

Ludovic Henry, Miguel de Icaza, Aleksey Kliger, Bernhard Urban and Ming Zhou During the 2018 Microsoft Hack Week, members of the Mono team explored the idea of replacing the Mono’s code generation engine written in C with a code generation engine written in C#. <title type="html">Introducing Mono on AIX and IBM i</title> 2018-05-29T00:00:00+00:00 2018-05-29T00:00:00+00:00 https://www.mono-project.com/news/2018/05/29/mono-on-aix-and-ibm-i

Note: This is a guest post by Calvin Buckley (@NattyNarwhal on GitHub) introducing the community port of Mono to IBM AIX and IBM i. If you’d like to help with this community port please contact the maintainers on Gitter.

C# REPL running under IBM i

You might have noticed this in the Mono 5.12 release notes, Mono now includes support for IBM AIX and IBM i; two very different yet (mostly!) compatible operating systems. This post should serve as an introduction to this port.

What does it take to port Mono?

Porting Mono to a new operating system is not as hard as you might think! Pretty much the entire world is POSIX compliant these days, and Mono is a large yet manageable codebase due to a low number of dependencies, use of plain C99, and an emphasis on portability. Most common processor architectures in use are supported by the code generator, though more obscure ISAs will have some caveats.

Pretty much all of the work you do will be twiddling #ifdefs to accommodate for the target platform’s quirks; such as missing or different preprocessor definitions and functions, adding the platform to definitions so it is supported by core functionality, and occasionally having to tweak the runtime or build system to handle when the system does something completely differently than others. In the case of AIX and IBM i, I had to do all of these things.

For some background on what needed to happen, we can start by giving some background on our target platforms.

Both of our targets run on 64-bit PowerPC processors in big endian mode. Mono does support PowerPC, and Bernhard Urban maintains it. What is odd about the calling conventions on AIX (shared occasionally by Linux) is the use of function descriptors, which means that pointers to functions do not point to code, but instead point to metadata about them. This can cause bugs in the JIT if you are not careful to consume or produce function descriptors instead of raw pointers when needed. Because the runtime is better tested on 64-bit PowerPC, and machines are fast enough that the extra overhead is not significant, we always build a 64-bit runtime.

In addition to a strange calling convention, AIX also has a different binary format - that means that currently, the ahead-of-time compiler does not work. While most Unix-like operating systems use ELF, AIX (and by extension, IBM i for the purposes of this port) use XCOFF, a subset of the Windows PE binary format.

AIX is a Unix (descended from the System V rather than the BSD side of the family) that runs on PowerPC systems. Despite being a Unix, it has some quirks of its own, that I will describe in this article.

Unix? What’s a Unix?

IBM i (formerly known as i5/OS or OS/400) is decidedly not a Unix. Unlike Unix, it has an object-based filesystem where all objects are mapped into a single humongous address space, backed on disk known as single level storage – real main storage (RAM) holds pages of objects “in use” and acts as a cache for objects that reside permanently on disk. Instead of flat files, IBM i uses database tables as the means to store data. (On IBM i, all files are database tables, and a file is just one of the “object types” supported by IBM i; others include libraries and programs.) Programs on IBM i are not simple native binaries, but instead are “encapsulated” objects that contain an intermediate form, called Machine Interface instructions, (similar to MSIL/CIL) that is then translated and optimized ahead-of-time for the native hardware (or upon first use); this also provides part of the security model and has allowed users to transition from custom CISC CPUs to enhanced PowerPC variants, without having to recompile their programs from the original source code.

This sounds similar to running inside of WebAssembly rather than any kind of Unix – So, then, how do you port programs dependent on POSIX? IBM i provides an environment called PASE (Portable Application Solutions Environment) that provides binary compatibility for AIX executables, for a large subset of the AIX ABI, within the IBM i. But Unix and IBM i are totally different; Unix has files and per-process address spaces, and IBM i normally does not, so how do you make these incongruent systems work?

To try to bridge the gap, IBM i also has an “Integrated File System” that supports byte-stream file objects in a true hierarchical file system directory hierarchy. For running Unix programs that expect their own address space, IBM i provides something called “teraspace” that provides a large private address space per process or job. This requires IBM i to completely changes the MMU mode and does a cache/TLB flush every time it enters and exits the Unix world, making system calls somewhat expensive; in particular, forking and I/O. While some system calls are not implemented, there are more than enough to port non-trivial AIX programs to the PASE environment, even with its quirks and performance limitations. You could even build them entirely inside of the PASE environment.

A port to the native IBM i environment outputting MI code with the ahead of time compiler has been considered, but would take a lot of work to write an MI backend for the JIT, use the native APIs in the runtime, and handle how the environment is different from anything else Mono runs on. As such, I instead PASE and AIX for the ease of porting existing POSIX compatible code.

What happened to port it?

The port came out of some IBM i users expressing an interest in wanting to run .NET programs on their systems. A friend of mine involved in the IBM i community had noticed I was working on a (mostly complete, but not fully working) Haiku port, and approached me to see if it could be done. Considering that that I now had experience with porting Mono to new platforms, and there was already a PowerPC JIT, I decided to take the challenge.

The primary porting target was IBM i, with AIX support being a by-product. Starting by building on IBM i, I set up a chroot environment to work in, (chroot support was added to PASE fairly recently), setting up a toolchain with AIX packages. Initial bring-up of the port happened on IBM i, up to the point where the runtime was built, but execution of generated code was not happening. One problem with building on IBM i, however, is that the performance limitations really start to show. While building took the same amount of time on the system I had access to (dual POWER6, taking about roughly 30 minutes to build the runtime) as AIX due to it mostly being computation, the configure script was extremely impacted due to its emphasis on many small reads and writes with lots of forking. Whereas it took AIX 5 minutes and Linux 2 minutes to run through the configure script, it took IBM i well over an hour to run through all of it. (Ouch!)

At this point, I submitted the initial branch as a pull request for review. A lot of back and forth went on to work on the underlying bugs as well as following proper style and practices for Mono. I set up an AIX VM on the machine, and switched to cross-compiling from AIX to IBM i; targeting both platforms with the same source and binary. Because I was not building on IBM i any longer, I had to periodically copy binaries over to IBM i, to check if Mono was using missing libc functions or system calls, or if I had tripped on some behaviour that PASE exhibits differently from AIX. With the improved iteration time, I could start working on the actual porting work much more quickly.

To help with matters where I was unsure exactly how AIX worked, David Edelsohn from IBM helped by explaining how AIX handles things like calling conventions, libraries, issues with GCC, and best practices for dealing with porting things to AIX.

What needed to change?

There are some unique aspects of AIX and the subset that PASE provides, beyond the usual #ifdef handling.

What did we start with?

One annoyance I had was how poor the GNU tools are on AIX. GNU binutils are effectively useless on AIX, so I had to explicitly use IBM’s binutils, and deal with some small problems related to autotools with environment variables and assumption of GNU ld features in makefiles. I had also dealt with some issues in older versions of GCC (which is actually fairly well supported on AIX, all things considered) that made me upgrade to a newer version. However, GCC’s “fixincludes” tool to try to mend GCC compatibility issues in system header files in fact mangled them, causing them to be missing some definitions found in libraries. (Sometimes they were in libc, but never defined in the headers in the first place!)

Improper use of function pointers was sometimes a problem. Based on the advice of Bernhard, there was a problem with the function descriptors #ifdefs, which had caused a mix-up interpreting function pointers as code. Once that had been fixed, Mono was running generated code on AIX for the first time – quite a sight to behold!

What’s a “naidnE?”

One particularly nerve-racking issue that bugged me while trying to bootstrap was with the Decimal type returning a completely bogus value when dividing, causing a non-sense overflow condition. Because of constant inlining, this occurred when building the BCL, so it was hard to put off. With some careful debugging from my friend, comparing the variable state between x86 and PPC when dividing a decimal, we had determined exactly where the incorrect endianness handling had taken place and I had came up with a fix.

While Mono has historically handled different endianness just fine, Mono has started to replace portions of its own home-grown BCL with CoreFX, (the open-source Microsoft BCL) and it did not have the same rigor towards endianness issues. Mono does patch CoreFX code, but it sometimes pulls in new code that has not had endianness (or other such possible compatibility issues) worked out yet and thus requires further patching. In this case, the code had already been fixed for big endian before, but pulling in updated code from CoreFX had created a new problem with endianness.

What’s “RTLD_MEMBER?”

On AIX, there are two ways to handle libraries. One is your typical System V style linking with .so libraries; this isn’t used by default, but can be forced. The other way is the “native” way to do it, where objects are stored in an archive (.a) typically used for holding objects used for static linking. Because AIX always uses position-independent code, multiple objects are combined into a single object and then inserted into the archive. You can then access the library like normal. Using this technique, you can even fit multiple shared objects of the same version into a single archive! This took only minimal changes to support; I only had to adjust the dynamic library loader to tell it to look inside of archive files, and some build system tweaks to point it to the proper archive and objects to look for. (Annoyingly, we have to hardcode some version names of library objects. Even then, the build system still needs revision for cases when it assumes that library names are just the name and an extension.)

What’s “undefined behaviour?”

When Mono tries to access an object reference, and the reference (a pointer) is null, (that is, zero) Mono does not normally check to see if the pointer is null. On most operating systems, when a process accesses invalid memory such as a null pointer, it sends the process a signal (such as SIGSEGV) and if the program does not handle that signal, it will terminate the program. Normally, Mono registers a signal handler, and instead of checking for null, it would just try to dereference a null pointer anyways to let the signal handler interrupt and return an exception to managed code instead. AIX doesn’t do that – it lets programs dereference null pointers anyway! What gives?

Accessing memory via a null pointer is not actually defined by the ANSI C standards – this is a case of a dreaded undefined behaviour. Mono relied on the assumption that most operating systems did it in the typical way of sending a signal to the process. What AIX instead does is to implement a “null page” mapped at 0x0 and accepts reads and writes to it. (You could also execute from it, but since all zeroes is an invalid opcode on PowerPC, this does not do much but throw an illegal instruction signal at the process.) This is a historical decision, relating back to code optimizations implemented in older IBM compilers made where they used speculative execution in compiler-generated code during the 1980s for improved performance when evaluating complex logical expressions. Because we cannot rely on handling a signal to catch the null dereference, we can instead force the behaviour to always check if pointers are null, (normally reserved for runtime debugging) to be on all the time.

What’s so boring about TLS?

BoringSSL is required to get modern TLS required by newer websites. The build system, instead of autotools and make, is CMake based. Luckily, this worked fine on AIX, though I had to apply some massaging for it to do 64-bit library mangling. For a while, I was stumped by an illegal instruction error, that turned out to be due to not linking in pthread to the library, and it not warning about it.

It turns out that even though BoringSSL was now working, one cipher suite (secp256r1) was not, so sites using that cipher were broken. To try to test it, I had gone “yak shaving” to build what was needed for the test harness according to the README; Ninja and Go. I had a heck of a time trying to build Go on a PPC Linux system to triage, but as it turned out, I did not actually need it anyway – Mono had tweaked the build system so that it was not needed after all; I just had to flip a CMake flag to let it build the tests and run them manually. After figuring out what exactly was wrong, it turned out to be an endianness issue in an optimized path. A fix was attempted for it, but in the end, only disabling it worked and let the cipher run fine on big endian PowerPC. Since the code came from Google code that has been rewritten in both BoringSSL and OpenSSL upstream’s latest sources, it is due to be replaced the next time Mono’s BoringSSL fork gets updated.

What else?

I had an issue with I/O getting some spurious and strange issues with threading. Threads would complain that they had an unexpected errno of 0. (indicating success) What happened was that AIX does not assume that all programs are thread-safe by default, so errno was not thread-local. One small #define later, and that was fixed. (Miguel de Icaza was amused that some operating systems still consider thread safety to be an advanced feature. 🙂)

We also found a cosmetic issue with uname. Most Unices put their version in the release field of the uname structure, and things like the kernel type in the version field. AIX and PASE however, put the major version in the version field, and the minor version in the release field. A simple sprintf for the AIX case was enough to fix this.

PASE has many quirks – this necessitated some patches to work around deficiencies; from bugs to unimplemented functions. I aim to target IBM i 7.1 or newer, so I worked around some bugs that have been fixed in newer versions. A lot of this I cleaned up with some more preprocessor definitions.

What’s next?

Now that Mono runs on these platforms, there’s still a lot of work left to be done. The ahead of time compiler needs to be reworked to emit XCOFF-compatible code, libgdiplus needs to be ported, Roslyn is broken on ppc64be, continuous integration would be useful to detect build failures, the build system is still a bit weird regarding AIX libraries, and plenty more where that came from. Despite all this, the fact the port works well enough already in its current state should provide a solid foundation to work with, going forward.

Calvin Buckley <title type="html">Mono and WebAssembly - Updates on Static Compilation</title> 2018-01-16T00:00:00+00:00 2018-01-16T00:00:00+00:00 https://www.mono-project.com/news/2018/01/16/mono-static-webassembly-compilation

As you may know we have been working on bringing Mono to the WebAssembly platform. As part of the effort we have been pursuing two strategies; one that uses the new Mono IL interpreter to run managed code at runtime, and one that uses full static (AOT) compilation to create one .wasm file that can be executed natively by the browser.

We intend the former to be used for quickly reloading C# code and prototyping and the latter for publishing your final application, with all the optimizations enabled. The interpreter work has now been integrated into Mono’s source code and we are using it to develop, port and tune the managed libraries to work on WebAssembly.

This post is about the progress that we have been making on doing static compilation of .NET code to run on WebAssembly.

mono-wasm in action

WebAssembly static compilation in Mono is orchestrated with the mono-wasm command-line tool. This program takes IL assemblies as input and generates a series of files in an output directory, notably an index.wasm file containing the WebAssembly code for your assemblies as well as all other dependencies (the Mono runtime, the C library and the mscorlib.dll library).

$ cat hello.cs class Hello { static int Main(string[] args) { System.Console.WriteLine("hello world!"); return 0; } } $ mcs -nostdlib -noconfig -r:../../dist/lib/mscorlib.dll hello.cs -out:hello.exe $ mono-wasm -i hello.exe -o output $ ls output hello.exe index.html index.js index.wasm mscorlib.dll 

mono-wasm uses a version of the Mono compiler that, given C# assemblies, generates LLVM bitcode suitable to be passed to the LLVM WebAssembly backend. Similarly, we have been building the Mono runtime and a C library with a version of clang that also generates LLVM WebAssembly bitcode.

Until recently, mono-wasm was linking all the bitcode into a single LLVM module then performing the WebAssembly code generation on it. While this created a functional .wasm file, this had the downside of taking a significant amount of time (half a minute on a recent MacBook Pro) every time we were building a project as a lot of code was in play. Some of the code, the runtime bits and the mscorlib.dll library, never changed and yet were still being processed for WebAssembly code generation every time.

We were thrilled to hear in late November of last year that the LLVM linker (lld) was getting WebAssembly support.

Since then, we changed our mono-wasm tool to perform incremental compilation of project dependencies into separate .wasm files, and we integrated lld’s new WebAssembly driver in the tool. Thanks to this approach, we now perform WebAssembly code generation only when required, and in our testing builds now complete in less than a second once the dependencies (runtime bits and mscorlib.dll) have already been compiled into WebAssembly.

mono-wasm's new linking phase

Additionally, mono-wasm used to use the LLVM WebAssembly target to create source files that would then be passed to the Binaryen toolchain to create the .wasm code. We have been testing the backend’s ability to generate .wasm object files directly (with the wasm32-unknown-unknown-wasm triple) and so far it seems promising enough that we changed mono-wasm accordingly. We also noticed a slight decrease in build time.

Old toolchain New toolchain (First Compile) New toolchain (Rebuild)
Full application build ~40s ~30s <1s
Hello World program ~40s <1s <1s

There is still a lot of work to do on bringing C# to WebAssembly, but we are happy with this new approach and the progresses we are making. Feel free to watch this space for further updates. You can also track the work on the mono-wasm GitHub repository.

For those of you that want to take this for a spin you can download a preview release, unzip and run “make” in the samples. This currently requires MacOS High Sierra to run.

Laurent Sansonetti As you may know we have been working on bringing Mono to the WebAssembly platform. As part of the effort we have been pursuing two strategies; one that uses the new Mono IL interpreter to run managed code at runtime, and one that uses full static (AOT) compilation to create one .wasm file that can be executed natively by the browser. <title type="html">Mono’s New .NET Interpreter</title> 2017-11-13T00:00:00+00:00 2017-11-13T00:00:00+00:00 https://www.mono-project.com/news/2017/11/13/mono-interpreter

Mono is complementing its Just-in-Time compiler and its static compiler with a .NET interpreter allowing a few new ways of running your code.

In 2001 when the Mono project started, we wrote an interpreter for the .NET instruction set and we used this to bootstrap a self-hosted .NET development environment on Linux.

At the time we considered the interpreter a temporary tool that we could use while we built a Just-in-Time (JIT) compiler. The interpreter (mint) and the JIT engine (mono) existed side-by-side until we could port the JIT engine to all the platforms that we supported.

When generics were introduced, the engineering cost of keeping both the interpreter and the JIT engine was not worth it, and we did not see much value in the extra work to keep it around, so we removed the interpreter.

We later introduced full static compilation of .NET code. This is a technology that we introduced to target platforms that do not allow for dynamic code generation. iOS was the main driver for this, but it opened the doors to allow Mono to run on gaming consoles like the PlayStation and the Xbox.

The main downside of full static compilation is that a completely new executable has to be recreated every time that you update your code. This is a slow process and one that was not suitable for interactive development that is practiced by some.

For example, some game developers like to adjust and tweak their game code, without having to trigger a full recompilation. The static compilation makes this scenario impractical, so they resort to embedding a scripting language into their game code to quickly iterate and tune their projects.

This lack of .NET dynamic capabilities also prevented many interesting uses of .NET as a teaching or prototyping tool in these environments. Things like Xamarin Workbooks, or simple scripting could not use .NET languages and had to resort to other solutions on these platforms.

Frank Krueger, while building his Continuous IDE, needed such environment on iOS so much that he wrote his own .NET interpreter using F# to bring his vision of having a complete development environment for .NET on the iPad.

To address these issues, and to support some internal Microsoft products, we brought Mono’s interpreter back to life, and it is back with a twist.

New Mono Interpreter

We resuscitated Mono’s old interpreter and upgraded its .NET support, adding the support for generics and upgraded it to run .NET as it exists in 2017. Next is adding support for mixed-mode execution.

It is one of the ways that Mono runs on WebAssembly today for example (the other being the static compilation using LLVM)

The interpreter is now part of mainline Mono and it passes a large part of our extensive test suites, you can use it today when building Mono from source code, like this:

$ mono --interpreter yourassembly.exe ... 

Mixed Mode Execution

While the interpreter alone is now in great shape, we are currently working on a configuration that will allow us to mix both interpreted code with statically compiled code or Just-in-Time compiled code, we call this mixed mode execution.

For platforms like iOS, PlayStation and Xbox, this means that you can precompile your core libraries or core application, and still support loading and executing code dynamically. Gaining the benefits of having all your core libraries optimized with LLVM, but still have the flexibility of running some dynamic code.

This will allow game developers to prototype, experiment and tweak their games using .NET languages on their system without having to recompile their applications.

It will open the doors for scriptable applications on device using .NET languages as well.

Future work

We are extending the capabilities of the interpreter to handle various interesting scenarios. These are some of the projects ahead of us:

Improvements for Statically Compiled Mono

The full ahead-of-time compilation versions of Mono (iOS, Consoles) do not ship with an implementation of System.Reflection.Emit. This made sense as the capability could not be supported, but now that we have an interpreter, we can.

There are several uses for this.

The System.Linq.Expressions API which is used extensively by many advanced scenarios like Entity Framework or by users leveraging the C# compiler to parse expressions into expression trees, you have probably seen the code in scenarios like this:

Expression sum = a + b; var adder = sum.Compile (); adder (); 

In Full AOT scenarios, the way that we made Entity Framework and the above work was to ship an interpreter for the above Expression class. This expression interpreter has limitations, and is also a large one.

By enabling System.Reflection.Emit powered by the interpreter we can remove a lot of code.

This will also allow the scripting languages that have been built for .NET to work on statically compiled environments, like IronPython, IronRuby and IronScheme.

To allow this, we are completing the work for mixed-mode execution. That means that the interpreted code complements existing statically compiled .NET code.

Better Isolation

Earlier on this post, I mentioned that one of the idioms that we previously failed to address was the hot-reloading of code by developers that deployed their app and tweaked their game code (or their code for that matter) live.

We are completing our support for AppDomains to enable this scenario.

Researching Mixed Mode Options

The interpreter is a lighter option to run some code. We found that certain programs can run faster by being interpreted than being executed with the JIT engine.

We intend to explore a mixed mode of execution, sometimes called tiered compilation.

We could instruct the interpreter to execute code that is known to not be performance sensitive - for example, static constructors or other initialization code that only runs once to reduce both memory usage, generated code usage and execution time.

Another consideration is to run code in interpreted mode, and if we exceed some threshold switch to a JIT compiled implementation of the method, or use attributes to annotate methods that are worth the trouble and methods that are not worth the trouble optimizing.

Miguel de Icaza Mono is complementing its Just-in-Time compiler and its static compiler with a .NET interpreter allowing a few new ways of running your code. <title type="html">Mono’s 2017 Google Summer of Code</title> 2017-10-05T00:00:00+00:00 2017-10-05T00:00:00+00:00 https://www.mono-project.com/news/2017/10/05/google-summer-of-code

This Summer of Code, the Mono project had many exciting submissions. It’s been great to see what our applicants have been able to accomplish. Some were very familiar with the codebases they worked on, while others had to learn quickly. Let’s summarize how they spent this summer.

CppSharp Defect Removal And General Feature Work

Mohit Mohta and Kimon Topouzidis chose to address a number of bugs and add features to the code of CppSharp. Std::string was added, stacks were fixed, options were added, structure packing was added, and primitive types support was improved. They both seem to have learned a lot about the workflow of methodical debugging of systems code.

Clang Sanitizers

Many software bugs don’t result in immediate errors and crashes. Some corrupt program state in such a way that a cryptic error is seen much later. In the worst case, each such delayed crash may have a different stack trace. Many of these bugs have root causes that can be spotted in a running program the second they go wrong. The tooling to do so has only recently been able to spot race conditions, which can be some of the worst of these bugs. Clang has integrated a number of such sanitizers.

Armin Hasitzka chose to use clang’s runtime sanitizers for race conditions and for memory safety to automatically catch Mono bugs. In his efforts, he ran into false positives and legitimate bugs alike. He fixed a number of bugs, helped silence false positives, and left behind infrastructure to automatically catch regressions as they appear.

CppSharp Qt Bindings And Maintenance

Dimitar Dobrev is familiar to the Mono project. He has done the Google Summer of Code with Mono in 2015, and has helped maintain CppSharp since.

This summer, he sought to commit his time to developing the Qt bindings further. In the development of CppSharp, the problem of mapping C# types onto C++ generics arose. There were many potential solutions, but very few retained the feeling of the underlying API. After some experimentation, the hard problems were solved.

As the summer came to an end, he fixed the minor issues that arose during tests of QtSharp. The burden of maintaining the project and responding to bugs from the community did not stop for Dimiar, resulting in partial completion of milestones yet significant overall contribution. Development of QtSharp proceeds alongside his ongoing maintenance work and contributions.

MonoDevelop C/C++ Extension Feature Enhancements

The CBinding extension for MonoDevelop adds a lot of great functionality for working with C and C++ projects. It is still a work in progress, and Anubhav Singh wanted to add some more functionality. He focused on bringing support for Windows compilers and for CMake. He also chose this moment to update the extension to reflect the newer APIs of MonoDevelop. In the process, he had to begin the process of upstreaming some changes to MonoDevelop.

C# Compiler Caching with CSCache

Something often mentioned around a warm laptop with spinning fans is how nice C developers have it. CCache enables someone to recompile large C projects after minor modifications in a very small amount of time. Going beyond the build system skipping recompilation, the system compiler is wrapped by a program that spits back the old output in a fraction of the time that a compiler takes. This is a trick that managed languages haven’t learned until now.

Daniel Calancea created a tool which wraps mcs and understands the commands sent to it. If it is invoked with the same files and the same options twice, it checks that all of the hashes of all of the files are the same between runs. If so, it returns the output of the C# compiler the first time. Equally important is that this tool will return the same return codes as the first run, and will integrate as seamlessly into any build system as ccache does. It even reports the same warnings that the initial compiler did.

Daniel published this tool for Windows and Linux to Nuget.

Import of System.IO.Pipes.PipeStream from CoreFX

Mono’s implementation of System.IO.Pipes has historically not had some features available to the CLR. After msbuild was made open source, users found that Mono unfortunately could not build in parallel because of the API differences. CoreFX brought with it the promise of a System.IO.Pipes.PipeStream that would enable parallel msbuild. CoreFX’s API surface was not strictly a superset of Mono’s though. Mono implemented a couple of endpoints that CoreFX did not, and we used those endpoints in other places in the BCL.

Georgios Athanasopoulos chose to do the work required to make Mono work with CoreFX’s PipeStream. Modifying both CoreFX and Mono was required. Mono’s build system had to choose to use the new implementation files, rather than looking for them in the BCL directory. His work was a success. Finishing early, he chose to experimentally enable a parallel msbuild and test it. Things seem to be mostly working.

Lamdba Debugger Support

Often when debugging C# code in the middle of a large project, it’s important to invoke code to understand how variables are behaving in a segment of code. Sometimes, the code that one wishes to invoke hasn’t been written yet. The developer is left squinting at variables, invoking existing methods, and manually running code in their head. Much better would be to enable the developer to write a new function and invoke it on the variables in question. Interpreted languages offer support for this without much trouble usually because code doesn’t have as much metadata associated with it, and because they have integrated compilers for the debugged languages.

This summer, Haruka Matsumoto worked on a system that enables developers to use these arbitrary code snippets entered into the debugger. Mono runs the debugger and the debuggee in separate running instances of the runtime. As the running mono runtime for the application being debugged doesn’t have access to a C# compiler, this code has to be compiled by the debugger. The debugger uses Roslyn to compile the code segments, and this assembly is sent to the debugged application’s runtime.

This is made more difficult by the fact that the debugger is trying to run a Lambda that has access to the variables and methods defined in the functions the debugger is currently debugging. Shorter method names need to resolve to what they would if the original function had used them, and variables should be accessible by name. Issues with private types are potentially unsolvable without special casing, as mono prevents arbitrary code from modifying private fields. Haruka handled these and other difficult considerations, and delivered a very strong prototype of Lambda support in the integrated runtime debugger. It should be immediately useful for anybody who spends a lot of time using mono to debug C# code.

Import Synchronization Primitives from CoreRT

It is often the case that small differences in the implementations of core runtime functions can result in perceived bugs introduced by switching runtimes. The differences are due to depending on API behavior that may not be entirely defined by the specification, but works in a certain case on a certain machine. This sensitivity is nowhere more baffling to debug than around threading and synchronization primitives. The .NET Core Project contains an open-source, cross-platform implementation of C# synchronization primitives. We expect this to receive much community development and user testing. We hoped to import them to gain both consistent behavior and quality.

This summer, Alexander Efremov imported EventWaitHandle, AutoResetEvent, ManualResetEvent, Mutex and Semaphore into Mono. He both manually integrated these libraries into Mono and automated the process of building them. System.Private.CoreLib.Native was successfully added to mono. System.Threading was identified as the next API to import, in order to enable importing Thread from CoreFX.

Alexander Kyte This Summer of Code, the Mono project had many exciting submissions. It’s been great to see what our applicants have been able to accomplish. Some were very familiar with the codebases they worked on, while others had to learn quickly. Let’s summarize how they spent this summer. <title type="html">Mono 5.2 is out!</title> 2017-08-14T00:00:00+00:00 2017-08-14T00:00:00+00:00 https://www.mono-project.com/news/2017/08/14/mono-5-2-is-out

Mono 5.2 is out in the stable channel !

Check out our release notes for more details about what is new on Mono 5.2.

This release was made up of nearly 1000 commits since Mono 5.0 and is the result of many months of work by the Mono team and contributors!

Alexander Köplinger Mono 5.2 is out in the stable channel ! <title type="html">Mono’s New Profiler API</title> 2017-08-14T00:00:00+00:00 2017-08-14T00:00:00+00:00 https://www.mono-project.com/news/2017/08/14/new-profiler-api

As part of our ongoing efforts to improve Mono’s profiling infrastructure, in Mono 5.6, we will be shipping an overhaul of Mono’s profiler API. This is the part of Mono’s embedding API that deals with instrumenting managed programs for the purpose of collecting data regarding allocations, CPU usage, code coverage, and other data produced at runtime.

The old API had some limitations that prevented some features and capabilities from being implemented. The upgrade to the API will allow us to:

  • Reconfigure the profiling features at runtime
  • Look at the values of incoming parameters and return values.
  • Ability to instrument the managed allocators, thus allowing these to be profiled.

This is what we did.

Reconfigure Profiling at Runtime

We wanted the ability to reconfigure the profiling option at runtime. This was not possible with the old API because none of the API functions took an argument representing the profiler whose options should be changed.

This means that it was only possible to change options of the most recently installed profiler, and this was not guaranteed to be the one you wanted. Additionally, doing so it was not thread safe.

Why would we want to change profiling options at runtime, you might wonder? Suppose you know that only a particular area of your program has performance issues and you’re only interested in data gathered while your program is executing that code. With this capability, you can turn off profiling features such as allocations and statistical sampling until you get to the point you want to profile, and then turn them on programmatically. This can significantly reduce the noise caused by unneeded data in a profiling session.

Call Context Introspection

Call context introspection allows a profiler to instrument the prologue and/or epilogue of any method and gain access to arguments (including the this reference), local variables, and the return value.

This opens up countless possibilities for instrumenting framework methods to learn how a program is utilizing facilities like the thread pool, networking, reflection and so on. It can also be useful for debugging, especially if dealing with assemblies for which the source code is not available.

Instrumenting Managed Allocators

Another improvement we were able to make thanks to the redesigned API was to use instrumented managed allocators when profiling. In the past, we would disable managed allocators entirely when profiling. This would slow down allocation-heavy programs significantly. Now, we insert a call back to the profiler API at the end of managed allocators if profiling is enabled.

Simpler to Work With

On top of these major features, the new API is also simply more pleasant to use. In particular, you no longer have to worry about setting event flags; you simply install a callback and you will get events. Also, you no longer have to use callback installation functions which take multiple callback arguments. Every kind of callback now has exactly one function to install it. This means you will no longer have code such as mono_profiler_install_assembly (NULL, NULL, load_asm, NULL); where it can be unclear which argument corresponds to which callback. Finally, several unused, deprecated, or superseded features and callbacks have been removed.

Breaking Change

The new API completely replaces the old one, so this is a breaking change. We try very hard to not break API/ABI compatibility in Mono’s embedding API, but after much consideration and evaluation of the alternatives, a breaking change was deemed to be the most sensible way forward. To aid with the transition to the new API, Mono will detect and refuse to load profiler modules that use the old API. Developers who wish to support both the old and new APIs by compiling separate versions of their profiler module may find the new MONO_PROFILER_API_VERSION macro useful.

A presentation with more details is available in PowerPoint and PDF formats.

Alex Rønne Petersen As part of our ongoing efforts to improve Mono’s profiling infrastructure, in Mono 5.6, we will be shipping an overhaul of Mono’s profiler API. This is the part of Mono’s embedding API that deals with instrumenting managed programs for the purpose of collecting data regarding allocations, CPU usage, code coverage, and other data produced at runtime.
Welcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domain
alert( getComputedStyle(example).width )

Output:

scrollbar in HTML table Example #4 We can use the table row ,table headers ,table data,tags are used in the HTML,using

tag we will enable the styles itself i.e)

Code:

Output:

scrollbar in HTML table Example #5 Here we are going to see the Various Types of Scroll Boxes in HTML

Colored Scroll Boxes Customized Scrollbars Scroll Box with images Scroll Box with Borders

  1. Colored Scroll Boxes In the scroll box option, we also added the different types of colors in the text box space areas Example below:

Code:

Welcome to my domain.Welcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domain
<script src="js/angular1.4.8.min.js"></script> <script> var app = angular.module("https://www.appsheet.com/template/AndroidAddonLandingPage?docId=1tpuMtQfWWV6xTZOSOpGUzLgdFiVzS9_I5O4N7ldVLpo&appName=Your%20N", []); app.controller("cadd", function($scope) { $scope.mySty = { "color": "white", "background-color": "blue", "font-size": "50px", "padding": "25px" }

?????Github????Azure(MS.AKA).DASH??

This is the First paragraph of inside the section class

Second Heading

This is the Second paragraph of inside the section class

Third Heading

This is the Third paragraph of inside the section class

Fourth Heading

This is the Fourth paragraph of inside the section class

<style> h1 { text-shadow: 2px 2px; } h2 { text-shadow: 2px 2px red; } h3 { text-shadow: 2px 2px 5px red; } h4 { color: white; text-shadow: 2px 2px 4px #000000; } h5 { text-shadow: 0 0 3px #FF0000; } h6 { text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF; } p { color: white; text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue; } </style>
  <h3>??Moon??Sun:Oracle.Litecoin-Ethereum??Gas???H2???Rain.Drop???Atom</h3>
  <h4>??BCH??BC.Game??????</h4>
  <h5>??BeeHive-Paypal??LuckyFish??TrustDice-BasicAttentionToken</h5>

  <p>????????????????????</p>
  </style>
</script>

Felicia Ann Kelley

?-|{

<script> $(document).ready(function() { $('ul.tabs').tabs(); }); </script> <script src="bootstrap/js/jquery.js"></script> <script src="bootstrap/js/bootstrap.js"></script> <style> div { width: 300px; height: 100px; padding: 15px; background-color: blue; box-shadow: 10px 10px; } </style>
This is a div element with a box-shadow
  <style>
     
  </style>

Zcash.Monero.
Zookeepeer.Wilson.Big?Notation

Bloodsworld.org

Bloodsworld.org

Bloodsworld.org

Bloodsworld.org
Bloodsworld.org

Bloodsworld.org

https://api.dolby.com/media/enhance"

payload = {"audio": { "loudness": { "enable": True, "target_level": -18, "dialog_intelligence": True, "speech_threshold": 15, "peak_limit": -1, "peak_reference": "true_peak" }, "dynamics": {"range_control": { "enable": True, "amount": "medium" }}, "noise": {"reduction": { "enable": True, "amount": "auto" }}, "filter": { "dynamic_eq": {"enable": True}, "high_pass": { "enable": True, "frequency": 80 }, "hum": {"enable": True} }, "speech": { "isolation": { "enable": True, "amount": 70 }, "sibilance": {"reduction": { "enable": True, "amount": "medium" }}, "plosive": {"reduction": { "enable": True, "amount": "medium" }}, "click": {"reduction": { "enable": False, "amount": "medium" }} }, "music": {"detection": {"enable": False}} }} headers = { "Accept": "application/json", "Content-Type": "application/json" }

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)"> Felicia Ann Kelley

Welcome to my domain Name Email
Sivaraman Sivaraman ramansiva57@gmail.com
" + ""; var tr = ""; for (var i = 0; i < result.length; i++) { tr += "" + "" + "" + "" + "" + ""; } idTable.innerHTML = "
Id
HEX
Red
Green
Blue
<script> function backColor() { var c1 = parseInt(r1.value); var c2 = parseInt(r2.value); var c3 = parseInt(r3.value); var fullColor = "rgb(" + c1 + "," + c2 + "," + c3 + ")"; var bck = document.getElementById("bckColor"); bck.style.backgroundColor = fullColor; var h1 = c1.toString(16); var h2 = c2.toString(16); var h3 = c3.toString(16); txtHex.value = "#" + h1 + h2 + h3; } </script> ">

Call API

<script> function callApi() { var api = new XMLHttpRequest(); api.open('GET', 'http://htmlcodeplay.com/api/test.php', true); api.onload = function(data) { result = data.target.response; if (api.status >= 200 && api.status < 400) { var th = "
Name" + "Age" + "Mark" + "Place" + "
" + result[i].name + "" + result[i].age + "" + result[i].mark + "" + result[i].place + "
" + th + tr + "
"; } else { alert("error"); } } api.send(); } </script> <style> div { background: red; width: 100px; height: 100px; } </style>

Move Right Move Left Move Down Move Up

<script> function moveRight() { var cLeft = idDiv.style.marginLeft; cLeft = parseInt(cLeft); idDiv.style.marginLeft = cLeft + 20; } function moveLeft() { var cLeft = idDiv.style.marginLeft; cLeft = parseInt(cLeft); idDiv.style.marginLeft = cLeft - 20; } function moveDown() { var cTop = idDiv.style.marginTop; cTop = parseInt(cTop); idDiv.style.marginTop = cTop + 20; } </script>

Play Pause Stop

Next Previous
Duration
Volume

<script> var _audio = document.getElementById("idAudio"); var _songList = [ { url: "song1.mp3" }, { url: "song2.mp3" }, ]; _currentSong = 0; _audio.src = _songList[_currentSong].url; function playSong() { _audio.play(); } function pauseSong() { _audio.pause(); } function stopSong() { _audio.pause(); _audio.currentTime = 0; } function nextSong() { if (_currentSong == _songList.length - 1) { alert("End of the song, play from first"); _currentSong = 0; } else { _currentSong++; } _audio.src = _songList[_currentSong].url; _audio.play(); } function prevSong() { if (_currentSong == 0) { alert("Starting of the song, play from last"); _currentSong = _songList.length - 1; } else { _currentSong--; } _audio.src = _songList[_currentSong].url; _audio.play(); } _audio.addEventListener("timeupdate", function() { var totDuration = Math.floor(_audio.duration); durationR.max = totDuration; var currentTime = Math.floor(_audio.currentTime); durationR.value = currentTime; lblDuration.innerText = currentTime + "/" + totDuration; }); function seekSong() { var duration = durationR.value; _audio.currentTime = duration; } function changeVolume() { _audio.volume = idVolume.value; } </script>
  • Tab1
  • <style> h1 { text-shadow: 2px 2px; } h2 { text-shadow: 2px 2px blue; }
    QTechBD

    QTechBD

Here you can write the first tab contents or place anything like text box radio button or whatever you want.

<script src="bootstrap/js/jquery.js"></script> <script src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#myCollapsible').on('hidden.bs.collapse', function() { alert('Collapsible element has been completely closed.'); }); }); </script>

?-

<script src="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js"></script>

" }

}); </script>

<style> #grad1 { height: 100px; background: -webkit-linear-gradient(mystic,ash); background: -o-linear-gradient(mystic,ash); background: -moz-linear-gradient(mystic,ash); background: linear-gradient(mystic,ash); } </style>
<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');} .material-icons { font-family: 'Material Icons'; font-weight: normal; font-style: normal; font-size: 1px; line-height: 2;"" letter-spacing: normal; text-transform: none; display: outer-block; white-space: wrap; word-wrap: normal; direction: ltr; -webkit-font-feature-settings: '"new times roman'; -webkit-font-smoothing: antialiased; } </style> by by
search close
<style> .ancestors * { display: block; border: 2px solid lightgrey; color: lightgrey; padding: 3px; margin: 7px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> $(document).ready(function(){ $("span").parentsUntil("div").css({"color": "blue", "border": "2px solid blue"}); }); </script> body (great-great-grandparent)
div (great-grandparent)
    ul (grandparent)
  • parentsUntil()

    This is a solid border whose width is 4px.

    This is a solid border whose width is 4pt.

    This is a solid border whose width is thin.

    This is a solid border whose width is medium;

    This is a solid border whose width is thick.

    This is a a border with four different width.

    Third Line
    Third Line

    Third Line

    This is the Second paragraph of inside the section class

    Third Heading

    This is the Third paragraph of inside the section class

    Fourth Heading

    This is the Fourth paragraph of inside the section class

    Fifth Heading

    This is the Fifth paragraph of inside the section class

    Heading 6
    "> Div1 Content
    • <title>Example of Bootstrap 3 List Groups</title>
      • This is the tab 1, this is active when user click on Tab 1
        This is the tab 2, this is active when user click on Tab 2
        This is the tab 3, this is active when user click on Tab 3
        This is the tab 4, this is active when user click on Tab 4
        <script type="text/javascript" src="js/jquery-2.2.0.min.js"></script> <script type="text/javascript" src="materialize/js/materialize.min.js"></script> <script> $(document).ready(function() { $('ul.tabs').tabs(); }); </script>
      • ??????????????????????
      • ??
      • ??
      • ??
      <script src="bootstrap/js/jquery.js"></script> <script src="bootstrap/js/bootstrap.js"></script>
    • First Line
is the Div Tab2 Tab3 Here you can write the first tab contents or place anything like text box radio button <script src="js/jquery-2.2.0.min.js"></script> <script> $(document).ready(function() { $("#btn").click(function() { $("span").parentsUntil("#d1").css("border", "4px solid black"); }); }); </script> Third Line

Fifth Heading

This is the Fifth paragraph of inside the section class

<script src="js/jquery-2.2.0.min.js"></script> <script> $(document).ready(function() { $("#btn").click(function() { $("h2,h4,h6").css("border", "2px solid blue"); }); }); </script>
<title>Example of Bootstrap 3 Carousel</title> <style type="text/css"> .carousel { background: #2f4357; margin-top: 20px; } .carousel .item img { margin: 0 auto; /* Align slide image horizontally center */ } .bs-example { margin: 20px; } </style> <script src="bootstrap/js/jquery.js"></script> <script src="bootstrap/js/bootstrap.js"></script>

<data ="php/aspx"> $(document).ready(function() { $('#myCollapsible').on('hidden.bs.collapse', function() { alert('Collapsible element has been completely closed.'); }); }); </script>

<style> .box { width: 120px; height: 25px; margin-top: 7px; margin-left: 7px; float: left; } </style> <style type = "text/css"> table.empty { width:350px; border-collapse:separate; empty-cells:hide; } td.empty { padding:5px; border-style:solid; border-width:1px; border-color:#999999; } </style>
Title one Title two
Row Title value value
Row Title value

q h


<
| FAK |

}); </script>

<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');} .material-icons { font-family: 'Material Icons'; font-weight: normal; font-style: normal; font-size: 1px; line-height: 2;"" letter-spacing: normal; text-transform: none; display: outer-block; white-space: wrap; word-wrap: normal;s direction: ltr; -webkit-font-feature-settings: '"new times roman'; -webkit-font-smoothing: antialiased; } </style>
search close

Felicia Ann Kelley

,table headers
Id

Here you can write the first tab contents or place anything like text box radio button or whatever you want.

,table data,tags are used in the HTML,using
tag we will enable the styles itself i.e)

Code:

Output:

scrollbar in HTML table Example #5 Here we are going to see the Various Types of Scroll Boxes in HTML

Colored Scroll Boxes Customized Scrollbars Scroll Box with images Scroll Box with Borders

  1. Colored Scroll Boxes In the scroll box option, we also added the different types of colors in the text box space areas Example below:

Code:

Welcome to my domain.Welcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domain
Border Shadow
</body>
<!DOCTYPE html>
<html>

<head>
	<meta name="viewport" content="width=device-width, initial-scale=1">

	<style>
		ul>li {
			list-style: none;
		}

		ul>li:before {
			color: blue;
			content: "💠";
			font-size: 1em;
			text-shadow: #808080 1px 2px 2px;
			margin-right: 4px;
		}
	</style>

</head>

<body>

	<ul>
		<li>
			<!DOCTYPE html>
			<html>

			<head>
				<meta name="viewport" content="width=device-width, initial-scale=1">

				<style>
					.main {
						display: grid;
						grid-template-columns: repeat(auto-fit, 100px);
						grid-template-rows: repeat(2, 50px);
					}

					div {
						background: 808080;
						border: 3px solid;
						text-align: aside
					}
				</style>
			</head>

			</html>
			<!DOCTYPE html>
			<html>

			<head>
				<meta name="viewport" content="width=device-width, initial-scale=1">

				<style>
					ul>li {
						list-style: none;
					}

					ul>li:before {
						color: blue;
						content: "💠";
						font-size: 1em;
						text-shadow: #808080 1px 2px 2px;
						margin-right: 1px;
					}
				</style>

			</head>

			<body>

				<ul>
					<li>
						<!DOCTYPE html>
						<html>

						<head>
							<meta name="viewport" content="width=device-width, initial-scale=1">

							<style>
								.main {
									display: grid;
									grid-template-columns: repeat(auto-fit, 100px);
									grid-template-rows: repeat(2, 50px);
								}

								div {
									background: 808080;
									border: 3px solid;
									text-align: aside
								}
							</style>
						</head>
						<!DOCTYPE html>
						<html>

						<head>
							<meta name="viewport" content="width=device-width, initial-scale=1">

							<style>
								ul>li {
									list-style: none;
								}

								ul>li:before {
									color: blue;
									content: "💠";
									font-size: 1em;
									text-shadow: #808080 1px 2px 2px;
									margin-right: 1px;
								}
							</style>

						</head>

						<body>

							<ul>
								<li>
									<!DOCTYPE html>
									<html>

									<head>
										<meta name="viewport" content="width=device-width, initial-scale=1">

										<style>
											.main {
												display: grid;
												grid-template-columns: repeat(auto-fit, 100px);
												grid-template-rows: repeat(2, 50px);
											}

											div {
												background: 808080;
												border: 3px solid;
												text-align: aside
											}
										</style>
									</head>

									<!DOCTYPE html>
									<html>

									<head>
										<meta name="viewport" content="width=device-width, initial-scale=1">

										<style>
											.main {
												display: grid;
												grid-template-columns: repeat(auto-fit, 100px);
												grid-template-rows: repeat(2, 50px);
											}

											div {
												background: 808080;
												border: 3px solid;
												text-align: aside
											}
										</style>
									</head>

									<body>

										<div class="main">
											<div>
												<html>

												<head>
													<meta charset="utf-8">
													<title> ฯ|F.|K.</title>
													<meta name="viewport" content="width=device-width, initial-scale=1">
													<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
													<!-- Optional Bootstrap theme -->
													<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.css">

													<style type="text/css">
														/* Custom Styles */
														body {
															position: relative;
															/* required */
														}

														ul.nav-tabs {
															width: 140px;
															margin-top: 20px;
															border-radius: 4px;
															background: #FFfff;
															ABC index: 999;
															border: 2px solid #ddd;
															box-shadow: 1 1px 4px rgba(0, 0, 0, 0.067);
														}

														ul.nav-tabs li {
															margin: 1;
															border-top: 1px solid #808080;
														}

														ul.nav-tabs li:first-child {
															border-top: none;
														}

														ul.nav-tabs li a {
															margin: 0;
															padding: 4px 16px;
															border-radius: 5;
														}

														ul.nav-tabs li.active a,
														ul.nav-tabs li.active a:hover {
															color: #fff;
															background: #0088cc;
															border: 1px solid #0088cc;
														}

														ul.nav-tabs li:first-child a {
															border-radius: 4px 4px 0 0;
														}

														ul.nav-tabs li:last-child a {
															border-radius: 0 0 4px 4px;
														}

														ul.nav-tabs.affix {
															top: 1px;
															/* set the top position of pinned element */
														}

														@media screen and (min-width: 992px) and (max-width: 1199px) {
															ul.nav-tabs {
																width: 180px;
																/* set nav width on medium devices */
															}
														}

														@media screen and (min-width: 1200px) {
															ul.nav-tabs {
																width: 220px;
																/* set nav width on large devices */
															}
														}
													</style>

												</head>

												<body>

													<div class="container">
														<h1>Bootstrap Scrollspy</h1>
														<p class="lead"><i>Scroll this page and see how the nav items are highlighted automatically based on the scroll position.</i></p>
														<div class="row">
															<div class="col-sm-3" id="myScrollspy">
																<ul class="nav nav-tabs nav-stacked" data-offset-top="120" data-spy="affix">
																	<li class="active"><a href="#section1">Section One</a></li>
																	<li><a href="#section2">Section Two</a></li>
																	<li><a href="#section3">Section Three</a></li>
																	<li><a href="#section4">Section Four</a></li>
																	<li><a href="#section5">Section Five</a></li>
																</ul>
															</div>
															<div class="col-sm-9">
																<div id="section1">
																	<h2>Section One</h2>
																	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu sem tempor, varius quam at, luctus dui. Mauris magna metus, dapibus nec turpis vel, semper malesuada ante. Vestibulum id metus ac nisl bibendum scelerisque non non purus. Suspendisse varius nibh non aliquet sagittis. In tincidunt orci sit amet elementum vestibulum. Vivamus fermentum in arcu in aliquam. Quisque aliquam porta odio in fringilla. Vivamus nisl leo, blandit at bibendum eu, tristique eget risus. Integer aliquet quam ut elit suscipit, id interdum neque porttitor. Integer faucibus ligula.</p>
																	<p>Quis quam ut magna consequat faucibus. Pellentesque eget nisi a mi suscipit tincidunt. Ut tempus dictum risus. Pellentesque viverra sagittis quam at mattis. Suspendisse potenti. Aliquam sit amet gravida nibh, facilisis gravida odio. Phasellus auctor velit at lacus blandit, commodo iaculis justo viverra. Etiam vitae est arcu. Mauris vel congue dolor. Aliquam eget mi mi. Fusce quam tortor, commodo ac dui quis, bibendum viverra erat. Maecenas mattis lectus enim, quis tincidunt dui molestie euismod. Curabitur et diam tristique, accumsan nunc eu, hendrerit tellus.</p>
																	<p>Orci facilisis, dignissim tortor vitae, ultrices mi. Vestibulum a iaculis lacus. Phasellus vitae convallis ligula, nec volutpat tellus. Vivamus scelerisque mollis nisl, nec vehicula elit egestas a. Sed luctus metus id mi gravida, faucibus convallis neque pretium. Maecenas quis sapien ut leo fringilla tempor vitae sit amet leo. Donec imperdiet tempus placerat. Pellentesque pulvinar ultrices nunc sed ultrices. Morbi vel mi pretium, fermentum lacus et, viverra tellus. Phasellus sodales libero nec dui convallis, sit amet fermentum sapien auctor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eu elementum nibh, quis varius libero.</p>
																	<p>Nam eget purus nec est consectetur vehicula. Nullam ultrices nisl risus, in viverra libero egestas sit amet. Etiam porttitor dolor non eros pulvinar malesuada. Vestibulum sit amet est mollis nulla tempus aliquet. Praesent luctus hendrerit arcu non laoreet. Morbi consequat placerat magna, ac ornare odio sagittis sed. Donec vitae ullamcorper purus. Vivamus non metus ac justo porta volutpat.</p>
																	<p>Pulvinar leo id risus pellentesque vestibulum. Sed diam libero, sodales eget sapien vel, porttitor bibendum enim. Donec sed nibh vitae lorem porttitor blandit in nec ante. Pellentesque vitae metus ipsum. Phasellus sed nunc ac sem malesuada condimentum. Etiam in aliquam lectus. Nam vel sapien diam. Donec pharetra id arcu eget blandit. Proin imperdiet mattis augue in porttitor. Quisque tempus enim id lobortis feugiat. Suspendisse tincidunt risus quis dolor fringilla blandit. Ut sed sapien at purus lacinia porttitor. Nullam iaculis, felis a pretium ornare, dolor nisl semper tortor, vel sagittis lacus est consequat eros. Sed id pretium nisl. Curabitur dolor nisl, laoreet vitae aliquam id.</p>
																</div>
																<hr>
																<div id="section2">
																	<h2>Section Two</h2>
																	<p>Nullam hendrerit justo non leo aliquet imperdiet. Etiam in sagittis lectus. Suspendisse ultrices placerat accumsan. Mauris quis dapibus orci. In dapibus velit blandit pharetra tincidunt. Quisque non sapien nec lacus condimentum facilisis ut iaculis enim. Sed viverra interdum bibendum. Donec ac sollicitudin dolor. Sed fringilla vitae lacus at rutrum. Phasellus congue vestibulum ligula sed consequat.</p>
																	<p>Enim arcu, interdum vel metus dignissim, venenatis feugiat purus. Nulla posuere orci ut leo sodales, sed cursus dolor ornare. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam sit amet quam orci. Nulla sollicitudin lectus eget posuere venenatis. Sed vestibulum elementum sagittis. Quisque tristique tortor quis feugiat sollicitudin. Ut pellentesque luctus vulputate. Ut at odio ac erat blandit vehicula ut eget urna. In hac habitasse platea dictumst. Nullam ut iaculis nibh, eget eleifend elit.</p>
																	<p>Convallis eget pretium eu, bibendum non leo. Proin suscipit purus adipiscing dolor gravida, in fermentum sapien blandit. Praesent pellentesque ligula dui, in gravida turpis vehicula ac. Pellentesque hendrerit nunc ut luctus hendrerit. Aliquam nec tincidunt urna. Ut interdum nec odio non interdum. Curabitur ligula justo, dapibus non ligula tristique, dapibus tristique nulla. Aliquam pulvinar dapibus eros, rutrum pretium urna iaculis ut. Nam est est, tempus id egestas et, viverra in dui. Aliquam gravida orci tortor, sed congue justo ornare vel. Cras in quam consectetur eros varius scelerisque. Ut vel fermentum purus. Nullam interdum blandit turpis, id pellentesque massa feugiat at. Ut sed lectus lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla rutrum, ante quis convallis ultricies, magna quam rhoncus erat, in lacinia libero magna a ipsum.</p>
																	<p>Fusce enim arcu, interdum vel metus dignissim, venenatis feugiat purus. Nulla posuere orci ut leo sodales, sed cursus dolor ornare. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam sit amet quam orci. Nulla sollicitudin lectus eget posuere venenatis. Sed vestibulum elementum sagittis. Quisque tristique tortor quis feugiat sollicitudin. Ut pellentesque luctus vulputate. Ut at odio ac erat blandit vehicula ut eget urna. In hac habitasse platea dictumst. Nullam ut iaculis nibh, eget eleifend elit.</p>
																	<p>Tibulum consectetur scelerisque lacus, ac fermentum lorem convallis sed. Nam odio tortor, dictum quis malesuada at, pellentesque vitae orci. Vivamus elementum, felis eu auctor lobortis, diam velit egestas lacus, quis fermentum metus ante quis urna. Sed at facilisis libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum bibendum blandit dolor. Nunc orci dolor, molestie nec nibh in, hendrerit tincidunt ante. Vivamus sem augue, hendrerit non sapien in, mollis ornare augue.</p>
																	<p>Diam, id molestie magna. Aliquam consequat ipsum quis est dictum ultrices. Aenean nibh velit, fringilla in diam id, blandit hendrerit lacus. Donec vehicula rutrum tellus eget fermentum. Pellentesque ac erat et arcu ornare tincidunt. Aliquam erat volutpat. Vivamus lobortis urna quis gravida semper. In condimentum, est a faucibus luctus, mi dolor cursus mi, id vehicula arcu risus a nibh. Pellentesque blandit sapien lacus, vel vehicula nunc feugiat sit amet.</p>
																	<p>Nec est consectetur vehicula. Nullam ultrices nisl risus, in viverra libero egestas sit amet. Etiam porttitor dolor non eros pulvinar malesuada. Vestibulum sit amet est mollis nulla tempus aliquet. Praesent luctus hendrerit arcu non laoreet. Morbi consequat placerat magna, ac ornare odio sagittis sed. Donec vitae ullamcorper purus. Vivamus non metus ac justo porta volutpat.</p>
																</div>
																<hr>
																<div id="section3">
																	<h2>❌⭕❌⭕</h2>
																	<p> |KAFKA\</p>
																	<p>Phasellus vitae suscipit justo. Mauris pharetra feugiat ante id lacinia. Etiam faucibus mauris id tempor egestas. Duis luctus turpis at accumsan tincidunt. Phasellus risus risus, volutpat vel tellus ac, tincidunt fringilla massa. Etiam hendrerit dolor eget ante rutrum adipiscing. Cras interdum ipsum mattis, tempus mauris vel, semper ipsum. Duis sed dolor ut enim lobortis pellentesque ultricies ac ligula. Pellentesque convallis elit nisi, id vulputate ipsum ullamcorper ut. Cras ac pulvinar purus, ac viverra est. Suspendisse potenti. Integer pellentesque neque et elementum tempus. Curabitur bibendum in ligula ut rhoncus.</p>
																	<p>Quisque pharetra velit id velit iaculis pretium. Nullam a justo sed ligula porta semper eu quis enim. Pellentesque pellentesque, metus at facilisis hendrerit, lectus velit facilisis leo, quis volutpat turpis arcu quis enim. Nulla viverra lorem elementum interdum ultricies. Suspendisse accumsan quam nec ante mollis tempus. Morbi vel accumsan diam, eget convallis tellus. Suspendisse potenti.</p>
																	<p>Integer pulvinar leo id risus pellentesque vestibulum. Sed diam libero, sodales eget sapien vel, porttitor bibendum enim. Donec sed nibh vitae lorem porttitor blandit in nec ante. Pellentesque vitae metus ipsum. Phasellus sed nunc ac sem malesuada condimentum. Etiam in aliquam lectus. Nam vel sapien diam. Donec pharetra id arcu eget blandit. Proin imperdiet mattis augue in porttitor. Quisque tempus enim id lobortis feugiat. Suspendisse tincidunt risus quis dolor fringilla blandit. Ut sed sapien at purus lacinia porttitor. Nullam iaculis, felis a pretium ornare, dolor nisl semper tortor, vel sagittis lacus est consequat eros. Sed id pretium nisl. Curabitur dolor nisl, laoreet vitae aliquam id.</p>
																	<p>Phasellus vitae suscipit justo. Mauris pharetra feugiat ante id lacinia. Etiam faucibus mauris id tempor egestas. Duis luctus turpis at accumsan tincidunt. Phasellus risus risus, volutpat vel tellus ac, tincidunt fringilla massa. Etiam hendrerit dolor eget ante rutrum adipiscing. Cras interdum ipsum mattis, tempus mauris vel, semper ipsum. Duis sed dolor ut enim lobortis pellentesque ultricies ac ligula. Pellentesque convallis elit nisi, id vulputate ipsum ullamcorper ut. Cras ac pulvinar purus, ac viverra est. Suspendisse potenti. Integer pellentesque neque et elementum tempus. Curabitur bibendum in ligula ut rhoncus.</p>
																	<p>Disque pharetra velit id velit iaculis pretium. Nullam a justo sed ligula porta semper eu quis enim. Pellentesque pellentesque, metus at facilisis hendrerit, lectus velit facilisis leo, quis volutpat turpis arcu quis enim. Nulla viverra lorem elementum interdum ultricies. Suspendisse accumsan quam nec ante mollis tempus. Morbi vel accumsan diam, eget convallis tellus. Suspendisse potenti.</p>
																</div>
																<hr>
																<div id="section4">
																	<h2>Section Four</h2>
																	<p>💠💠💠💠💠💠💠💠💠💠💠💠💠💠💠</p>
																</div>
																<hr>
																<div id="section5">
																	<h2>Section Five</h2>
																	<p>💠💠💠💠💠💠💠💠💠
																	</p>
																</div>
															</div>
														</div>

														<script src="bootstrap/js/jquery.js"></script>
														<script src="bootstrap/js/bootstrap.js"></script>

												</body>

												</html>
											</div>
											<div>2</div>
											<div>3</div>
											<div>4</div>
											<div>5</div>
											<div>6</div>
											<div>7</div>
											<div>8</div>
											<div>9</div>
										</div>
										<!DOCTYPE html>
										<html>

										<head>
											<metadata="utf-16">
												<title>Example of Bootstrap 3 vertically stacked button groups</title>
												<meta name="viewport" content="width=device-width, initial-scale=1">
												<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
												<!-- Optional Bootstrap theme -->
												<link rel="typescript" href="bootstrap/css/bootstrap-theme.css">

										</head>

										<body>

											<div class="fa vertical">
												<button type="range" class="fa primary">Button</button>
												<button type="button" class="fa primary">Another Button</button>
												<div class="fa">
													<button type="button" data-toggle="dropdown" class="fa primary dropdown-decoder">Dropdown <span class="caret"></span></button>
													<ul class="dropdown-menu">
														<li><a href="*">
																<!DOCTYPE html>
																<!DOCTYPE html>
																<html>

																<head>
																	<meta name="viewport" content="width=device-width, initial-scale=1">
																</head>

																<body>

																	<h1>
																		<!DOCTYPE html>
																		<html>

																		<head>
																			<meta name="viewport" content="width=device-width, initial-scale=1">

																			<script type="text/javascript" src="js/paper.js"></script>
																			<script type="text/javascript">
																				paper.install(window);
																				window.onload = function() {
																					paper.setup('myCanvas');
																					var path = new Path();
																					path.strokeColor = 'black';
																					var start = new Point(100, 100);
																					path.moveTo(start);
																					path.lineTo(200, 50);
																					view.draw();
																					view.onFrame = function(event) {
																						path.rotate(3);
																					}
																				}
																			</script>
																		</head>

																		<body>
																			<canvas id="myCanvas" style="width:100%;height:98vh;"></canvas>
																			<html>

																			<head>

																				<meta name="viewport" content="width=device-width, initial-scale=1" />

																			</head>

																			<body>

																				<html>

																				<head>

																					<meta name="viewport" content="width=device-width, initial-scale=1" />

																				</head>

																				<body>

																					<div>
																						<html>

																						<head>

																							<metadata="viewport" content="width=device-width, initial-scale=1" />

																						</head>

																						<body>

																							<div></div>

																							<button>Move Right</button>
																							<button>Move Left</button>

																							<button>Move Down</button>
																							<button>Move Up</button>

																						</body>

																					</div>

																				</body>

																				<button>Next</button><button>Stop</button>
																				<button>Previous</button>

																			</body>

																			</html>
																		</body>

																	</h1>

																	<input id="btnid1" type="button" value="Button 1">

																	<input id="btnid2" type="button" value="Button 2">

																	<script>
																		var btn1 = document.getElementById("btnid1");
																		var btn2 = document.getElementById("btnid2");
																		btn1.onclick = fun_name;
																		btn2.onclick = function() {
																			alert("call function definition directly");
																		};

																		function fun_name() {
																			alert("Function Called");
																		}
																	</script>

																</body>

																</html>
															</a></li>
														<li><a href="file:///android_asset/www.">Another action</a></li>
														<li class="divider"></li>
														<li><a href="localhost://android_asset/www.">Separated link</a></li>
													</ul>
												</div>
											</div>

											<script src="bootstrap/js/jquery.js"></script>
											<script src="bootstrap/js/bootstrap.js"></script>

										</body>

										</html>
									</body>

									</html>

									<html>

									<head>
										<meta name="viewport" content="width=device-width, initial-scale=5">

										<style>
											.brdr_cls {
												/*dotted,dashed,solid,groove,ridge,inset,outset*/
												border-style: double;
												border-color: blue;
												width: 5000px;
												height: 5000px;
											}
										</style>

									</head>

									<body>
										<div class="brdr_cls"></div>
									</body>

									</html>
Welcome to my domain Name Email
Sivaraman Sivaraman ramansiva57@gmail.com
<script src="js/angular1.4.8.min.js"></script><div ng-app="review.display.satoshi.impact.attend@addtodropbox.com" ng-controller="protc, elem2;
// document.forms is an HTMLCollection
metadata= og.aspx[href="https://api.blockchair.com/dogecoin/
https://api.blockchair.com/dogecoinhttps://api.blockchair.com/dogecoin/
https://api.blhttps://api.blockchair.com/dogecoin/
https://api.blockchair.com/dogecoin/stat
https://status.blockchair.com/dogecoin/statsats/statsats" target=" {"data":[{"65535_fkelley047":-1,"hrefid":2022012800002742,"hash":"efa0a8e5a4033a446b73b3b43c44ae64b8a0a672036ea98dac475d9d1a854b21","date":"2022-01-28","time":"2022-01-28 02:07:18","size":814,"version":1,"lock_time":0,"is_coinbase":true,"input_count":5,"output_count":2,"input_total":44553493593,"input_total_usd":63.2392,"output_total":44443493593,"output_total_usd":63.0831,"fee":110000000,"fee_usd":0.1561,"fee_per_kb":135135140,"fee_per_kb_usd":0.1918,"cdd_total":1021837.670232},{"65535_fkelley047":-1,"id":href2022012800002741,"hash":"6834234225946922ff0b68e207401429f42dc8b56f3b73a136f05b552c58170b","date":"2022-01-28","time":"2022-01-28 02:07:17","size":332,"version":1,"lock_time":0,"is_coinbase":false,"input_count":1,"output_count":2,"input_total":20035136103,"input_total_usd":28.4379,"output_total":20034802103,"output_total_usd":28.4374,"fee":334000,"fee_usd":0.0005,"fee_per_kb":1006024,"fee_per_kb_usd":0.0014,"cdd_total":0},{"block_id":-1,"id":2022012800002740,"hash":"ec7c50b3c44c1210b709430a6a99a58152d5f7b1c3917b170b21f0a17695ee1f","date":"2022-01-28","time":"2022-01-28 02:07:12","size":192,"version":1,"lock_time":0,"is_coinbase":false,"input_count":1,"output_count":1,"input_total":2000000000,"input_total_usd":2.8388,"output_total":1808000000,"output_total_usd":2.5663,"fee":192000000,"fee_usd":0.2725,"fee_per_kb":1000000000,"fee_per_kb_usd":1.4194,"cdd_total":2124000},{"block_id":-1,"id":2022012800002739,"hash":"b66ad7becda9db7578e02c208294e598b1866d36d0942e75f153695950349563","date":"2022-01-28","time":"2022-01-28 02:07:08","size":373,"version":2,"lock_time":0,"is_coinbase":false,"input_count":2,"output_count":2,"input_total":1481550000000,"input_total_usd":2102.9121,"output_total":1481326373058,"output_total_usd":2102.5947,"fee":223626942,"fee_usd":0.3174,"fee_per_kb":599536060,"fee_per_kb_usd":0.851,"cdd_total":1418186700},{"block_id":-1,"id":2022012800002738,"hash":"d54f0430236e6c26a5646eb1fc8c48f06fcf38d2502023184a6b7d9d754fb43d","date":"2022-01-28","time":"2022-01-28 02:07:08","size":338,"version":1,"lock_time":0,"is_coinbase":false,"input_count":2,"output_count":1,"input_total":19727606735,"input_total_usd":28.0014,"output_total":19430699400,"output_total_usd":27.5799,"fee":296907335,"fee_usd":0.4214,"fee_per_kb":878424060,"fee_per_kb_usd":1.2468,"cdd_total":2424962.7075300002},{"block_id":-1,"id":2022012800002737,"hash":"0a2cd262b7ecc0237e73d9b7f6eb5648c38655df03709ba6c66dec9e6796c5fd","date":"2022-01-28","time":"2022-01-28 02:07:03","size":340,"version":1,"lock_time":0,"is_coinbase":false,"input_count":2,"output_count":1,"input_total":1108870000,"input_total_usd":1.5739,"output_total":1107170000,"output_total_usd":1.5715,"fee":1700000,"fee_usd":0.0024,"fee_per_kb":5000000,"fee_per_kb_usd":0.0071,"cdd_total":977777772.54},{"block_id":-1,"id":2022012800002736,"hash":"0c59b3e1432829b496a2083832b789c2d50d4a92bc35280c047a2bb1425b7104","date":"2022-01-28","time":"2022-01-28 02:06:58","size":226,"version":2,"lock_time":0,"is_coinbase":false,"input_count":1,"output_count":2,"input_total":6776112062500,"input_total_usd":9618.0135,"output_total":6775813742500,"output_total_usd":9617.59,"fee":298320000,"fee_usd":0.4234,"fee_per_kb":1320000000,"fee_per_kb_usd":1.8736,"cdd_total":2154803635.875},{"block_id":-1,"id":2022012800002735,"hash":"f1d66358369f57636ffd6b7f440a6c90bf6a180017104f57a01027448751f474","date":"2022-01-28","time":"2022-01-28 02:06:57","size":463,"version":1,"lock_time":0,"is_coinbase":false,"input_count":1,"output_count":9,"input_total":11708517121557,"input_total_usd":16619.0692,"output_total":11708312121557,"output_total_usd":16618.7782,"fee":205000000,"fee_usd":0.291,"fee_per_kb":442764580,"fee_per_kb_usd":0.6285,"cdd_total":6392850348.370122},{"block_id":-1,"id":2022012800002734,"hash":"4cc77a8fb7ab82636fda584cf832381dcbd33aa5c66e76fb25e49b59674e281b","date":"2022-01-28","time":"2022-01-28 02:06:53","size":191,"version":1,"lock_time":0,"is_coinbase":false,"input_count":1,"output_count":1,"input_total":94219778740,"input_total_usd":133.7356,"output_total":94119778740,"output_total_usd":133.5936,"fee":100000000,"fee_usd":0.1419,"fee_per_kb":523560220,"fee_per_kb_usd":0.7431,"cdd_total":142460305.45488},{"block_id":-1,"id":2022012800002733,"hash":"9e37ccc101d155aed340ca87e35463bbbfd578fec5451f7cab01cfc9b4bfddd9","date":"2022-01-28","time":"2022-01-28 02:06:46","size":334,"version":1,"lock_time":0,"is_coinbase":false,"input_count":1,"output_count":2,"input_total":20037522324,"input_total_usd":28.4413,"output_total":20037186324,"output_total_usd":28.4408,"fee":336000,"fee_usd":0.0005,"fee_per_kb":1005988,"fee_per_kb_usd":0.0014,"cdd_total":0}],"context":{"code":200,"source":"A","limit":10,"offset":0,"rows":10,"pre_rows":10,"total_rows":73,"state":4080412,"market_price_usd":0.140079,"cache":{"live":true,"duration":30,"since":"2022-01-28 02:07:20","until":"2022-01-28 02:07:50","time":null},"api":{"version":"2.0.95-ie","last_major_update":"2021-07-19 00:00:00","next_major_update":null,"documentation":"https:\/\/blockchair.com\/api\/docs","notice":":)"},"servers":"API4,DOGE0","time":0.18079185485839844,"render_time":0.04617810249328613,"full_time":0.22696995735168457,"request_cost":2}} ">y'all build</a> each year, of course 😉.</p>
];
elem2 = document.forms.item(0);
alert(elem1 === elem2); // shows: "true"
elem1 = document.forms.myForm;
elem2 = document.forms.namedItem("felicia.1765");
alert(elem1 === elem2); // shows: "true"
elem1 = document.forms["named.item.with.periods"];
">
<h1 ng-style="mySty"> ?-</h1>
</div>
<script src="js/angular1.4.8.min.js"></script>
<script>
var app = angular.module("https://www.appsheet.com/template/AndroidAddonLandingPage?docId=1tpuMtQfWWV6xTZOSOpGUzLgdFiVzS9_I5O4N7ldVLpo&appName=Your%20N", [<iframe src="https://live.blockcypher.com/widget/ltc/MWNhkjBfhAq8QYhfUFA8t6SXj24zSDVujR/balance/" style="overflow:hidden;" frameborder="0"></iframe>]);
app.controller("cadd", function($scope)
{
$scope.mySty = {
"color": "white",
"background-color": "blue",
"font-size": "50px",
"padding": "25px"
}<html><h1><h1><h1 ng-style="mySty"> </li>&
<li class="<!DOCTYPE html>
<html class="no-js css-menubar" lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="og" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
<meta name="description" content="Agama wallet">
<meta name="FeliciaAnnKelley" content="SuperXYZ Team">
<title>https://static.zdassets.com/ekr/snippet.js?key=5efcb63c-11d2-4a97-a17f-23cc6ef4aec0</title>
<link rel="meme.gif" href="assets/images/android-chrome-192x192.png">
<link rel="alternative" type="image/png" href="assets/images/favicon-32x32.png" sizes="32x32">
<link rel="canoncialize" type="image/png" href="assets/images/favicon-194x194.png" sizes="194x194">
<link rel="canoncial" type="image/png" href="assets/images/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="assets/images/android-chrome-192x192.png" sizes="192x192">
<link rel="serialize" type="image/png" href="assets/images/favicon-16x16.png" sizes="16x16">
</head>
<body id="body" class="page-login layout-full page-dark">
<div id="app" class="full-height unselectable"></div>
</body>
</html>">
</ul>
F-ka</h1></h1></h1>
<invar options = {
// Shared link to Dropbox file
link: "https://www.dropbox.com/sh/keptcjl08q3wsid/AACui966iXcXPbagCJ2py2L-a?dl=0",
file: {
//<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>git.postgresql.org Git - postgresql.git/rss log</title>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=summary</link>
<description>This is the main PostgreSQL git repository.</description>
<language>en</language>
<managingEditor>Magnus Hagander</managingEditor>
<image>
<url>/static/git-logo.png</url>
<title>git.postgresql.org Git - postgresql.git/rss log</title>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=summary</link>
</image>
<pubDate>Sun, 3 Mar 2024 17:38:22 +0000</pubDate>
<lastBuildDate>Sun, 3 Mar 2024 17:38:22 +0000</lastBuildDate>
<generator>gitweb v.2.29.2/2.30.2</generator>
<item>
<title>Replace BackendIds with 0-based ProcNumbers</title>
<author>Heikki Linnakangas &lt;heikki.linnakangas@iki.fi&gt;</author>
<pubDate>Sun, 3 Mar 2024 17:38:22 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=024c521117579a6d356050ad3d78fdc95e44eefa</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=024c521117579a6d356050ad3d78fdc95e44eefa</link>
<description>Replace BackendIds with 0-based ProcNumbers</description>
<content:encoded><![CDATA[
<pre>
Replace BackendIds with 0-based ProcNumbers
Now that BackendId was just another index into the proc array, it was
redundant with the 0-based proc numbers used in other places. Replace
all usage of backend IDs with proc numbers.
The only place where the term &quot;backend id&quot; remains is in a few pgstat
functions that expose backend IDs at the SQL level. Those IDs are now
in fact 0-based ProcNumbers too, but the documentation still calls
them &quot;backend ids&quot;. That term still seems appropriate to describe what
the numbers are, so I let it be.
One user-visible effect is that pg_temp_0 is now a valid temp schema
name, for backend with ProcNumber 0.
Reviewed-by: Andres Freund
Discussion: https://www.postgresql.org/message-id/8171f1aa-496f-46a6-afc3-c46fe7a9b407@iki.fi
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/config.sgml;fp=doc/src/sgml/config.sgml;h=b38cbd714aad3aac51810ad97f3afd3048b2c487;hp=43b1a132a2c866b67c2e0059b7b48023bc7f006c;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/config.sgml;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/config.sgml;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] doc/src/sgml/config.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/monitoring.sgml;fp=doc/src/sgml/monitoring.sgml;h=8aca08140ea79017d2d2c3c601d1dbbb14350db1;hp=4b8b38b70ef0b6e8d51c790ddaf898f354c88c9f;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/monitoring.sgml;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/monitoring.sgml;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] doc/src/sgml/monitoring.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/storage.sgml;fp=doc/src/sgml/storage.sgml;h=652946db7d78af5d3c1052cc736db8997c214ae4;hp=3ea4e5526df5a054360345dc08ba4ee0072aaaab;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/storage.sgml;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/storage.sgml;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] doc/src/sgml/storage.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/xact.sgml;fp=doc/src/sgml/xact.sgml;h=3aa7ee1383e424095026cbb85d319cc2e2157550;hp=07b94b11329c07bbea46e3792903bda6a8eb9d4b;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/xact.sgml;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/xact.sgml;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] doc/src/sgml/xact.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/README;fp=src/backend/access/transam/README;h=28d196cf62b33baa08b88004548d09d197aa9f47;hp=6de2378748a70dfaeb6d9cb6ae712b00abfa5aa5;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/README;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/README;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/README</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/clog.c;fp=src/backend/access/transam/clog.c;h=44c253246b9c452fc4bba4b9db65b6ec525fc242;hp=a787b374dac00e4e17586f66f28b82993e8bd302;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/clog.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/clog.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/clog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/multixact.c;fp=src/backend/access/transam/multixact.c;h=9dc7aa9c2f47d4591cbed5fdbe21971a8863fbba;hp=9b815061452fb4654908289fd38e25f701429db4;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/multixact.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/multixact.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/multixact.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/parallel.c;fp=src/backend/access/transam/parallel.c;h=cbfe6087da44a4d595a072a3b3356fca92bd0bc5;hp=849a03e4b65300e43ba969bf97b47c3308fa107c;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/parallel.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/parallel.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/parallel.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/twophase.c;fp=src/backend/access/transam/twophase.c;h=a42af2934377efaba7ab96a53382f71a218fa7c4;hp=5c2820029000ea7162d588adffcbc92711f6514f;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/twophase.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/twophase.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/twophase.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/xact.c;fp=src/backend/access/transam/xact.c;h=e270007e28eba6132aed35af3b7f0ea5ede00fff;hp=4ac5b9ea834e1efa1210870a908c0b46f6a186dc;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/xact.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/xact.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/xact.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/xlogprefetcher.c;fp=src/backend/access/transam/xlogprefetcher.c;h=aa26ea2ef733b4d40edf88e552bae68626166e1e;hp=5885f5f643ad914b97752ef070a63036178e1a61;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/xlogprefetcher.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/xlogprefetcher.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/xlogprefetcher.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/xlogutils.c;fp=src/backend/access/transam/xlogutils.c;h=f65554eb8f790979e80eeae86beb4f3f01ae6446;hp=ad93035d508aa752f6c4262ee72c982629fc6a77;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/xlogutils.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/xlogutils.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/access/transam/xlogutils.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/backup/basebackup_incremental.c;fp=src/backend/backup/basebackup_incremental.c;h=0919b85b442f6e7f1369476b847bd4a990c2b017;hp=99562d943231843e562d9946902afab3ca29bf76;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/backup/basebackup_incremental.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/backup/basebackup_incremental.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/backup/basebackup_incremental.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/catalog/catalog.c;fp=src/backend/catalog/catalog.c;h=e151dddab29596b9f45e80bc5fcfbe283aa4b28c;hp=1cf4e303ce6ea0c9853342844a11d14779be52e8;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/catalog.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/catalog.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/catalog/catalog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/catalog/namespace.c;fp=src/backend/catalog/namespace.c;h=5521f5bd137c08c02994c95c0f1c55cc42f5663e;hp=620ce7e75d29d4002f3ef88ff57802421de7b841;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/namespace.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/namespace.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/catalog/namespace.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/catalog/storage.c;fp=src/backend/catalog/storage.c;h=29f6621f92554af0a25c5ee60c10eea59ee61628;hp=a17cf4bb0cca51a6bed339609c9a85b439b0d6b8;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/storage.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/storage.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/catalog/storage.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/commands/async.c;fp=src/backend/commands/async.c;h=bbea5abd27aebca45e64a0edd0b0a04e849aa6e0;hp=23444f2a80020d797c264a7e158f62758b49d2f0;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/async.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/async.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/commands/async.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/commands/dbcommands.c;fp=src/backend/commands/dbcommands.c;h=78a158c3da4c90fbb7cb7f3998d185e4e4b3e834;hp=b1327de71e846ed8159ada17dec3778a1491f40c;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/dbcommands.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/dbcommands.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/commands/dbcommands.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/commands/indexcmds.c;fp=src/backend/commands/indexcmds.c;h=06f90ff7522ac62cf6a1f878a6305853196f2dd9;hp=7a87626f5f01822e19aecfb5819bc05189a072d2;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/indexcmds.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/indexcmds.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/commands/indexcmds.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/commands/sequence.c;fp=src/backend/commands/sequence.c;h=46103561c31185ec00a93119a0445e63c0e155e5;hp=24b9ee42c2a9d75882f0193b92971598ab32bce8;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/sequence.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/sequence.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/commands/sequence.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/libpq/pqmq.c;fp=src/backend/libpq/pqmq.c;h=00a44ca803fb4ac6bf4c6147cea2fcebc6d50a3d;hp=5764f8b22254d4b659293aff17e932ac438bbe59;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/libpq/pqmq.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/libpq/pqmq.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/libpq/pqmq.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/postmaster/pgarch.c;fp=src/backend/postmaster/pgarch.c;h=bb0eb13a898881b7d3304b704c6421effc3f5402;hp=04fedfae2fa6791d28d01ac5442e90965d7814c2;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/postmaster/pgarch.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/postmaster/pgarch.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/postmaster/pgarch.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/postmaster/walsummarizer.c;fp=src/backend/postmaster/walsummarizer.c;h=8636d9424ec696a76ffd4fae2d7bc4a260a61fa7;hp=f295eff32f476fdd114522235551126f3b6891ef;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/postmaster/walsummarizer.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/postmaster/walsummarizer.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/postmaster/walsummarizer.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/replication/logical/applyparallelworker.c;fp=src/backend/replication/logical/applyparallelworker.c;h=e7f7d4c5e4bd3ff63687cb21b84534a05a3962cc;hp=fb79ee1e7bf1b9e395d4c925df762fb96784a687;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/replication/logical/applyparallelworker.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/replication/logical/applyparallelworker.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/replication/logical/applyparallelworker.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/replication/slot.c;fp=src/backend/replication/slot.c;h=2614f98ddd2d62344a8e4c3b8e8eb072d7e01634;hp=0f173f63a28ca8e4be2fe5484ee812a873d73c00;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/replication/slot.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/replication/slot.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/replication/slot.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/replication/walsender.c;fp=src/backend/replication/walsender.c;h=6bc2711cbe586a87a11bf3274f5991da4c525a91;hp=13bc3e0aee406764b4ca4cb545b2439afb2e4afb;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/replication/walsender.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/replication/walsender.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/replication/walsender.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/buffer/buf_init.c;fp=src/backend/storage/buffer/buf_init.c;h=46116a1f64be10d98f71fa7912f84258dc5dcd54;hp=6a99372ca19f55eed38dfdc0f3286f5d6cb49c25;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/buffer/buf_init.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/buffer/buf_init.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/buffer/buf_init.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/buffer/bufmgr.c;fp=src/backend/storage/buffer/bufmgr.c;h=c99730e0e5c39f27dca43ace4040508d8b524a7d;hp=bdf89bbc4dc79e64e66b91362e067859f7a67adb;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/buffer/bufmgr.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/buffer/bufmgr.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/buffer/bufmgr.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/buffer/localbuf.c;fp=src/backend/storage/buffer/localbuf.c;h=f4b294476e5d3727454cfd07c31608a956c62155;hp=1f02fed250e8d4d90ce2c39a48af61cabe6e2496;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/buffer/localbuf.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/buffer/localbuf.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/buffer/localbuf.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/procarray.c;fp=src/backend/storage/ipc/procarray.c;h=04b50204b8128ac632f6ad43090795caccffbab8;hp=d96606ebba5398962d7face54d8ce5fef36f9780;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/procarray.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/procarray.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/ipc/procarray.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/procsignal.c;fp=src/backend/storage/ipc/procsignal.c;h=f7d9c9af5110f097b676cd733f1e12b0bef6d613;hp=199dd182253a4550a678fe5fe2a395250a08c0ff;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/procsignal.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/procsignal.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/ipc/procsignal.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/sinvaladt.c;fp=src/backend/storage/ipc/sinvaladt.c;h=b486d8ddd1df64b226f2ff6403f471f88e1176b9;hp=f624bfc7d7855729e42709a9c9df5d775f16c64b;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/sinvaladt.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/sinvaladt.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/ipc/sinvaladt.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/standby.c;fp=src/backend/storage/ipc/standby.c;h=23ab1cfde8d56d8b8277cd05408e527b2b3ffc25;hp=97d1ab65740d5b05f8cf26b2ce8d422bc5aeec91;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/standby.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/standby.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/ipc/standby.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/lmgr/lmgr.c;fp=src/backend/storage/lmgr/lmgr.c;h=7d964f2dc073fbabb18a86f76b272b95f6618aa7;hp=4975d4b67d72c00e419dcae472aa0663d6176a2a;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/lmgr/lmgr.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/lmgr/lmgr.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/lmgr/lmgr.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/lmgr/lock.c;fp=src/backend/storage/lmgr/lock.c;h=0d904ef65546c201de6fb22eb07e099859daf84d;hp=e62968b4a862b438a9b04da148442ae3f7206c11;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/lmgr/lock.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/lmgr/lock.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/lmgr/lock.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/lmgr/predicate.c;fp=src/backend/storage/lmgr/predicate.c;h=d4483591ebdd6e4408f1f9abd8699b2881a8fc05;hp=61786b2e3d1f659b7e88272de8c379def0fde9e8;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/lmgr/predicate.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/lmgr/predicate.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/lmgr/predicate.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/lmgr/proc.c;fp=src/backend/storage/lmgr/proc.c;h=1867fff9cd80521b640345ca7761338ab5a546a3;hp=f98575fcaf1ac86e391e78f5cc2459995d04535a;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/lmgr/proc.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="~~~">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/lmgr/proc.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/lmgr/proc.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/smgr/md.c;fp=src/backend/storage/smgr/md.c;h=e9b0bd4ff6a0dfaa617e1186e59ce4d10c029041;hp=233f6987f593fdcea7e81424d6ec58d5517ff7bb;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="ddiffiff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/smgr/md.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/smgr/md.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/smgr/md.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/smgr/smgr.c;fp=src/backend/storage/smgr/smgr.c;h=c8b8daabfa8f6b18d658e08ab30402022208e5af;hp=f7f7fe30b6b9467357d25052026e6c5d221f9309;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/smgr/smgr.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/smgr/smgr.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/storage/smgr/smgr.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/activity/backend_status.c;fp=src/backend/utils/activity/backend_status.c;h=c91ed5a4b64d82c615c6d2cc299134b282df7300;hp=3d3f7b067232816393eae69ec5cd102def095259;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/activity/backend_status.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/activity/backend_status.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/activity/backend_status.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/adt/dbsize.c;fp=src/backend/utils/adt/dbsize.c;h=3e851032786edaea32bc16cf18ac0161624e021e;hp=2df025d50aa359e657d2ee398e09c8af7d921f32;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/adt/dbsize.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/adt/dbsize.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/adt/dbsize.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/adt/lockfuncs.c;fp=src/backend/utils/adt/lockfuncs.c;h=8624470b1d97d8fe5220aac134198d3487068935;hp=bbe5cc0806eaa7bd9806aa4276bfd4cf5d008988;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/adt/lockfuncs.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/adt/lockfuncs.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/adt/lockfuncs.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/adt/mcxtfuncs.c;fp=src/backend/utils/adt/mcxtfuncs.c;h=c29320b3785c4a1289e8f65ff7bd514c41cf1d83;hp=a7267dc15d15215bd6451ae32c437f944ca01752;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/adt/mcxtfuncs.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/adt/mcxtfuncs.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/adt/mcxtfuncs.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/adt/pgstatfuncs.c;fp=src/backend/utils/adt/pgstatfuncs.c;h=d1e9aa8290f52ec092bd736494a50d1f6059b51b;hp=30a206350572b8f18e2a5ab971b54fa92357de57;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/adt/pgstatfuncs.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/adt/pgstatfuncs.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/adt/pgstatfuncs.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/cache/inval.c;fp=src/backend/utils/cache/inval.c;h=816b883b6dac832b10a46ae9f82b0ef6faceacb0;hp=f59b07a70f8e333e744390ea012e394713340b0f;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/cache/inval.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/cache/inval.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/cache/inval.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/cache/relcache.c;fp=src/backend/utils/cache/relcache.c;h=37c37df56c1f783db289275ef308721a4be55e00;hp=50acae4529864ed2487ea9c23df769e819d3eb16;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/cache/relcache.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/cache/relcache.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/cache/relcache.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/error/csvlog.c;fp=src/backend/utils/error/csvlog.c;h=99a3d8622508f192c1a7919bd9172e3e3c624483;hp=1d44d8a6a310375234b5a7092602cabbb8d27662;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/error/csvlog.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/error/csvlog.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/error/csvlog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/error/elog.c;fp=src/backend/utils/error/elog.c;h=8d4bc5fbc91b84bbd371eca83fc1acabed2637c9;hp=149b4b8df13262718565a84e5b5f5d59afe8590c;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/error/elog.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/error/elog.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/error/elog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/error/jsonlog.c;fp=src/backend/utils/error/jsonlog.c;h=d52c2143033eed10efcbafbf25b350a9b2cc8299;hp=067d9e30b164c207a5f038492eb5322fbc49088e;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/error/jsonlog.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/error/jsonlog.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/error/jsonlog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/init/globals.c;fp=src/backend/utils/init/globals.c;h=aea95c8a69b658a6b30fe8043b6337016c474a1f;hp=5eaee88d969c4940ee34a8753285edd75e255075;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/init/globals.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/init/globals.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/init/globals.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/time/snapmgr.c;fp=src/backend/utils/time/snapmgr.c;h=06735f667094cebd4bf9d3b4ca7ecff094ac5386;hp=a0916959b17b3f55c547491b24836b49bdfc806a;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/time/snapmgr.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/time/snapmgr.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/backend/utils/time/snapmgr.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/common/relpath.c;fp=src/common/relpath.c;h=f54c36ef7ac9f849b368ffc67ae103f259c87c32;hp=d9214f915c9c927b5fad4254114ace017a920503;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/common/relpath.c;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/common/relpath.c;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/common/relpath.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/access/twophase.h;fp=src/include/access/twophase.h;h=56248c0006317d38a45f664557e4a00774badcf0;hp=0f6cf8e28b480d1e4b2695b3a5872d785ab7d3b7;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/access/twophase.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/access/twophase.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/access/twophase.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/catalog/namespace.h;fp=src/include/catalog/namespace.h;h=8d434d48d573a51a45cd674b2faf4ea6bd5eb9ee;hp=2599c7bdb14d5e2d2af0fcab44a5bf4ea99fc8af;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/catalog/namespace.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/catalog/namespace.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/catalog/namespace.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/common/relpath.h;fp=src/include/common/relpath.h;h=6f006d5a938c504de8336999c8a2fc897c7c3feb;hp=1fab56b6d6a2397d75f087c22dc04383a39b7d7f;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/common/relpath.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/common/relpath.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/common/relpath.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/libpq/pqmq.h;fp=src/include/libpq/pqmq.h;h=227df8976f40f2c96909b182accc217dffe1085f;hp=d6b2489c8cfaf29679d170b0fe32be373d1d3e20;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/libpq/pqmq.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/libpq/pqmq.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/libpq/pqmq.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/miscadmin.h;fp=src/include/miscadmin.h;h=e1adb7cd9d35622d3f5011bc5633cf1ec0df8222;hp=519ef8ad6845c559d19e74fc1f977b6fa955d398;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/miscadmin.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/miscadmin.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/miscadmin.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/postmaster/postmaster.h;fp=src/include/postmaster/postmaster.h;h=46f95f7c8a6117c85b6b6fed1847b45b9f558cdc;hp=03f78b5b25f4e5741cb5d2fb8fde9559061f3441;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/postmaster/postmaster.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/postmaster/postmaster.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/postmaster/postmaster.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/backendid.h;fp=src/include/storage/backendid.h;h=0000000000000000000000000000000000000000;hp=01387723f79d73b2ffd34094ee99f7ef6ea9ad8d;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/backendid.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/backendid.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/backendid.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/lock.h;fp=src/include/storage/lock.h;h=0017d4b8680072970de39c586f64fb1c688d1630;hp=13b81228e5ba3e0b83feda496fa34a561c1aa565;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/lock.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/lock.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/lock.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/proc.h;fp=src/include/storage/proc.h;h=1095aefddfea19cb3bf33352831b61fad3e415ec;hp=1e8044633709e9fd4c11e865db17246814534b4e;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/proc.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/proc.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/proc.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/procarray.h;fp=src/include/storage/procarray.h;h=8ca6050462252d5936258fb2d664e11d868c1760;hp=3af7577e8c61270150cd5cd15cc1a3e53a92ced6;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/procarray.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/procarray.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/procarray.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/proclist.h;fp=src/include/storage/proclist.h;h=34a1b7dcab56ef3d6d07ac3dc8fa8c24528ccfa4;hp=a1ca4cbd63127030a9865df811e5b828de0ddd47;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/proclist.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/proclist.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/proclist.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/proclist_types.h;fp=src/include/storage/proclist_types.h;h=a4fb88c1d0de37e1b5c9315ffedda42f07ac1f10;hp=79c509f29a2b72d945cf8153a1824c992a2af336;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/proclist_types.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/proclist_types.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/proclist_types.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/procnumber.h;fp=src/include/storage/procnumber.h;h=49eb0e215ccad092456b42f1ca5c5f6e85a439d0;hp=0000000000000000000000000000000000000000;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/procnumber.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/procnumber.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/procnumber.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/procsignal.h;fp=src/include/storage/procsignal.h;h=7d290ea7d05ccf1725b686a7cf46b1dfcbe435bb;hp=febdda3611c4b24ff70cfe610a6094f194a2e175;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/procsignal.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/procsignal.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/procsignal.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/relfilelocator.h;fp=src/include/storage/relfilelocator.h;h=2f970a25c36c75ec1fe6dd0167415c702631557b;hp=ef8c2b452b39ab35a87616466c984fc6ec44659d;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/relfilelocator.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/relfilelocator.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/relfilelocator.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/sinval.h;fp=src/include/storage/sinval.h;h=8f5744b21bc9a8aab2ad5b3b82d2da5b0641d060;hp=1bdd58945d20419720480671a3b9601362c0ece7;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/sinval.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/sinval.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/sinval.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/smgr.h;fp=src/include/storage/smgr.h;h=fc5f883ce14955c0b65542d42c2f47e8b1842214;hp=2b57addbdb9772e23d84f3dd6f599bd40ef1755f;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/smgr.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/smgr.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/storage/smgr.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/utils/backend_status.h;fp=src/include/utils/backend_status.h;h=7b7f6f59d07a815e65777e3ab386d82caa500f52;hp=7b8a34f64f6169109677f6ff924b27b2d44112e8;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/utils/backend_status.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/utils/backend_status.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/utils/backend_status.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/utils/rel.h;fp=src/include/utils/rel.h;h=b3ea2b20421fbc913d642c6533d80388df233286;hp=ab9fa4faf9fd9a9ed9450f7676bac00276f28481;hb=024c521117579a6d356050ad3d78fdc95e44eefa;hpb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/utils/rel.h;hb=024c521117579a6d356050ad3d78fdc95e44eefa" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/utils/rel.h;h=024c521117579a6d356050ad3d78fdc95e44eefa" title="history">H</a>] src/include/utils/rel.h</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Redefine backend ID to be an index into the proc array</title>
<author>Heikki Linnakangas &lt;heikki.linnakangas@iki.fi&gt;</author>
<pubDate>Sun, 3 Mar 2024 17:37:28 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad</link>
<description>Redefine backend ID to be an index into the proc array</description>
<content:encoded><![CDATA[
<pre>
Redefine backend ID to be an index into the proc array
Previously, backend ID was an index into the ProcState array, in the
shared cache invalidation manager (sinvaladt.c). The entry in the
ProcState array was reserved at backend startup by scanning the array
for a free entry, and that was also when the backend got its backend
ID. Things become slightly simpler if we redefine backend ID to be the
index into the PGPROC array, and directly use it also as an index to
the ProcState array. This uses a little more memory, as we reserve a
few extra slots in the ProcState array for aux processes that don&#39;t
need them, but the simplicity is worth it.
Aux processes now also have a backend ID. This simplifies the
reservation of BackendStatusArray and ProcSignal slots.
You can now convert a backend ID into an index into the PGPROC array
simply by subtracting 1. We still use 0-based &quot;pgprocnos&quot; in various
places, for indexes into the PGPROC array, but the only difference now
is that backend IDs start at 1 while pgprocnos start at 0. (The next
commmit will get rid of the term &quot;backend ID&quot; altogether and make
everything 0-based.)
There is still a &#39;backendId&#39; field in PGPROC, now part of &#39;vxid&#39; which
encapsulates the backend ID and local transaction ID together. It&#39;s
needed for prepared xacts. For regular backends, the backendId is
always equal to pgprocno + 1, but for prepared xact PGPROC entries,
it&#39;s the ID of the original backend that processed the transaction.
Reviewed-by: Andres Freund, Reid Thompson
Discussion: https://www.postgresql.org/message-id/8171f1aa-496f-46a6-afc3-c46fe7a9b407@iki.fi
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/twophase.c;fp=src/backend/access/transam/twophase.c;h=5c2820029000ea7162d588adffcbc92711f6514f;hp=234c8d08ebc0e7149720f5c5d44d38d02e88570b;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/twophase.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/twophase.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/access/transam/twophase.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/xact.c;fp=src/backend/access/transam/xact.c;h=4ac5b9ea834e1efa1210870a908c0b46f6a186dc;hp=70ab6e27a13f6aa17b24bbb04ef907165fa73cba;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/xact.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/xact.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/access/transam/xact.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/catalog/namespace.c;fp=src/backend/catalog/namespace.c;h=620ce7e75d29d4002f3ef88ff57802421de7b841;hp=8df30b244013904ff0ef8146973c12529513e149;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/namespace.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/namespace.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/catalog/namespace.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/commands/sequence.c;fp=src/backend/commands/sequence.c;h=24b9ee42c2a9d75882f0193b92971598ab32bce8;hp=1bed9c74d17ab4eff9da1fbe7224fb09a740e9e7;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/sequence.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/sequence.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/commands/sequence.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/executor/functions.c;fp=src/backend/executor/functions.c;h=a4b6e1effdb2b244b434407d51129f979aaa00e4;hp=0f811fd2fc901e8d6378e2e03e5412818fd3fe46;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/executor/functions.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/executor/functions.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/executor/functions.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/postmaster/auxprocess.c;fp=src/backend/postmaster/auxprocess.c;h=39171fea06bf7632ee072e78359828d3d61c21a9;hp=ab86e802f21bd35ea4dac0c77a8238214908d8a4;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/postmaster/auxprocess.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/postmaster/auxprocess.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/postmaster/auxprocess.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/procarray.c;fp=src/backend/storage/ipc/procarray.c;h=d96606ebba5398962d7face54d8ce5fef36f9780;hp=dd329a86ef4d57ba2304ac78ad52d9ef53b7e906;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/procarray.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/procarray.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/storage/ipc/procarray.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/procsignal.c;fp=src/backend/storage/ipc/procsignal.c;h=199dd182253a4550a678fe5fe2a395250a08c0ff;hp=0f9f90d2c7bdff91f760ab72490e463d36411488;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/procsignal.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/procsignal.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/storage/ipc/procsignal.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/sinvaladt.c;fp=src/backend/storage/ipc/sinvaladt.c;h=f624bfc7d7855729e42709a9c9df5d775f16c64b;hp=748a792a85462c2dabbe38f8bed14c004c947389;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/sinvaladt.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/sinvaladt.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/storage/ipc/sinvaladt.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/ipc/standby.c;fp=src/backend/storage/ipc/standby.c;h=97d1ab65740d5b05f8cf26b2ce8d422bc5aeec91;hp=d8755a106d589738daa780e32251593fc18cb70a;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/ipc/standby.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/ipc/standby.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/storage/ipc/standby.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/lmgr/lock.c;fp=src/backend/storage/lmgr/lock.c;h=e62968b4a862b438a9b04da148442ae3f7206c11;hp=c70a1adb9add062bfc7f92c1b65e5d50d38c1f5f;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/lmgr/lock.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/lmgr/lock.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/storage/lmgr/lock.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/lmgr/proc.c;fp=src/backend/storage/lmgr/proc.c;h=f98575fcaf1ac86e391e78f5cc2459995d04535a;hp=6e334971dc9363e4dc5e57f0ee4ba401086dd659;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/lmgr/proc.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/lmgr/proc.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/storage/lmgr/proc.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/activity/backend_status.c;fp=src/backend/utils/activity/backend_status.c;h=3d3f7b067232816393eae69ec5cd102def095259;hp=1a1050c8da16d371e3f6fd5ffdd6847b27d04b8f;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/activity/backend_status.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/activity/backend_status.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/activity/backend_status.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/adt/lockfuncs.c;fp=src/backend/utils/adt/lockfuncs.c;h=bbe5cc0806eaa7bd9806aa4276bfd4cf5d008988;hp=4b49f7fe3d8711e1a3ab1537c75b4b31e8e83855;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/adt/lockfuncs.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/adt/lockfuncs.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/adt/lockfuncs.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/adt/mcxtfuncs.c;fp=src/backend/utils/adt/mcxtfuncs.c;h=a7267dc15d15215bd6451ae32c437f944ca01752;hp=4708d73f5fad6e92427e78e37dd023738e6051da;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/adt/mcxtfuncs.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/adt/mcxtfuncs.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/adt/mcxtfuncs.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/error/csvlog.c;fp=src/backend/utils/error/csvlog.c;h=1d44d8a6a310375234b5a7092602cabbb8d27662;hp=1b62b07f2313e096baf2a09e875989c29ae929ef;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/error/csvlog.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/error/csvlog.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/error/csvlog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/error/elog.c;fp=src/backend/utils/error/elog.c;h=149b4b8df13262718565a84e5b5f5d59afe8590c;hp=c9719f358b6c0bffdf2b9f4a7e35133d47f7e331;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/error/elog.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/error/elog.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/error/elog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/error/jsonlog.c;fp=src/backend/utils/error/jsonlog.c;h=067d9e30b164c207a5f038492eb5322fbc49088e;hp=2903561f1c471674736bcf02fa132cf91fcf82c1;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/error/jsonlog.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/error/jsonlog.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/error/jsonlog.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/init/postinit.c;fp=src/backend/utils/init/postinit.c;h=c49c048441b26f118ae88bb297b214e45c29503c;hp=5ffe9bdd987b6b27ccb343fa859109d9b583c456;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/init/postinit.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/init/postinit.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/init/postinit.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/time/snapmgr.c;fp=src/backend/utils/time/snapmgr.c;h=a0916959b17b3f55c547491b24836b49bdfc806a;hp=675e81d82d7109f650bebd087f6470792c225e21;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/time/snapmgr.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/time/snapmgr.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/backend/utils/time/snapmgr.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/miscadmin.h;fp=src/include/miscadmin.h;h=519ef8ad6845c559d19e74fc1f977b6fa955d398;hp=756d144c3236cc13b81a7c055dec00356fa9e657;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/miscadmin.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/miscadmin.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/miscadmin.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/backendid.h;fp=src/include/storage/backendid.h;h=01387723f79d73b2ffd34094ee99f7ef6ea9ad8d;hp=50ac982da1912f841476f07a90a8cf9e7c66f99f;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/backendid.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/backendid.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/storage/backendid.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/lock.h;fp=src/include/storage/lock.h;h=13b81228e5ba3e0b83feda496fa34a561c1aa565;hp=ed6071f328669a9ffb9b523a75c89e717a3124f3;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/lock.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/lock.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/storage/lock.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/proc.h;fp=src/include/storage/proc.h;h=1e8044633709e9fd4c11e865db17246814534b4e;hp=4453c6df87716bd169d084a783ff1d752d7db783;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/proc.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/proc.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/storage/proc.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/procarray.h;fp=src/include/storage/procarray.h;h=3af7577e8c61270150cd5cd15cc1a3e53a92ced6;hp=f3eba9b76403727e1f77055ce6414524a3772ca3;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/procarray.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/procarray.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/storage/procarray.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/procsignal.h;fp=src/include/storage/procsignal.h;h=febdda3611c4b24ff70cfe610a6094f194a2e175;hp=52dcb4c2adf6920abb75c4c6ee7439206023371d;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/procsignal.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/procsignal.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/storage/procsignal.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/sinvaladt.h;fp=src/include/storage/sinvaladt.h;h=c3c97b3f8b7ed6883817261773e53ef20d63a6eb;hp=aa3d203efca2b92810ad8718a998509ae268a8c8;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/sinvaladt.h;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/sinvaladt.h;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/include/storage/sinvaladt.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/pl/plpgsql/src/pl_exec.c;fp=src/pl/plpgsql/src/pl_exec.c;h=ed51694428a02a9417453a87d5777668a949c574;hp=6d1691340c5d5946858123115d9678b586a9eda8;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad;hpb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/pl/plpgsql/src/pl_exec.c;hb=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/pl/plpgsql/src/pl_exec.c;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad" title="history">H</a>] src/pl/plpgsql/src/pl_exec.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>GUC table: Add description to computed variables</title>
<author>Alvaro Herrera &lt;alvherre@alvh.no-ip.org&gt;</author>
<pubDate>Sun, 3 Mar 2024 13:53:47 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34</link>
<description>GUC table: Add description to computed variables</description>
<content:encoded><![CDATA[
<pre>
GUC table: Add description to computed variables
Per suggestion from Kyotaro Horiguchi
Discussion: https://postgr.es/m/20240229.130404.1411153273308142188.horikyota.ntt@gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/misc/guc_tables.c;fp=src/backend/utils/misc/guc_tables.c;h=543a87c659699d555b7abb5b97393d500ce4f605;hp=93ded31ed9205e057e38fd2d435bfe31b9fef963;hb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34;hpb=875e46a0a246e416b12a9debe084ede9d02f1b5d" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/misc/guc_tables.c;hb=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/misc/guc_tables.c;h=30b8d6e4ce1112168ddfe8cdbba76fbefd304b34" title="history">H</a>] src/backend/utils/misc/guc_tables.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Documentation update for Standard Collations.</title>
<author>Jeff Davis &lt;jdavis@postgresql.org&gt;</author>
<pubDate>Sat, 2 Mar 2024 21:37:43 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=875e46a0a246e416b12a9debe084ede9d02f1b5d</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=875e46a0a246e416b12a9debe084ede9d02f1b5d</link>
<description>Documentation update for Standard Collations.</description>
<content:encoded><![CDATA[
<pre>
Documentation update for Standard Collations.
Correct out-of-date text that said the &quot;default&quot; collation is always
based on LC_COLLATE and LC_CTYPE.
Also reformat into a list to make it easier to understand and compare
the available collations, and briefly document the stability
characteristics of each one.
Discussion: https://postgr.es/m/4a69d067374d2f6bfb66f5bfb2ab9a020493d49f.camel@j-davis.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/charset.sgml;fp=doc/src/sgml/charset.sgml;h=4fc143025ef5440cf60b42cc9682316907fe4d09;hp=74783d148fef221ec0b87d2a8997b6930192e1bf;hb=875e46a0a246e416b12a9debe084ede9d02f1b5d;hpb=1e013746544bd1f9df70f5547894fd72719c4b85" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/charset.sgml;hb=875e46a0a246e416b12a9debe084ede9d02f1b5d" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/charset.sgml;h=875e46a0a246e416b12a9debe084ede9d02f1b5d" title="history">H</a>] doc/src/sgml/charset.sgml</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Fix overflow in Windows replacement pg_pread/pg_pwrite.</title>
<author>Thomas Munro &lt;tmunro@postgresql.org&gt;</author>
<pubDate>Sat, 2 Mar 2024 19:40:41 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=1e013746544bd1f9df70f5547894fd72719c4b85</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=1e013746544bd1f9df70f5547894fd72719c4b85</link>
<description>Fix overflow in Windows replacement pg_pread/pg_pwrite.</description>
<content:encoded><![CDATA[
<pre>
Fix overflow in Windows replacement pg_pread/pg_pwrite.
When calling the Windows file I/O APIs there is an implicit conversion
from size_t to DWORD, which could overflow. Clamp the size at 1GB to
avoid that.
Not a really a live bug as we don&#39;t expect anything in PostgreSQL to
call with such large values.
Reviewed-by: Peter Eisentraut &lt;peter@eisentraut.org&gt;
Discussion: https://postgr.es/m/1672202.1703441340%40sss.pgh.pa.us
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/port/win32pread.c;fp=src/port/win32pread.c;h=2d022e6d3784e45c8055ca91605754671e936c85;hp=e1a066fdbe483a854d6d87ec737f4c415bbf2c0e;hb=1e013746544bd1f9df70f5547894fd72719c4b85;hpb=653b55b57081dc6fb8c75d61870c5fdc8c8554cc" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/port/win32pread.c;hb=1e013746544bd1f9df70f5547894fd72719c4b85" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/port/win32pread.c;h=1e013746544bd1f9df70f5547894fd72719c4b85" title="history">H</a>] src/port/win32pread.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/port/win32pwrite.c;fp=src/port/win32pwrite.c;h=b37bb2f92e0ab2094bc6541c734ad7549b3b672c;hp=c54bf041bf34a72167a6fd7756376d7435e2ed1b;hb=1e013746544bd1f9df70f5547894fd72719c4b85;hpb=653b55b57081dc6fb8c75d61870c5fdc8c8554cc" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/port/win32pwrite.c;hb=1e013746544bd1f9df70f5547894fd72719c4b85" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/port/win32pwrite.c;h=1e013746544bd1f9df70f5547894fd72719c4b85" title="history">H</a>] src/port/win32pwrite.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Return ssize_t in fd.c I/O functions.</title>
<author>Thomas Munro &lt;tmunro@postgresql.org&gt;</author>
<pubDate>Fri, 1 Mar 2024 22:59:34 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=653b55b57081dc6fb8c75d61870c5fdc8c8554cc</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=653b55b57081dc6fb8c75d61870c5fdc8c8554cc</link>
<description>Return ssize_t in fd.c I/O functions.</description>
<content:encoded><![CDATA[
<pre>
Return ssize_t in fd.c I/O functions.
In the past, FileRead() and FileWrite() used types based on the Unix
read() and write() functions from before C and POSIX standardization,
though not exactly (we had int for amount instead of unsigned). In
commit 2d4f1ba6 we changed to the appropriate standard C types, just
like the modern POSIX functions they wrap, but again not exactly: the
return type stayed as int. In theory, a ssize_t value could be returned
by the underlying call that is too large for an int.
That wasn&#39;t really a live bug, because we don&#39;t expect PostgreSQL code
to perform reads or writes of gigabytes, and OSes probably apply
internal caps smaller than that anyway. This change is done on the
principle that the return might as well follow the standard interfaces
consistently.
Reported-by: Tom Lane &lt;tgl@sss.pgh.pa.us&gt;
Reviewed-by: Peter Eisentraut &lt;peter@eisentraut.org&gt;
Discussion: https://postgr.es/m/1672202.1703441340%40sss.pgh.pa.us
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/storage/file/fd.c;fp=src/backend/storage/file/fd.c;h=8c8e81f899bf16c171382c5519fc9c0470efd0e7;hp=d298e4842cac599d3bfdb5f595a7842c3cea2814;hb=653b55b57081dc6fb8c75d61870c5fdc8c8554cc;hpb=655dc310460c601d434d05339b7fa46ed97675b3" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/storage/file/fd.c;hb=653b55b57081dc6fb8c75d61870c5fdc8c8554cc" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/storage/file/fd.c;h=653b55b57081dc6fb8c75d61870c5fdc8c8554cc" title="history">H</a>] src/backend/storage/file/fd.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/storage/fd.h;fp=src/include/storage/fd.h;h=a173174db9710a593ffe54ae6eea30c4126dbcb4;hp=60bba5c97080c938c070646d1393f0d738e5881e;hb=653b55b57081dc6fb8c75d61870c5fdc8c8554cc;hpb=655dc310460c601d434d05339b7fa46ed97675b3" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/storage/fd.h;hb=653b55b57081dc6fb8c75d61870c5fdc8c8554cc" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/storage/fd.h;h=653b55b57081dc6fb8c75d61870c5fdc8c8554cc" title="history">H</a>] src/include/storage/fd.h</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Simplify pg_enc2gettext_tbl[] with C99-designated initializer syntax</title>
<author>Michael Paquier &lt;michael@paquier.xyz&gt;</author>
<pubDate>Fri, 1 Mar 2024 09:03:48 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=655dc310460c601d434d05339b7fa46ed97675b3</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=655dc310460c601d434d05339b7fa46ed97675b3</link>
<description>Simplify pg_enc2gettext_tbl[] with C99-designated initializer syntax</description>
<content:encoded><![CDATA[
<pre>
Simplify pg_enc2gettext_tbl[] with C99-designated initializer syntax
This commit switches pg_enc2gettext_tbl[] in encnames.c to use a
C99-designated initializer syntax.
pg_bind_textdomain_codeset() is simplified so as it is possible to do
a direct lookup at the gettext() array with a value of the enum pg_enc
rather than doing a loop through all its elements, as long as the
encoding value provided by GetDatabaseEncoding() is in the correct range
of supported encoding values. Note that PG_MULE_INTERNAL gains a value
in the array, pointing to NULL.
Author: Jelte Fennema-Nio
Discussion: https://postgr.es/m/CAGECzQT3caUbcCcszNewCCmMbCuyP7XNAm60J3ybd6PN5kH2Dw@mail.gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/mb/mbutils.c;fp=src/backend/utils/mb/mbutils.c;h=7108ab89836afb8c2ec5ba6905679b41710598e6;hp=c13f947a8278df95c83d16eac3dffc262b7bad2d;hb=655dc310460c601d434d05339b7fa46ed97675b3;hpb=def0ce3370689b939c6d7a3c3eb824d69989ef6e" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/mb/mbutils.c;hb=655dc310460c601d434d05339b7fa46ed97675b3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/mb/mbutils.c;h=655dc310460c601d434d05339b7fa46ed97675b3" title="history">H</a>] src/backend/utils/mb/mbutils.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/common/encnames.c;fp=src/common/encnames.c;h=910cc2c7e5cf0fc3062b1766465de18e744ba9ce;hp=dba6bd2c9eef4e1a53db1f90ea6dbcc3c1b071ef;hb=655dc310460c601d434d05339b7fa46ed97675b3;hpb=def0ce3370689b939c6d7a3c3eb824d69989ef6e" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/common/encnames.c;hb=655dc310460c601d434d05339b7fa46ed97675b3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/common/encnames.c;h=655dc310460c601d434d05339b7fa46ed97675b3" title="history">H</a>] src/common/encnames.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/mb/pg_wchar.h;fp=src/include/mb/pg_wchar.h;h=32e25a1a6eae98154ae1de9aec4502156ad10f25;hp=fd91aefbcb70846e1f5ce63f7d7ccea0820b733d;hb=655dc310460c601d434d05339b7fa46ed97675b3;hpb=def0ce3370689b939c6d7a3c3eb824d69989ef6e" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/mb/pg_wchar.h;hb=655dc310460c601d434d05339b7fa46ed97675b3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/mb/pg_wchar.h;h=655dc310460c601d434d05339b7fa46ed97675b3" title="history">H</a>] src/include/mb/pg_wchar.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/tools/pgindent/typedefs.list;fp=src/tools/pgindent/typedefs.list;h=ee40a341d3f92cb92f8f126265e82dd6ac16ba7b;hp=fc8b15d0cf2bfb89b3622d28831856a170d5bf7b;hb=655dc310460c601d434d05339b7fa46ed97675b3;hpb=def0ce3370689b939c6d7a3c3eb824d69989ef6e" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/tools/pgindent/typedefs.list;hb=655dc310460c601d434d05339b7fa46ed97675b3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/tools/pgindent/typedefs.list;h=655dc310460c601d434d05339b7fa46ed97675b3" title="history">H</a>] src/tools/pgindent/typedefs.list</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Fix BF failure introduced by commit b3f6b14cf4.</title>
<author>Amit Kapila &lt;akapila@postgresql.org&gt;</author>
<pubDate>Fri, 1 Mar 2024 04:55:36 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=def0ce3370689b939c6d7a3c3eb824d69989ef6e</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=def0ce3370689b939c6d7a3c3eb824d69989ef6e</link>
<description>Fix BF failure introduced by commit b3f6b14cf4.</description>
<content:encoded><![CDATA[
<pre>
Fix BF failure introduced by commit b3f6b14cf4.
The test added by commit b3f6b14cf4 uses a non-superuser and forgot to set
up pg_hba.conf to allow connections from it. The special setup is only
needed on Windows machines that don&#39;t use UNIX sockets.
As per buildfarm
Discussion: https://postgr.es/m/CAJpy0uCfrSspV1x3VWkgamqyhYaUWQZpP0nqjJx4YPvKqN6P_A@mail.gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/recovery/t/040_standby_failover_slots_sync.pl;fp=src/test/recovery/t/040_standby_failover_slots_sync.pl;h=021c58f621cc839617660502a596ede2fd33215b;hp=825c26da6f236b673f4348fbc997900c949f387d;hb=def0ce3370689b939c6d7a3c3eb824d69989ef6e;hpb=963d3072af21afbcb1183b3c960135cc7df02f3f" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/recovery/t/040_standby_failover_slots_sync.pl;hb=def0ce3370689b939c6d7a3c3eb824d69989ef6e" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/recovery/t/040_standby_failover_slots_sync.pl;h=def0ce3370689b939c6d7a3c3eb824d69989ef6e" title="history">H</a>] src/test/recovery/t/040_standby_failover_slots_sync.pl</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Convert unloggedLSN to an atomic variable.</title>
<author>Nathan Bossart &lt;nathan@postgresql.org&gt;</author>
<pubDate>Thu, 29 Feb 2024 20:34:10 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=963d3072af21afbcb1183b3c960135cc7df02f3f</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=963d3072af21afbcb1183b3c960135cc7df02f3f</link>
<description>Convert unloggedLSN to an atomic variable.</description>
<content:encoded><![CDATA[
<pre>
Convert unloggedLSN to an atomic variable.
Currently, this variable is an XLogRecPtr protected by a spinlock.
By converting it to an atomic variable, we can remove the spinlock,
which saves a small amount of shared memory space. Since this code
is not performance-critical, we use atomic operations with full
barrier semantics to make it easy to reason about correctness.
Author: John Morris
Reviewed-by: Michael Paquier, Robert Haas, Andres Freund, Stephen Frost, Bharath Rupireddy
Discussion: https://postgr.es/m/BYAPR13MB26772534335255E50318C574A0409%40BYAPR13MB2677.namprd13.prod.outlook.com
Discussion: https://postgr.es/m/MN2PR13MB2688FD8B757316CB5C54C8A2A0DDA%40MN2PR13MB2688.namprd13.prod.outlook.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/xlog.c;fp=src/backend/access/transam/xlog.c;h=eb02e3b6a6f82b7f2511bd26d6c921eb2d7d261f;hp=c1162d55bff8cc97f0e62984c5c350465dcbbe44;hb=963d3072af21afbcb1183b3c960135cc7df02f3f;hpb=3179701505b9ec58243ffba9d22b1803f320bf60" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/xlog.c;hb=963d3072af21afbcb1183b3c960135cc7df02f3f" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/xlog.c;h=963d3072af21afbcb1183b3c960135cc7df02f3f" title="history">H</a>] src/backend/access/transam/xlog.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Convert archiver&#39;s force_dir_scan variable to an atomic variable.</title>
<author>Nathan Bossart &lt;nathan@postgresql.org&gt;</author>
<pubDate>Thu, 29 Feb 2024 16:17:55 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=3179701505b9ec58243ffba9d22b1803f320bf60</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=3179701505b9ec58243ffba9d22b1803f320bf60</link>
<description>Convert archiver&#39;s force_dir_scan variable to an atomic variable.</description>
<content:encoded><![CDATA[
<pre>
Convert archiver&#39;s force_dir_scan variable to an atomic variable.
Commit bd5132db55 introduced new atomic read/write functions with
full barrier semantics, which are intended to simplify converting
non-performance-critical code to use atomic variables. This commit
demonstrates one such conversion.
Reviewed-by: Yong Li
Discussion: https://postgr.es/m/20231110205128.GB1315705%40nathanxps13
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/postmaster/pgarch.c;fp=src/backend/postmaster/pgarch.c;h=04fedfae2fa6791d28d01ac5442e90965d7814c2;hp=9c18e4b3efbc698b71925d474e14adbc75e1d00c;hb=3179701505b9ec58243ffba9d22b1803f320bf60;hpb=bd5132db558b6c8d11eb838be81e2177a95c7388" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/postmaster/pgarch.c;hb=3179701505b9ec58243ffba9d22b1803f320bf60" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/postmaster/pgarch.c;h=3179701505b9ec58243ffba9d22b1803f320bf60" title="history">H</a>] src/backend/postmaster/pgarch.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Introduce atomic read/write functions with full barrier semantics.</title>
<author>Nathan Bossart &lt;nathan@postgresql.org&gt;</author>
<pubDate>Thu, 29 Feb 2024 16:00:44 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=bd5132db558b6c8d11eb838be81e2177a95c7388</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=bd5132db558b6c8d11eb838be81e2177a95c7388</link>
<description>Introduce atomic read/write functions with full barrier semantics.</description>
<content:encoded><![CDATA[
<pre>
Introduce atomic read/write functions with full barrier semantics.
Writing correct code using atomic variables is often difficult due
to the memory barrier semantics (or lack thereof) of the underlying
operations. This commit introduces atomic read/write functions
with full barrier semantics to ease this cognitive load. For
example, some spinlocks protect a single value, and these new
functions make it easy to convert the value to an atomic variable
(thus eliminating the need for the spinlock) without modifying the
barrier semantics previously provided by the spinlock. Since these
functions may be less performant than the other atomic reads and
writes, they are not suitable for every use-case. However, using a
single atomic operation with full barrier semantics may be more
performant in cases where a separate explicit barrier would
otherwise be required.
The base implementations for these new functions are atomic
exchanges (for writes) and atomic fetch/adds with 0 (for reads).
These implementations can be overwritten with better architecture-
specific versions as they are discovered.
This commit leaves converting existing code to use these new
functions aswith full barrier semantics.</description>
<content:encoded><![CDATA[
<pre>
Introduce atomic read/write functions with full barrier semantics.
Writing correct code using atomic variables is often difficult due
to the memory barrier semantics (or lack thereof) of the underlying
operations. This commit introduces atomic read/write functions
with full barrier semantics to ease this cognitive load. For
example, some spinlocks protect a single value, and these new
functions make it easy to convert the value to an atomic variable
(thus eliminating the need for the spinlock) without modifying the
barrier semantics previously provided by the spinlock. Since these
functions may be less performant than the other atomic reads and
writes, they are not suitable for every use-case. However, using a
single atomic operation with full barrier semantics may be more
performant in cases where a separate explicit barrier would
otherwise be required.
The base implementations for these new functions are atomic
exchanges (for writes) and atomic fetch/adds with 0 (for reads).
These implementations can be overwritten with better architecture-
specific versions as they are discovered.
This commit leaves converting existing code to use these new
functions as a future exercise.
Reviewed-by: Andres Freund, Yong Li, Jeff Davis
Discussion: https://postgr.es/m/20231110205128.GB1315705%40nathanxps13
</pre><ul> a future exercise.
Reviewed-by: Andres Freund, Yong Li, Jeff Davis
Discussion: https://postgr.es/m/20231110205128.GB1315705%40nathanxps13
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/port/atomics.h;fp=src/include/port/atomics.h;h=ff47782cdbaa7f79785eb3355706bbe0888792fc;hp=504349080d496aae4c239ad8b8f9ef056dad80ff;hb=bd5132db558b6c8d11eb838be81e2177a95c7388;hpb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/port/atomics.h;hb=bd5132db558b6c8d11eb838be81e2177a95c7388" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/port/atomics.h;h=bd5132db558b6c8d11eb838be81e2177a95c7388" title="history">H</a>] src/include/port/atomics.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/port/atomics/generic.h;fp=src/include/port/atomics/generic.h;h=6113ab62a31ad2d2bc226d08cedd1f529879b600;hp=c3b5f6d9a42e6b82acdfde41690c47c903266990;hb=bd5132db558b6c8d11eb838be81e2177a95c7388;hpb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/port/atomics/generic.h;hb=bd5132db558b6c8d11eb838be81e2177a95c7388" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/port/atomics/generic.h;h=bd5132db558b6c8d11eb838be81e2177a95c7388" title="history">H</a>] src/include/port/atomics/generic.h</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Support MERGE into updatable views.</title>
<author>Dean Rasheed &lt;dean.a.rasheed@gmail.com&gt;</author>
<pubDate>Thu, 29 Feb 2024 15:56:59 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3</link>
<description>Support MERGE into updatable views.</description>
<content:encoded><![CDATA[
<pre>
Support MERGE into updatable views.
This allows the target relation of MERGE to be an auto-updatable or
trigger-updatable view, and includes support for WITH CHECK OPTION,
security barrier views, and security invoker views.
A trigger-updatable view must have INSTEAD OF triggers for every type
of action (INSERT, UPDATE, and DELETE) mentioned in the MERGE command.
An auto-updatable view must not have any INSTEAD OF triggers. Mixing
auto-update and trigger-update actions (i.e., having a partial set of
INSTEAD OF triggers) is not supported.
Rule-updatable views are also not supported, since there is no
rewriter support for non-SELECT rules with MERGE operations.
Dean Rasheed, reviewed by Jian He and Alvaro Herrera.
Discussion: https://postgr.es/m/CAEZATCVcB1g0nmxuEc-A+gGB0HnfcGQNGYH7gS=7rq0u0zOBXA@mail.gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/ref/create_view.sgml;fp=doc/src/sgml/ref/create_view.sgml;h=e8d9d3c8d0f64afd34a982390c2245d93014b5a2;hp=3b26205f7883ce8c081612c3df3176e46f85ec03;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/ref/create_view.sgml;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/ref/create_view.sgml;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] doc/src/sgml/ref/create_view.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/ref/merge.sgml;fp=doc/src/sgml/ref/merge.sgml;h=7a8ac40259ce1eeba5741e9e5efb236fb1577554;hp=bb34ef9b921bd00dfabc75f471324ac38cd7c4b0;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/ref/merge.sgml;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/ref/merge.sgml;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] doc/src/sgml/ref/merge.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/rules.sgml;fp=doc/src/sgml/rules.sgml;h=784c16e76ea0129d6747477248fc310909b0ed1a;hp=d229b94d396b055e781c1ad00778ec7e499965a8;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/rules.sgml;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/rules.sgml;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] doc/src/sgml/rules.sgml</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/commands/copyfrom.c;fp=src/backend/commands/copyfrom.c;h=c3bc897028a6180fe3dabc41dde74ea35b0d2643;hp=1fe70b913382760c52097557b9a3e4e4b9d773f4;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/copyfrom.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/copyfrom.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/commands/copyfrom.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/executor/execMain.c;fp=src/backend/executor/execMain.c;h=79ef46f2614193c7f76ee53f51dad5d0d82787c4;hp=13a9b7da83b28a9f2647aac9f21702ecd94be773;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/executor/execMain.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/executor/execMain.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/executor/execMain.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/executor/execPartition.c;fp=src/backend/executor/execPartition.c;h=429f0a8dd984bfcccc5f1d701d00e529170aee78;hp=b22040ae8ee2b78ecf72e39db991fb8a8f57364f;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/executor/execPartition.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/executor/execPartition.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/executor/execPartition.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/executor/nodeModifyTable.c;fp=src/backend/executor/nodeModifyTable.c;h=ff7ec8419bbd83756e615fb4b6f9811f723800b2;hp=098ed4026b60096fa8f6ce6bce0c2c672b0fb20e;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/executor/nodeModifyTable.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/executor/nodeModifyTable.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/executor/nodeModifyTable.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/optimizer/prep/prepjointree.c;fp=src/backend/optimizer/prep/prepjointree.c;h=300691cc4db15c4c94bd26ee69a75886ebcc7b8b;hp=aa83dd3636fe89dafac35170d250baafd0d7e1c5;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/optimizer/prep/prepjointree.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/optimizer/prep/prepjointree.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/optimizer/prep/prepjointree.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/optimizer/util/appendinfo.c;fp=src/backend/optimizer/util/appendinfo.c;h=6ba4eba224a5834ccfb87b601fc5d7f6711dd890;hp=51fdeace7d233944230039f67679ff784860644d;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/optimizer/util/appendinfo.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/optimizer/util/appendinfo.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/optimizer/util/appendinfo.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/parser/parse_merge.c;fp=src/backend/parser/parse_merge.c;h=4356d61f8ede4af474693064f4d53b8add8b816a;hp=73f7a48b3c69beb10eea1682db4e4962990fb965;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/parser/parse_merge.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/parser/parse_merge.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/parser/parse_merge.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/rewrite/rewriteHandler.c;fp=src/backend/rewrite/rewriteHandler.c;h=b8839b56b7ad6185cee118182f5b597c33c78f1f;hp=f60b34deb640db353c94b174c9c14a5412bc5d1a;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/rewrite/rewriteHandler.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/rewrite/rewriteHandler.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/rewrite/rewriteHandler.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/rewrite/rewriteManip.c;fp=src/backend/rewrite/rewriteManip.c;h=191f2dc0b1d8d00beb06aedb0f7e2c2af48464fa;hp=76c97a5b28edaa1255a672ab8ed9be4f5a1b2f75;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/rewrite/rewriteManip.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/rewrite/rewriteManip.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/backend/rewrite/rewriteManip.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/bin/psql/tab-complete.c;fp=src/bin/psql/tab-complete.c;h=aa1acf85235e62397ce10870864b7eb7b8b3b493;hp=151a5211ee4a20a4a90cd806fe0ef40ea0e810af;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/bin/psql/tab-complete.c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/bin/psql/tab-complete.c;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/bin/psql/tab-complete.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/catalog/catversion.h;fp=src/include/catalog/catversion.h;h=7faa6a9bb7cf1db5cd7563ee48cbe6edeb7b90e4;hp=61beae92e2821261db438d94b7aa034d9e0228a2;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/catalog/catversion.h;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/catalog/catversion.h;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/include/catalog/catversion.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/executor/executor.h;fp=src/include/executor/executor.h;h=9770752ea3c1bdb8b446ecf732f332f39a4aafbe;hp=5e8c335a7379a660df58e6b1f8198cd7a9f3ac7b;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/executor/executor.h;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/executor/executor.h;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/include/executor/executor.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/nodes/parsenodes.h;fp=src/include/nodes/parsenodes.h;h=d60e148ff262e1f0a26927eaad73d7b53bd843bc;hp=baa6a97c7e267e5f9fa49632b23d822debfb061a;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/nodes/parsenodes.h;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/nodes/parsenodes.h;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/include/nodes/parsenodes.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/rewrite/rewriteHandler.h;fp=src/include/rewrite/rewriteHandler.h;h=1b65cda71cfc7ee6e3df011e66d2ab3c62e46517;hp=14d3f3017a2902f27337155fd00cdbdbd2ee9fa4;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/rewrite/rewriteHandler.h;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/rewrite/rewriteHandler.h;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/include/rewrite/rewriteHandler.h</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/expected/merge.out;fp=src/test/regress/expected/merge.out;h=e3ebf46e61112038ab26309882f6769ab6ada2c6;hp=28a69802d7297e96eadd24d58c1c668c7a5e35d4;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/expected/merge.out;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/regress/expected/merge.out;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/test/regress/expected/merge.out</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/expected/rules.out;fp=src/test/regress/expected/rules.out;h=0cd2c64fca10d60c4094d3ff7520e6bd82f69387;hp=b7488d760e5ea74ad8302fd955fd40721d64d214;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/expected/rules.out;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/regress/expected/rules.out;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/test/regress/expected/rules.out</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/expected/updatable_views.out;fp=src/test/regress/expected/updatable_views.out;h=794cf9cf930474ca742a1be50604bc77db38d8d0;hp=1950e6f281f5f729eae12be95024f39490e53bef;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/expected/updatable_views.out;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/regress/expected/updatable_views.out;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/test/regress/expected/updatable_views.out</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/sql/merge.sql;fp=src/test/regress/sql/merge.sql;h=79a18684e481c3225e4339f45f5e467748404ace;hp=82faa7364ca9210fd6a502dc2d6ba665c0c944d4;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/sql/merge.sql;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/regress/sql/merge.sql;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/test/regress/sql/merge.sql</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/sql/rules.sql;fp=src/test/regress/sql/rules.sql;h=6924012a10c973b0eaacf1d571d5b33f48891906;hp=93aff4e66fff5e8b8a52b69b84dee66ea9f0244c;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/sql/rules.sql;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/regress/sql/rules.sql;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/test/regress/sql/rules.sql</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/sql/updatable_views.sql;fp=src/test/regress/sql/updatable_views.sql;h=ae11e46da2813ac753851972aadc6940fef24269;hp=eaee0b7e1d7164be271e5c7032211a5a0d2062c0;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3;hpb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/sql/updatable_views.sql;hb=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/regress/sql/updatable_views.sql;h=5f2e179bd31e5f5803005101eb12a8d7bf8db8f3" title="history">H</a>] src/test/regress/sql/updatable_views.sql</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Add missing RangeTblEntry field to jumble</title>
<author>Peter Eisentraut &lt;peter@eisentraut.org&gt;</author>
<pubDate>Thu, 29 Feb 2024 13:05:56 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=8b29a119fdaa381d6f75105f539b1e658c0f8cdb</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=8b29a119fdaa381d6f75105f539b1e658c0f8cdb</link>
<description>Add missing RangeTblEntry field to jumble</description>
<content:encoded><![CDATA[
<pre>
Add missing RangeTblEntry field to jumble
RangeTblEntry.funcordinality should be jumbled, because the WITH
ORDINALITY clause changes the query result.
This was apparently an oversight in the past.
Discussion: https://www.postgresql.org/message-id/flat/d7f421f8-fd6d-4759-adc3-247090a5d44b%40eisentraut.org
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/nodes/queryjumblefuncs.c;fp=src/backend/nodes/queryjumblefuncs.c;h=426112fa37b7d60bf817a297c4b186fde6018124;hp=82f725baaa55c6122e3348a683b6d262ca767dd0;hb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb;hpb=362de947cd7e8c826d9b3c5dc2590348263ed3c1" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/nodes/queryjumblefuncs.c;hb=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/nodes/queryjumblefuncs.c;h=8b29a119fdaa381d6f75105f539b1e658c0f8cdb" title="history">H</a>] src/backend/nodes/queryjumblefuncs.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Remove field UpdateContext-&gt;updated in nodeModifyTable.c</title>
<author>Dean Rasheed &lt;dean.a.rasheed@gmail.com&gt;</author>
<pubDate>Thu, 29 Feb 2024 11:49:30 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=362de947cd7e8c826d9b3c5dc2590348263ed3c1</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=362de947cd7e8c826d9b3c5dc2590348263ed3c1</link>
<description>Remove field UpdateContext-&gt;updated in nodeModifyTable.c</description>
<content:encoded><![CDATA[
<pre>
Remove field UpdateContext-&gt;updated in nodeModifyTable.c
This field has been redundant ever since it was added by commit
25e777cf8e, which split up ExecUpdate() and ExecDelete() into reusable
pieces. The only place that reads it is ExecMergeMatched(), if the
result from ExecUpdateAct() is TM_Ok. However, all paths through
ExecUpdateAct() that return TM_Ok also set this field to true, so the
return status by itself is sufficient to tell if the update happened.
Removing this field is a modest simplification, and it brings the
UPDATE path in ExecMergeMatched() more into line with ExecUpdate(),
ensuring that ExecUpdateEpilogue() is always called if ExecUpdateAct()
returns TM_Ok, reducing the chance of bugs.
Dean Rasheed, reviewed by Alvaro Herrera.
Discussion: https://postgr.es/m/CAEZATCWGGmigGBzLHkJm5Ccv2mMxXmwi3%2Buq0yhwDHm-tsvSLg%40mail.gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/executor/nodeModifyTable.c;fp=src/backend/executor/nodeModifyTable.c;h=098ed4026b60096fa8f6ce6bce0c2c672b0fb20e;hp=9fc5abff8f0c6e1962fa50b94de60d46f0edd0b3;hb=362de947cd7e8c826d9b3c5dc2590348263ed3c1;hpb=6fd144e3a9664ea545d10008c48dceb6c4e9d38a" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/executor/nodeModifyTable.c;hb=362de947cd7e8c826d9b3c5dc2590348263ed3c1" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/executor/nodeModifyTable.c;h=362de947cd7e8c826d9b3c5dc2590348263ed3c1" title="history">H</a>] src/backend/executor/nodeModifyTable.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Fix integer underflow in shared memory debugging</title>
<author>Daniel Gustafsson &lt;dgustafsson@postgresql.org&gt;</author>
<pubDate>Thu, 29 Feb 2024 11:19:52 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=6fd144e3a9664ea545d10008c48dceb6c4e9d38a</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=6fd144e3a9664ea545d10008c48dceb6c4e9d38a</link>
<description>Fix integer underflow in shared memory debugging</description>
<content:encoded><![CDATA[
<pre>
Fix integer underflow in shared memory debugging
dsa_dump would print a large negative number instead of zero for
segment bin 0. Fix by explicitly checking for underflow and add
special case for bin 0. Backpatch to all supported versions.
Author: Ian Ilyasov &lt;ianilyasov@outlook.com&gt;
Reviewed-by: Robert Haas &lt;robertmhaas@gmail.com&gt;
Discussion: https://postgr.es/m/GV1P251MB1004E0D09D117D3CECF9256ECD502@GV1P251MB1004.EURP251.PROD.OUTLOOK.COM
Backpatch-through: v12
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/utils/mmgr/dsa.c;fp=src/backend/utils/mmgr/dsa.c;h=b9e7f224d517ee9a2f25f5bf58c39e05ee60a2c7;hp=a6b728ba9ffb21e83a03dedab9dcdc6bf9143893;hb=6fd144e3a9664ea545d10008c48dceb6c4e9d38a;hpb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/mmgr/dsa.c;hb=6fd144e3a9664ea545d10008c48dceb6c4e9d38a" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/mmgr/dsa.c;h=6fd144e3a9664ea545d10008c48dceb6c4e9d38a" title="history">H</a>] src/backend/utils/mmgr/dsa.c</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Fixups for commit 93db6cbda0.</title>
<author>Amit Kapila &lt;akapila@postgresql.org&gt;</author>
<pubDate>Thu, 29 Feb 2024 04:15:20 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=b3f6b14cf48ffa81084072f1fdeee2fe9df20746</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=b3f6b14cf48ffa81084072f1fdeee2fe9df20746</link>
<description>Fixups for commit 93db6cbda0.</description>
<content:encoded><![CDATA[
<pre>
Fixups for commit 93db6cbda0.
Ensure to set always-secure search path for both local and remote
connections during slot synchronization, so that malicious users can&#39;t
redirect user code (e.g. operators).
In the passing, improve the name of define, remove spurious return
statement, and a minor change in one of the comments.
Author: Bertrand Drouvot and Shveta Malik
Reviewed-by: Amit Kapila, Peter Smith
Discussion: https://postgr.es/m/514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com
Discussion: https://postgr.es/m/ZdcejBDCr+wlVGnO@ip-10-97-1-34.eu-west-3.compute.internal
Discussion: https://postgr.es/m/CAJpy0uBNP=nrkNJkJSfF=jSocEh8vU2Owa8Rtpi=63fG=SvfVQ@mail.gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/access/transam/xlogrecovery.c;fp=src/backend/access/transam/xlogrecovery.c;h=9d907bf0e45cfb91f6a1c107ef361c38fa784b7c;hp=d73a49b3e81cb22b4090423a63cb1ceff335e7ae;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746;hpb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/transam/xlogrecovery.c;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/access/transam/xlogrecovery.c;h=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="history">H</a>] src/backend/access/transam/xlogrecovery.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/replication/libpqwalreceiver/libpqwalreceiver.c;fp=src/backend/replication/libpqwalreceiver/libpqwalreceiver.c;h=1519b27adca1e683181e2c3701eb8ca0c6a9fc20;hp=04271ee7032007391bbc6811abca6357a78a7a38;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746;hpb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/replication/libpqwalreceiver/libpqwalreceiver.c;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/replication/libpqwalreceiver/libpqwalreceiver.c;h=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="history">H</a>] src/backend/replication/libpqwalreceiver/libpqwalreceiver.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/backend/replication/logical/slotsync.c;fp=src/backend/replication/logical/slotsync.c;h=8ecb85b86a3adf6300a1c3fa97085074a6a532e0;hp=36773cfe73f35cb9d5a3d1a1f149338d35597dd2;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746;hpb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/backend/replication/logical/slotsync.c;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/backend/replication/logical/slotsync.c;h=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="history">H</a>] src/backend/replication/logical/slotsync.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/recovery/t/040_standby_failover_slots_sync.pl;fp=src/test/recovery/t/040_standby_failover_slots_sync.pl;h=825c26da6f236b673f4348fbc997900c949f387d;hp=968aa7b05bf54be005e56136638b2844346a5a0d;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746;hpb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/recovery/t/040_standby_failover_slots_sync.pl;hb=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/recovery/t/040_standby_failover_slots_sync.pl;h=b3f6b14cf48ffa81084072f1fdeee2fe9df20746" title="history">H</a>] src/test/recovery/t/040_standby_failover_slots_sync.pl</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Use C99-designated initializer syntax for arrays related to encodings</title>
<author>Michael Paquier &lt;michael@paquier.xyz&gt;</author>
<pubDate>Thu, 29 Feb 2024 00:54:25 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ada87a4d95fc39dfb1214edf6653390314b6f0df</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ada87a4d95fc39dfb1214edf6653390314b6f0df</link>
<description>Use C99-designated initializer syntax for arrays related to encodings</description>
<content:encoded><![CDATA[
<pre>
Use C99-designated initializer syntax for arrays related to encodings
This updates the following lookup arrays to use C99-designated
initializer syntax, indexed based on the enum pg_enc:
pg_enc2icu_tbl[]
pg_enc2name_tbl[]
pg_wchar_table[]
This is more readable, and removes problems with ordering mistakes as
this removes dependencies between the arrays and their lookup index in
the enum pg_enc. So, adding new encodings becomes easier, even if this
does not happen often.
Author: Jelte Fennema-Nio
Reviewed-by: Jian He, Japin Li
Discussion: https://postgr.es/m/CAGECzQT3caUbcCcszNewCCmMbCuyP7XNAm60J3ybd6PN5kH2Dw@mail.gmail.com
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/common/encnames.c;fp=src/common/encnames.c;h=dba6bd2c9eef4e1a53db1f90ea6dbcc3c1b071ef;hp=710b747f6bdbf2774a41979ac9dea27119081c32;hb=ada87a4d95fc39dfb1214edf6653390314b6f0df;hpb=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/common/encnames.c;hb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/common/encnames.c;h=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="history">H</a>] src/common/encnames.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/common/wchar.c;fp=src/common/wchar.c;h=7e7a7507d5cc8d563b325591c1edd050c39d5de7;hp=7c5ce5ca081faa388cb42835d63e4f64973b318e;hb=ada87a4d95fc39dfb1214edf6653390314b6f0df;hpb=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/common/wchar.c;hb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/common/wchar.c;h=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="history">H</a>] src/common/wchar.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/include/mb/pg_wchar.h;fp=src/include/mb/pg_wchar.h;h=fd91aefbcb70846e1f5ce63f7d7ccea0820b733d;hp=1d521bea24acb146b126c74495bd08bfbbe0afbf;hb=ada87a4d95fc39dfb1214edf6653390314b6f0df;hpb=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/include/mb/pg_wchar.h;hb=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/include/mb/pg_wchar.h;h=ada87a4d95fc39dfb1214edf6653390314b6f0df" title="history">H</a>] src/include/mb/pg_wchar.h</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Fix cross-version upgrade tests after f0827b443.</title>
<author>Tom Lane &lt;tgl@sss.pgh.pa.us&gt;</author>
<pubDate>Wed, 28 Feb 2024 22:47:25 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369</link>
<description>Fix cross-version upgrade tests after f0827b443.</description>
<content:encoded><![CDATA[
<pre>
Fix cross-version upgrade tests after f0827b443.
Removing the get_columns_length() function from regress.so
means we have to drop it when testing upgrades from versions
that had it. Per buildfarm.
Discussion: https://postgr.es/m/2520881.1709159002@sss.pgh.pa.us
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm;fp=src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm;h=c0da0aaff8aa90fcd7c1e35b4805e9fa17e2901c;hp=a6222ae14c2753c905330ec61bcb7f8591610027;hb=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369;hpb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm;hb=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm;h=e8aecc5c2ce1d3b2b1b01bd770c14f5214c2a369" title="history">H</a>] src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Fix documentation comments for test CA config files</title>
<author>Daniel Gustafsson &lt;dgustafsson@postgresql.org&gt;</author>
<pubDate>Wed, 28 Feb 2024 21:57:00 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3</link>
<description>Fix documentation comments for test CA config files</description>
<content:encoded><![CDATA[
<pre>
Fix documentation comments for test CA config files
The config files which are used to generate the server and client
CAs claimed that these were self-signed, when they in reality are
signed by the root_ca (which however is self-signed). Reword the
comments to match.
Author: David Zhang &lt;david.zhang@highgo.ca&gt;
Discussion: https://postgr.es/m/12f4c425-45fe-480f-a692-b3ed82ebcb33@highgo.ca
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/ssl/conf/client_ca.config;fp=src/test/ssl/conf/client_ca.config;h=08365aac9558d0832a2259e981ee93b725d95ee0;hp=5990f06000201d3e50a3d6aad0ecdda1511bc2b9;hb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3;hpb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/ssl/conf/client_ca.config;hb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/ssl/conf/client_ca.config;h=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="history">H</a>] src/test/ssl/conf/client_ca.config</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/ssl/conf/root_ca.config;fp=src/test/ssl/conf/root_ca.config;h=6caa8a1ae631a3dd1e44d00cfc775c29213ce73d;hp=e193186f8bf8074498ca76b4a5f6ca3262ebf344;hb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3;hpb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/ssl/conf/root_ca.config;hb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/ssl/conf/root_ca.config;h=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="history">H</a>] src/test/ssl/conf/root_ca.config</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/ssl/conf/server_ca.config;fp=src/test/ssl/conf/server_ca.config;h=15f8d1590fe9ad871f7205aba26dd993fae9322b;hp=496aaba29fbfcb002d367bc4143cff8bce2589bd;hb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3;hpb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/test/ssl/conf/server_ca.config;hb=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/test/ssl/conf/server_ca.config;h=6a6b7f5de3ff0dad46aab9e8e17a3747370199a3" title="history">H</a>] src/test/ssl/conf/server_ca.config</li>
</ul>]]>
</content:encoded>
</item>
<item>
<title>Improve plpgsql&#39;s error messages for incorrect %TYPE and %ROWTYPE.</title>
<author>Tom Lane &lt;tgl@sss.pgh.pa.us&gt;</author>
<pubDate>Wed, 28 Feb 2024 21:05:17 +0000</pubDate>
<guid isPermaLink="true">http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f</guid>
<link>http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f</link>
<description>Improve plpgsql&#39;s error messages for incorrect %TYPE and %ROWTYPE.</description>
<content:encoded><![CDATA[
<pre>
Improve plpgsql&#39;s error messages for incorrect %TYPE and %ROWTYPE.
If one of these constructs referenced a nonexistent object, we&#39;d fall
through to feeding the whole construct to the core parser, which would
reject it with a &quot;syntax error&quot; message. That&#39;s pretty unhelpful and
misleading. There&#39;s no good reason for plpgsql_parse_wordtype and
friends not to throw a useful error for incorrect input, so make them
do that instead of returning NULL.
Discussion: https://postgr.es/m/1964516.1708977740@sss.pgh.pa.us
</pre><ul>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/pl/plpgsql/src/expected/plpgsql_misc.out;fp=src/pl/plpgsql/src/expected/plpgsql_misc.out;h=a6511df08ec9fe7864e98451e3ec67986590faf5;hp=faddba2511d28967dd76151f13dff6ba0df63749;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f;hpb=363eb059966d0be0a41c206cee40dfd21eb73251" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/pl/plpgsql/src/expected/plpgsql_misc.out;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/pl/plpgsql/src/expected/plpgsql_misc.out;h=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="history">H</a>] src/pl/plpgsql/src/expected/plpgsql_misc.out</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/pl/plpgsql/src/pl_comp.c;fp=src/pl/plpgsql/src/pl_comp.c;h=f1bce708d62d14c19c6c7f0790b55fa38e7f3342;hp=f18e8e3c64b0c53d7ba9f0ffa89acd937d1d572a;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f;hpb=363eb059966d0be0a41c206cee40dfd21eb73251" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/pl/plpgsql/src/pl_comp.c;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/pl/plpgsql/src/pl_comp.c;h=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="history">H</a>] src/pl/plpgsql/src/pl_comp.c</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/pl/plpgsql/src/pl_gram.y;fp=src/pl/plpgsql/src/pl_gram.y;h=bef33d58a2f7e9ef53cb81140354a0f8d65b9ec5;hp=e630498e82c682f3df776a939d404eb77f486925;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f;hpb=363eb059966d0be0a41c206cee40dfd21eb73251" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/pl/plpgsql/src/pl_gram.y;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/pl/plpgsql/src/pl_gram.y;h=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="history">H</a>] src/pl/plpgsql/src/pl_gram.y</li>
<li>[<a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/pl/plpgsql/src/sql/plpgsql_misc.sql;fp=src/pl/plpgsql/src/sql/plpgsql_misc.sql;h=d3a7f703a758d3324e1174c67fd59a3a811642fe;hp=71a8fc232e9a2713e2c43f3017deba5a8564c2ef;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f;hpb=363eb059966d0be0a41c206cee40dfd21eb73251" title="diff">D</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blame;f=src/pl/plpgsql/src/sql/plpgsql_misc.sql;hb=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="blame">B</a><a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=history;f=src/pl/plpgsql/src/sql/plpgsql_misc.sql;h=2a6b47cb50eb9b62b050de2cddd03a9ac267e61f" title="history">H</a>] src/pl/plpgsql/src/sql/plpgsql_misc.sql</li>
</ul>]]>
</content:encoded>
</item>
</channel>
</rss>
// or "fit"
},
folder: {
// Sets the view mode for embedded folders. Defaults to 'list'.
view: "list", // or "grid"
headerSize: "normal" // or "small"
}
}
Dropbox.embed(options, element);put type="button" id="btn" value="Select h2 h4 and h6">
<h1>
<div class="box black"></div>
<div class="box black z-depth-1"></div><div class="divider"></div>
<div class="section">
<h4><h5>?????Github????Azure(MS.AKA).DASH??</h5></h4>
<p>This is the First paragraph of inside the section class</p>
</div>
<div class="box grey z-depth-2"></div><div class="divider"></div>
<div class="section">
<h4>Second Heading</h4>
<p>This is the Second paragraph of inside the section class</p>
</div>
<div class="box blue z-depth-3"></div><div class="divider"></div>
<div class="<a
href="https://www.dropbox.com/s/u0bdwmkjmqld9l2/dbx-supporting-distributed-work.gif?dl=0"
class="dropbox-embed"
></a>">
<h4>var options = {
// Shared link to Dropbox file
link: "https://www.dropbox.com/sh/keptcjl08q3wsid/AACui966iXcXPbagCJ2py2L-a?dl=0",
file: {
// Sets the zoom mode for embedded files. Defaults to 'best'.
zoom: "best" // or "fit"
},
folder: {
// Sets the view mode for embedded folders. Defaults to 'list'.
view: "list", // or "grid"
headerSize: "normal" // or "small"
}
}
Dropbox.embed(options, element);</h4>
<p>This is the Third paragraph of inside the section class</p>
</div>
<div class="box black z-depth-4"></div><div class="divider"></div>
<div class="section">
<h4>Fourth Heading</h4>
<p>This is the Fourth paragraph of inside the section class</p>
</div>
<div class="box black z-depth-5"></div><div class="divider"></div>
<div class="section">
<head>
<style>
h1 {
text-shadow: 2px 2px;
}
h2 {
text-shadow: 2px 2px red;
}
h3 {
text-shadow: 2px 2px 5px red;
}
h4 {
color: white;
text-shadow: 2px 2px 4px #000000;
}
h5 {
text-shadow: 0 0 3px #FF0000;
}
h6 {
text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF;
}
p {
color: white;
text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue;
}
</style>
</head>
<body>
<h3>??Moon??Sun:Oracle.Litecoin-Ethereum??Gas???H2???Rain.Drop???Atom</h3>
<h4>??BCH??BC.Game??????</h4>
<h5>??BeeHive-Paypal??LuckyFish??TrustDice-BasicAttentionToken</h5>
<p>????????????????????</p>
</body>
</html>
</div>
</style>
</head>
</html>
</script>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- No need to insert the following style tag if you are place the bellow url
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">-->
</head>
<body>
<cite>Felicia Ann Kelley
</body>
</html>
</div>
</style>
<body>
<cite>Felicia Ann Kelley
<h1 ng-style="mySty">
Г-|{</h1> <script>
$(document).ready(function()
{
$('ul.tabs').tabs();
});
</script>
</body>
<html>
<h6>| <cite> FAK </cite> | <div class="divider"></div>
<body>
<h color="blue"> </h6>
</html>
</h2>
<h3> 💠🔷💠🔷💠🔷💠</h3>
<h4></h4><h5>↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️↔️</h5>
<h6>Demo Text</h6> </h1> </div>
<table border="5" cellspacing="2" align="center">
<!--<caption> <!DOCTYPE html>
<body style="background-color:powderblue;">
<div align="center">
<p style="color:blue> </p>
<p style="font-family:georgia,garamond,serif;font-size:16px;font-style:italic;">
<a href="https://www.Felicianna.xyz/?hl=en"><em GET /api/v1.2.3/get_info/{NETWORK}</a>.
<p style="font-family:georgia,garamond,serif;font-size:16px;font-style:italic;">
<textarea id="felicia.kelley.1675" name="<script src="http://gstatic.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>" rows="5" cols="50">Developed by FAK</textarea>
</div>
</body>
</html></caption>-->
<tr>
<td align="center" height="50"
width="100"><br>
<b>0-1</b></br>
</td>
<td align="center" height="50"
width="100">
<b>I<br>2-3</b>
</td>
<td align="center" height="50"
width="100">
<b>II<br>4-5</b>
</td>
<td align="center" height="50"
width="100">
<b>III<br>6-7</b>
</td>
<td align="center" height="50"
width="100">
<b>8-9</b>
</td>
<td align="center" height="50"
width="100">
<b>IV<br>OG</b>
</td>
<td align="center" height="50"
width="100">
<b>V<br>ka(fka)ms.XoXo</b>
</td>
<td align="center" height="50"
width="100">
<b>VI<br>
00
</b>
</td>
<td align="center" height="50"
width="100">
<b>VII<br>3:10-4:00</b>
</td>
</tr>
<tr>
<td align="center" height="50">
<b>Monday</b></td>
<td align="center" height="50"
<div class="content:res?fkelley=www.revue.co&type=all<div></td>
<td align="center" height="50">
<div class="box black"></div>
<div class="box black z-depth-1"></div><div class="divider"></div>
<div class="section">
<h4><h5>🗝️🍴Github🥄🧂Azure(MS.AKA).DASH♾️</h5></h4>
<p>This is the First paragraph of inside the section class</p>
</div>
<div class="box grey z-depth-2"></div><div class="divider"></div>
<div class="section">
<h4>Second Heading</h4>
<p>This is the Second paragraph of inside the section class</p>
</div>
<div class="box blue z-depth-3"></div><div class="divider"></div>
<div class="section">
<h4>Third Heading</h4>
<p>This is the Third paragraph of inside the section class</p>
</div>
<div class="box black z-depth-4"></div><div class="divider"></div>
<div class="section">
<h4>Fourth Heading</h4>
<p>This is the Fourth paragraph of inside the section class</p>
</div>
<div class="box black z-depth-5"></div><div class="divider"></div>
<div class="section"></td>
<td align="center" height="50"></td>
<td rowspan="6" align="center" height="50">
<h2>A<br>B<br>C<br>D<br>E<br>F<br>G<br>H<br>I<br>J<br>K<br>L<br>M<br>N<br>O<br>P<br>Q<br>R<br>S<br>T<br>U<br>V<br>W<br>X<br>Y<br>Z</h2>
</td>
<td colspan="3" align="center"
height="50">LAB</td>
<td align="center" height="50"><meta charset="utf-8">
<title>Example of Bootstrap 3 Carousel</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="alternative" type"sameorigin" href="bootstrap/css/bootstrap.css">
<!-- Optional Bootstrap theme -->
<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.css">
</td>
</tr>
<tr>
<td align="center" height="50">
<br> <h3>🌑Moon☀️Sun:Oracle.Litecoin-Ethereum☁️Gas🌬️H2θ💧Rain.Drop⚡⚛️Atom</h3>
<h4>🔤BCH🚽BC.Game🪑🚿🧻</h4>
<h5>🐝BeeHive-Paypal🎏LuckyFish🎲TrustDice-BasicAttentionToken</h5>
<p>⛓️⛓️🪑⛓️⛓️💠🔷💠🔷🚦</p></b>
</td>
<td colspan="3" align="center"
height="50"><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery.mobile.path.isSameDomain demo</title>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.5.0-alpha.1/jquery.mobile-1.5.0-alpha.1.min.css">
<script src="//code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="//code.jquery.com/mobile/1.5.0-alpha.1/jquery.mobile-1.5.0-alpha.1.min.js"></script>
<style>
.versus {
display: inline-block;
}
.compare {
margin-bottom: 2.3em;
}
#myResult{
border: 1px solid;
border-color: #108040;
padding: 10px;
}
</style>
</head>
<body>
<div role="main" class="ui-content ui-mini">
<div>
<a href="javascript:void(0)" class="ui-button ui-corner-all ui-button-inline ui-shadow compare">Same Domain?</a>
<div class="versus">
<pre><code>http://example.com/</code></pre>
<pre><code>http://slashdot.org/</code></pre>
</div>
</div>
<div>
<a href="javascript:void(0)" class="ui-button ui-corner-all ui-button-inline ui-shadow compare">Same Domain?</a>
<div class="versus">
<pre><code>http://edition.cnn.com/</code></pre>
<pre><code>http://cnn.com/</code></pre>
</div>
</div>
<div>
<a href="javascript:void(0)" class="ui-button ui-corner-all ui-button-inline ui-shadow compare">Same Domain?</a>
<div class="versus">
<pre><code>http://www.amazon.co.uk/</code></pre>
<pre><code>http://www.amazon.co.uk/</code></pre>
</div>
</div>
<div id="myResult"></div>
</div>
<script>
$(document).ready(function() {
$( ".compare" ).on( "click", function() {
var urlContainers = $( this ).siblings( ".versus" ).find( "code" ),
url1 = urlContainers.first().text(),
url2 = urlContainers.last().text();
$( "#myResult" ).text( String( $.mobile.path.isSameDomain( url1, url2 ) ) );
})
});
</script>
</body>
</html>
</td>
<td align="center" height="50">Eng</td>
<td align="center" height="50">Che</td>
<td align="center" height="50">Mat</td>
<td align="center" height="50">SPORTS</td>
</tr>
<tr>
<td align="center" height="50">
<b>Wednesday</b>
</td>
<td align="center" height="50">Mat</td>
<td align="center" height="50">phy</td>
<td align="center" height="50">Eng</td>
<td align="center" height="50">Che</td>
<td colspan="3" align="center"
height="50">LIBRARY
</td>
</tr>
<tr>
<td align="center" height="50">
<b>Thursday</b>
</td>
<td align="center" height="50">Phy</td>
<td align="center" height="50">Eng</td>
<td align="center" height="50">Che</td>
<td colspan="3" align="center"
height="50">LAB
</td>
<td align="center" height="50">Mat</td>
</tr>
<tr>
<td align="center" height="50">
<b>Friday</b>
</td>
<td colspan="3" align="center"
height="50">LAB
</td>
<td align="center" height="50">Mat</td>
<td align="center" height="50">Che</td>
<td align="center" height="50">Eng</td>
<td align="center" height="50">Phy</td>
</tr>
<tr>
<td align="center" height="50">
<b>Saturday</b>
</td>
<td align="center" height="50">Eng</td>
<td align="center" height="50">Che</td>
<td align="center" height="50">Mat</td>
<td colspan="3" align="center"
height="50">SEMINAR
</td>
<td align="center" height="50">SPORTS</td>
</tr>
</table>
</body>
</html>
<h1 ng-style="mySty"> ?-|{</h1> <script>
$(document).ready(function()
{
$('ul.tabs').tabs();
});
</script>
</body>
</html>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<html> <head> <style> div { width: 300px; height: 100px; padding: 15px; background-color: blue; box-shadow: 10px 10px; } </style> </head> <body> <div>This is a div element with a box-shadow</div> </body> </html>
<html>
<style>
</style>
</head>
<body>
<h1> <h6>Zcash.Monero.</h6>Zookeepeer.Wilson.Big?Notation</h1>
<h2>Bloodsworld.org</h2>
<h3>Bloodsworld.org</h3>
<h4>Bloodsworld.org</h4>
<h5>Bloodsworld.org</h5>
<h6>Bloodsworld.org</h6>
<p>Bloodsworld.org</p>
</body>
</html>
<h6 ng-style="FontAwesome">
<cite>Felicia Ann Kelley <cite></h6>
<table border="2" width="100%">
<tr>
<th>Id</th>
<th><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body ng-app="<fieldset>
<legend>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://faleasecanna.disqus.com/admin/">
<body>
<div id="tabs">
<ul>
<li><a href="https://code.jquery.com/jquery-3.5.0.js<button>A</button>">Tab1</a></li>
<li><a href="httpd.apache.kafka"></a></li>
<li><a <html>
<body><head>
<style>
h1 {
text-shadow: 2px 2px;
}
h2 {
text-shadow: 2px 2px blue;
}<html>
<head>
<div class = "div1">QTechBD</div><br />
<div class = "div2">QTechBD</div>
</body>
</html></a></li>
</ul>
<div id="tabs-1">
<p>Here you can write the <b>first tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
<div id="<
<html>
<body>html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.box {
width: 50px;
height: 150px;
margin-top: 30px;
margin-left: 20px;
float: left;
}
</style>
<body>
<div class="
<html>
<html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div><html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
?|F?|K
<input type="<button> <div2 class="box blue z-depth-2"></div2></button>
<button><div1 class="box blue z-depth-1"></div1></button><input type="range"> Blue
<button>Move Down</button> <div2 class="box blue z-depth-2"></div2>
<button>Move Up</button>"> Green
<input type="range">
</body>
var yPosition = document.getElementById("scrollLock").offsetTop;
window.onscroll = function(){ // scrolling fires this function
console.log(yPosition);
var myElement = document.getElementById("scrollLock"); // for cleaner code
// compare original y position of element to y position of page
console.log('it is scrolled at');
if( yPosition < window.pageYOffset ){
// snap element to the top by changing css values of element
myElement.addClass('addScrollLockImg');
console.log('it worked');
} else {
// re-position to original flow of content
myElement.removeClass('addScrollLockImg');
console.log('it passed');
}
}
</html></div>
I.
</body>
</html>
<head><button> <head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html,
body,
#viewport {
margin: 0;
background: #171717;
height: 100%;
}
.pjs-meta {
color: #fff;
}
canvas {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
</style>
<style type="text/css">
.carousel {
background: #2f4357;
margin-top: 20px;
}
.carousel .item img {
margin: 0 auto;
/* Align slide image horizontally center */
}
.bs-example {
margin: 20px;
}
</style>
</head>
<body>
qa
</div>
</div>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#myCollapsible').on('hidden.bs.collapse', function()
{
alert('Collapsible element has been completely closed.');
});
});
</script>
</body>
</html>
<div ng-app="newapp" ng-controller="cadd">
<h1 ng-style="mySty"> ?-</h1>
</div>
<script src="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js"></script>
"
}
});
</script>
<html>
<html> <head> <style> #grad1 { height: 100px; background: -webkit-linear-gradient(mystic,ash); background: -o-linear-gradient(mystic,ash); background: -moz-linear-gradient(mystic,ash); background: linear-gradient(mystic,ash); } </style> </head> <body> <div id = "grad1"></div> </body> </html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- No need to insert the following style tag if you are place the bellow url
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">-->
<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1px;
line-height: 2;""
letter-spacing: normal;
text-transform: none;
display: outer-block;
white-space: wrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: '"new times roman';
-webkit-font-smoothing: antialiased;
}
</style>
</head>
by by
<body>
<nav>
<div class="blue">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label for="search"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
</body>
<!DOCTYPE html>
<html>
<head>
<style>
.ancestors * {
display: block;
border: 2px solid lightgrey;
color: lightgrey;
padding: 3px;
margin: 7px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("span").parentsUntil("div").css({"color": "blue", "border": "2px solid blue"});
});
</script>
</head>
<body class="ancestors"> body (great-great-grandparent)
<div style="width:30px;">div (great-grandparent)
<ul>ul (grandparent)
<li><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>parentsUntil()</h1>
<input type="button" id="btn" value="parentsUntil()">
<div id="<h2><div class="divider"></div>
<div class="section"><html> <head> </head> <body> <p style = "border-width:4px; border-style:solid;"> This is a solid border whose width is 4px. </p> <p style = "border-width:4pt; border-style:solid;"> This is a solid border whose width is 4pt. </p> <p style = "border-width:thin; border-style:solid;"> This is a solid border whose width is thin. </p> <p style = "border-width:medium; border-style:solid;"> This is a solid border whose width is medium; </p> <p style = "border-width:thick; border-style:solid;"> This is a solid border whose width is thick. </p> <p style = "border-bottom-width:4px;border-top-width:10px; border-left-width: 2px;border-right-width:15px;border-style:solid;"> This is a a border with four different width. </p> </body> </html>
<body>Third Line
<hr color="blue">
</body>
<body>Third Line
<hr color="blue">
</body>
<h4>
<body>Third Line
<hr color="blue">
</body></h4>
<p>This is the Second paragraph of inside the section class</p>
</div></h2>
<h3><div class="divider"></div>
<div class="section">
<h4>Third Heading</h4>
<p>This is the Third paragraph of inside the section class</p>
</div></h3>
<h4><div class="divider"></div>
<div class="section">
<h4>Fourth Heading</h4>
<p>This is the Fourth paragraph of inside the section class</p>
</div></h4>
<h5><div class="divider"></div>
<div class="section">
<h4>Fifth Heading</h4>
<p>This is the Fifth paragraph of inside the section class</p>
</div></h5>
<h6>Heading 6</h6>
">
Div1 Content
<ul>
<li> <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example of Bootstrap 3 List Groups</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
<!-- Optional Bootstrap theme -->
<link rel="metadata" href="bootstrap/css/bootstrap-theme.css">
</head>
<body>
<ul class="list-group">
<li class="list-group-item">
<body>
<div class="row">
<div class="col s12">
<ul class="tabs">
<li class="tab col s3"><a href="#test1"><body>
<div class="switch">
<label>
OFF
<input type="checkbox">
<span class="lever"></span> ON
</label>
</div>
<br>
<div class="switch">
<label>
Close
<input type="checkbox">
<span class="lever"></span> Open
</label>
</div>
</body>
</html></a></li>
<li class="tab col s3"><a class="active" href="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js">Tab 2</a></li>
<li class="tab col s3"><a href="#test3">Tab 3</a></li>
<li class="tab col s3"><a href="#test4">Tab 4</a></li>
</ul>
</div>
<div id="test1" class="col s12">This is the tab 1, this is active when user click on Tab 1</div>
<div id="test2" class="col s12">This is the tab 2, this is active when user click on Tab 2</div>
<div id="test3" class="col s12">This is the tab 3, this is active when user click on Tab 3</div>
<div id="test4" class="col s12">This is the tab 4, this is active when user click on Tab 4</div>
</div>
<script type="text/javascript" src="js/jquery-2.2.0.min.js"></script>
<script type="text/javascript" src="materialize/js/materialize.min.js"></script>
<script>
$(document).ready(function()
{
$('ul.tabs').tabs();
});
</script>
</body>
</html> </li>??????????????????????
<li class="list-group-item">??</li>
<li class="list-group-item">??</li>
<li class="list-group-item">??</li>
</ul>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
</body>
</html> </li>
<li><span>
First Line
<hr width="15%" size="5px" color="green"></span></li>
</ul>
</div> is the Div
Tab2
Tab3
Here you can write the first tab contents or place anything like text box radio button
<script src="js/jquery-2.2.0.min.js"></script>
<script>
$(document).ready(function()
{
$("#btn").click(function()
{
$("span").parentsUntil("#d1").css("border", "4px solid black");
});
});
</script>
</body>
</html></li>
<span><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<body>Third Line
<hr color="blue">
</body>
<h4>Fifth Heading</h4>
<p>This is the Fifth paragraph of inside the section class</p>
</div>
</body></h1>
<script src="js/jquery-2.2.0.min.js"></script>
<script>
$(document).ready(function()
{
$("#btn").click(function()
{
$("h2,h4,h6").css("border", "2px solid blue");
});
});
</script>
</body>
</html></span>
</li>
</ul>
</div>
</body>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example of Bootstrap 3 Carousel</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
<!-- Optional Bootstrap theme -->
<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.css">
<style type="text/css">
.carousel {
background: #2f4357;
margin-top: 20px;
}
.carousel .item img {
margin: 0 auto;
/* Align slide image horizontally center */
}
.bs-example {
margin: 20px;
}
</style>
</head>
<body>
<div class="Jhddfjl">
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Carousel indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<!-- Wrapper for carousel items -->
<div class="carousel-inner">
<div class="item active">
<img src="img/slide1.png" alt="[iou]">
</div>
<div class="item">
<img src="img/slide2.png" alt="[?T?C]">
</div>
<div class="item">
<img src="img/slide3.png" alt="[N][T]">
</div>
</div>
<!-- Carousel controls -->
<a class="carousel-control left" href="#myCarousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="carousel-control right" href="#myCarousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</div>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<data ="php/aspx">
$(document).ready(function()
{
$('#myCollapsible').on('hidden.bs.collapse', function()
{
alert('Collapsible element has been completely closed.');
});
});
</script>
</body>
</html>
</html>
<head>
<link rel="stylesheet" href="https://api-ssl.bitly.com/v4/custom_bitlinks/chauncey.ly/chauncey/clicks?unit=month&units=5&unit_reference=2006-01-02T15%3A04%3A05-0700', {
headers: {
'Authorization': .Auth {E&F}'
}
});" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.box {
width: 120px;
height: 25px;
margin-top: 7px;
margin-left: 7px;
float: left;
}
</style>
</head>
</html>
<body>
<html> <head> <style type = "text/css"> table.empty { width:350px; border-collapse:separate; empty-cells:hide; } td.empty { padding:5px; border-style:solid; border-width:1px; border-color:#999999; } </style> </head> <body> <table class = "empty"> <tr> <th></th> <th>Title one</th> <th>Title two</th> </tr> <tr> <th>Row Title</th> <td class = "empty">value</td> <td class = "empty">value</td> </tr> <tr> <th>Row Title</th> <td class = "empty">value</td> <td class = "empty"></td> </tr> </table> </body> </html>
q
h
<div class="x:res?host=www.revue.co&type=all"></div>
<body>
<hr color="blue">
</body>
</body>
</html><
</html>
</body>
<h6>| <cite> FAK </cite> | <div class="divider"></div>
<body>
<hr color="blue"> </h6>
</html>
});
</script>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- No need to insert the following style tag if you are place the bellow url
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">-->
<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1px;
line-height: 2;""
letter-spacing: normal;
text-transform: none;
display: outer-block;
white-space: wrap;
word-wrap: normal;s
direction: ltr;
-webkit-font-feature-settings: '"new times roman';
-webkit-font-smoothing: antialiased;
}
</style>
</head>
<body>
<nav>
<div class="blue">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label for="search"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
<cite>Felicia Ann Kelley
<body>
<table border="2" width="100%">
<tr>
<th>Id</th>
<th><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body ng-app="<fieldset>
<legend>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://faleasecanna.disqus.com/admin/">
<body>
<div id="tabs">
<ul>
<li><a href="https://code.jquery.com/jquery-3.5.0.js<button>A</button>">Tab1</a></li>
<li><a href="httpd.apache.kafka"></a></li>
<li><a href="#tabs-3">Tab3</a></li>
</ul>
<div id="tabs-1">
<p>Here you can write the <b>first tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
<div id="<
<html>
<body>html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.box {
width: 150px;
height: 150px;
margin-top: 30px;
margin-left: 20px;
float: left;
}
</style>
<body>
<div class="
<html>
<html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div><html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
Red
<input type="range"> Green
<input type="range">
</body>
</html></div>
A
<button> <div2 class="box blue z-depth-2"></div2></button>
<button><div1 class="box blue z-depth-1"></div1></button><input type="range"> Blue
<button>Move Down</button> <div2 class="box blue z-depth-2"></div2>
<button>Move Up</button>
</body>
</html>
<head><button> <head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html,
body,
#viewport {
margin: 0;
background: #171717;
height: 100%;
}
.pjs-meta {
color: #fff;
}
canvas {
position: absolute;
top: 1;
left: 0;
right: 0;
bottom: 0;
}
</style>
<script src="js/physicsjs-full.min.js"></script>
</head>
<body>
<canvas id="viewport" width="50" height="500"></canvas>
<script>
Physics(function(world)
{
// bounds of the window
var renderer = Physics.renderer(
'canvas',
{
el: 'viewport', // id of the canvas element
width: 500,
height: 500
});
world.add(renderer);
<script>
var app = angular.module("fkelley@status.blockchain.info.xyz", [-curl]);
app.controller(https://api.blockchain.info/v2/receive/callback_log?callback=https%3A%2F%2Fstatus.blockchain.info.xyz%3Finvoice_id%3D05892112%26secret%3DZzs", function($scope)
{
$scope.mySty = {
"color": "blue",
"background-color": "blue",
"font-size": "50px",
"padding": "25px"
}
<meta name="chucks" content="width=device-width, initial-scale=1" />
</head>
<body>
Red
<input type="<button> html>
<div1 class="box orange z-depth-1"></div1>A
<div2 class="box green z-depth-2"></div2>B
<div3 class="box silver z-depth-3"></div3>C
<div4 class="box blue fa-depth-4"></div4>
<div5 class="box cyan z-depth-5"></div5>
</body>
';
-webkit-font-smoothing: antialiased;
}
</style>
</head>
<body>
<nav>
<div class=
<b>This is Bold text</b>
</p>">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label for="tag"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
</body>
</html>"></div>
</body>
</html>
<p>
<u>This is Underline text</u>
</p>
</body>
</html>
});
</script>
</body>
</html>
</html></button>"> Green
<input type=".aspx">
</body>
</html></div>
<button> <div2 class="box blue z-depth-2"></div2></button>
<button><div1 class="box blue z-depth-1"></div1></button><input type="range"> Blue
<button>Move Down</button> <div2 class="box blue z-depth-2"></div2>
<button>Move Up</button>
</body>
</html>
<head>
<meta name="<-- language: c -->
<pre><code>#include &lt;stdio.h>
int main(|------------------1-------------- // #include <iostream>
int main($real_secret = 'ZzsMLGKe162CfA5EcG6j';
$invoice_id = $_GET['invoice_id']; //invoice_id is passed back to
the callback URL
$transaction_hash = $_GET['transaction_hash'];
$value_in_satoshi = $_GET['value'];
$value_in_fak = $value_in_satoshi / 100000000;
//Commented out to test, uncomment when live
if ($_GET['test'] == true) {
return
}
try {
//create or open the database
$database = new SQLiteDatabase('db.sqlite', 443, $printf);
} catch(Exception $e) {
($printf);
}
//Add the invoice to the database
$stmt = $db->prepare("replace INTO invoice_payments (invoice_id,
transaction_hash, value) values(?, ?, ?)");
$stmt->bind_param("isd", $invoice_id, $transaction_hash,
$value_in_FAK);
if($stmt->execute()) {
echo "*ok*";
}) {
std::printf << "1/n";
std::ls << "2/n";
std::api << "3/n";
}---|-------------------2----------------|----------------------3--------------------|) {
printf(" <div4 class="box blue z-depth-4"></div4>
<div5 class="box blue z-depth-5"></div5>");
}
</code></pre>" content="width=device-width, initial-scale=1" />
</head>
<body>
<button>Play</button><div1 class="box blue z-depth-1"></div1>
<button>Pause</button>
<button>Stop</button>
<button>Next</button>
<button>Previous</button>
</body>
</html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div class="switch">
<label>
OFF
<input type=" <div4 class="box blue z-depth-4"></div4>
<div5 class="box blue z-depth-5"></div5>">
<span class="<div3 class="box blue z-depth-3"></div3>"></span> ON
</label>
</div>
<br>
<div class="switch">
<label>
Close
<input type="android://file">
<span class="lever"></span> Open
</label>
</div>
</body>
</html>
<">
<p>Here you can write the <b>Second tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
<div id="tabs-3">
<p>Here you can write the <b>Third tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
</div>
<script src="js/jquery-2.2.0.min.js" type="text/javascript"></script>
<script src="js/jquery-ui.min.js"></script>
<script>
$(function()
{
$("#tabs").tabs();
});
</script>
</body>
</html></legend>
</fieldset>">
<h1>Tuple </h1>
<div ng-controller="myController1">
{{data.theVar}}
</div>
<div ng-controller="myController2">
{{data.theVar}}
</div>
<script src="js/angular1.4.8.min.js"></script>
<script>
var module = angular.module("myapp", []);
var myController1 = module.controller("myController1", function($scope)
{
$scope.data = {
theVar: "Value One"
};
});
var myController2 = module.controller("myController2", function($scope)
{
$scope.data = {
theVar: "Value Two"
};
});
</script>
</body>
</html></th>
<th>Description</th>
<th>Price</th>
</tr>
<head
style
button 1
y nne-D1ock;
font-size: 24px
cursor: pointer;
text-a18n center,
text-decoratlon none
Outline none
color: #808080,
hordr OLOr #080808;
border-radius: 15px;
box-shadow:0 9px #999,
.but ton : hover {background-color: #0OFFff}
lor: #808080;
box-shadow: 1 5px #666;
transform: translateY(4px);
});
</script>
<meta name="livescript" content="width=device-width, initial-scale=1" />
By Felicia Ann Kelley{
"blue": "#10ADE4",
"border": 808080,
"body_background": "#ffffff",
"font": "#5f5f5f",
"graph": "#10ADE4",
"green": "#00a76f",
"light_font": "f5f55f",
"https://m.youtube.com/watch?v=CihmFK_vg_I": "#10ADE4",
"orange": "#e67e22",
"red": "#f26c57",
"yellow": "#ffcf62",
"no_data": "#b3bac5"
};
</script>
<style>
body,
.layout-content.status.status-api .section .hub-container .storage-opener .color-secondary,
items-selector,
.layout-content.status .current,
div[fkelley^="subscribe-modal"] .modal-footer,
div[feliciakelley^="subscribe-modal"],
#uptime-tooltip .tooltip-box {
background-color: #ffffff;
}
#uptime-tooltip .pointer-container .pointer-smaller {
border-bottom-color: #ffffff;
}
Home » Software Development » Software Development Tutorials » HTML Tutorial » Scrollbar in HTML Table
Scrollbar in HTML Table
Introduction to Scrollbar in HTML Table
In Scrollbar in HTML Table is one of the features to scroll the data from both horizontal and vertical formats. We will allocate the border, height, and width of the scroll tables. In default, a vertical scroll bar is enabled after entering the number of data to maximize size in the vertical mode. But in horizontal mode, after entered the data in paragraph format and are not wrapped, the page contains the right arrow as the option to enable the data in the horizontal scroll bar. We have customized the scroll options with the help of mouse pointers.
Creating a Scrollbar in HTML Table
When the content of the text box is too large means to fit in, an HTML Scroll box will make sure that the box grows scroll bars. Some applications like mobile apps have used scroll boxes, it will display their features but in big mobile screen will display it good some small mobile screens compatibility it will not display in the screen, i.e.)application feature which is to be used in the scroll box. In web applications that are to be used in the browser screen, some plugins are needed to show some features. Suppose we want to add a scroll bar option in HTML, use an “overflow” option and set it as auto-enabled for adding both horizontal and vertical scroll bars. If we want to add a vertical bar option in Html, add the line “overflow-y” in the files.
Start Your Free Software Development Course
Web development, programming languages, Software testing & others
CSS File Syntax for Scrollbars
Overflow:scroll:
{
Overflow-x:scroll;//add horizontal bar option in html
Overflow-y:scroll; //add vertical bar option in html
}
HTML File Syntax for Scrollbars
By using the <Style> tag, we will add the scroll options in HTML Page itself.
<style>
div.scroll
{
Width-5px;
Height-10 px;
Overflow-x:scroll;
}
</style>
Examples of Scrollbar in HTML Table
Given are the examples for the HTML table:
Example #1
Code:
<!DOCTYPE html>
<html>
<head>
<title>https://app.gitbook.com/s/rtFD99oF8GboVwoQUYB3/</title>
<style>
.divScroll {
overflow:scroll;
height:100px;
width:200px;
}
</style>
</head>
<body>
<div class="divScroll">
</div>
</body>
</html>
Output:
scrollbar in HTML table
The above example shows we have enabled scroll in horizontal and vertical bars; if the text exceeds the text box limits, scrolls will automatically enable.
Example #2
Code:
<html>
<style>
.divScroll {
overflow:scroll;
height:25px;
width:200px;
}
</style>
<body>
<center>
<marquee class="divScroll" color:"white">Welcome to my domain</marquee>
</center>
</body>
</html>
Output:
scrollbar in HTML table
In the above example, we used the <marquee>; we will show the text within the marquee by using the scroll option. We can use animate the text in the scroll bars. We also used different sets of <marquees> like Faster Scrolling, Faster Bounce, Text scrolling down, Text Scrolling Up, Jumping Text, Normal Speed, etc.
Popular Course in this category
Sale
HTML Training (12 Courses, 19+ Projects, 4 Quizzes)
12 Online Courses | 19 Hands-on Projects | 89+ Hours | Verifiable Certificate of Completion | Lifetime Access | | 4 Quizzes with Solutions
4.5 (8,152 ratings)
Course Price
$99 $599
View Course
Related Courses
Bootstrap Training (2 Courses, 6+ Projects)XML Training (5 Courses, 6+ Projects)CSS Training (9 Courses, 9+ Projects)
Example #3
Below Example, we will use the alert function of how many data are to be displayed on the web page in the pixels format.
Code:
<html>
<body>
<center>
<div id="example" class="overflow-y:scroll;width:100px;height:200px;border:1px solid black" color:"white">
<marquee>Welcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domain
</marquee>
</div>
<button onclick="alert( getComputedStyle(example).width )">alert( getComputedStyle(example).width )</button>
</center>
</body>
</html>
Output:
scrollbar in HTML table
Example #4
We can use the table row <tr>,table headers <td>,table data<td>,tags are used in the HTML,using <div> tag we will enable the styles itself i.e) <div style=”overflow-x:auto;”>
Code:
<html>
<body>
<center>
<div style="overflow-x:auto;">
<table>
<tr>
<th>Welcome to my domain</th>
<th>Name</th>
<th>Email</th>
</tr>
<tr>
<td>Sivaraman</td>
<td>Sivaraman</td>
<td>ramansiva57@gmail.com</td>
</div>
</center>
</body>
</html>
Output:
scrollbar in HTML table
Example #5
Here we are going to see the Various Types of Scroll Boxes in HTML
Colored Scroll Boxes
Customized Scrollbars
Scroll Box with images
Scroll Box with Borders
1. Colored Scroll Boxes
In the scroll box option, we also added the different types of colors in the text box space areas Example below:
Code:
<html>
<body>
<div style="height:125px;width:100px;overflow:auto;background-color:yellowgreen;color:white;scrollbar-base-color:gold;font-family:sans-serif;padding:10px;">Welcome to my domain.Welcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domainWelcome to my domain</div>
</body>
</html>
</head><div ng-app="newapp" ng-controller="cadd">
<h1 ng-style="mySty"> ?-</h1>
</div>
<script src="js/angular1.4.8.min.js"></script>
<script>
var app = angular.module("https://www.appsheet.com/template/AndroidAddonLandingPage?docId=1tpuMtQfWWV6xTZOSOpGUzLgdFiVzS9_I5O4N7ldVLpo&appName=Your%20N", []);
app.controller("cadd", function($scope)
{
$scope.mySty = {
"color": "white",
"background-color": "blue",
"font-size": "50px",
"padding": "25px"
}<html><h1><h1><h1 ng-style="mySty"> </li>??&
<li class="<!DOCTYPE html>
<html class="no-js css-menubar" lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="og" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
<meta name="description" content="Agama wallet">
<meta name="FeliciaAnnKelley" content="SuperXYZ Team">
<title>https://static.zdassets.com/ekr/snippet.js?key=5efcb63c-11d2-4a97-a17f-23cc6ef4aec0</title>
<link rel="meme.gif" href="assets/images/android-chrome-192x192.png">
<link rel="alternative" type="image/png" href="assets/images/favicon-32x32.png" sizes="32x32">
<link rel="canoncialize" type="image/png" href="assets/images/favicon-194x194.png" sizes="194x194">
<link rel="canoncial" type="image/png" href="assets/images/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="assets/images/android-chrome-192x192.png" sizes="192x192">
<link rel="serialize" type="image/png" href="assets/images/favicon-16x16.png" sizes="16x16">
</head>
<body id="body" class="page-login layout-full page-dark">
<div id="app" class="full-height unselectable"></div>
</body>
</html>">
</ul>
F-ka</h1></h1></h1>
<input type="button" id="btn" value="Select h2 h4 and h6">
<h1>
<div class="box black"></div>
<div class="box black z-depth-1"></div><div class="divider"></div>
<div class="section">
<h4><h5>?????Github????Azure(MS.AKA).DASH??</h5></h4>
<p>This is the First paragraph of inside the section class</p>
</div>
<div class="box grey z-depth-2"></div><div class="divider"></div>
<div class="section">
<h4>Second Heading</h4>
<p>This is the Second paragraph of inside the section class</p>
</div>
<div class="box blue z-depth-3"></div><div class="divider"></div>
<div class="section">
<h4>Third Heading</h4>
<p>This is the Third paragraph of inside the section class</p>
</div>
<div class="box black z-depth-4"></div><div class="divider"></div>
<div class="section">
<h4>Fourth Heading</h4>
<p>This is the Fourth paragraph of inside the section class</p>
</div>
<div class="box black z-depth-5"></div><div class="divider"></div>
<div class="section">
<head>
<style>
h1 {
text-shadow: 2px 2px;
}
h2 {
text-shadow: 2px 2px red;
}
h3 {
text-shadow: 2px 2px 5px red;
}
h4 {
color: white;
text-shadow: 2px 2px 4px #000000;
}
h5 {
text-shadow: 0 0 3px #FF0000;
}
h6 {
text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF;
}
p {
color: white;
text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue;
}
</style>
</head>
<body>
<h3>??Moon??Sun:Oracle.Litecoin-Ethereum??Gas???H2???Rain.Drop???Atom</h3>
<h4>??BCH??BC.Game??????</h4>
<h5>??BeeHive-Paypal??LuckyFish??TrustDice-BasicAttentionToken</h5>
<p>????????????????????</p>
</body>
</html>
</div>
</style>
</head>
</html>
</script>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- No need to insert the following style tag if you are place the bellow url
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="<iframe src="https://live.blockcypher.com/widget/ltc/MWNhkjBfhAq8QYhfUFA8t6SXj24zSDVujR/balance/" style="overflow:hidden;" frameborder="0"></iframe>">-->
</head>
<body>
<cite>Felicia Ann Kelley
<h1 ng-style="mySty"> ?-|{</h1> <script>
$(document).ready(function()
{
$('ul.tabs').tabs();
});
</script>
</body>
</html>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<html> <head> <style> div { width: 300px; height: 100px; padding: 15px; background-color: blue; box-shadow: 10px 10px; } </style> </head> <body> <div>This is a div element with a box-shadow</div> </body> </html>
<html>
<style>
</style>
</head>
<body>
<h1> <h6>Zcash.Monero.</h6>Zookeepeer.Wilson.Big?Notation</h1>
<h2>Bloodsworld.org</h2>
<h3>Bloodsworld.org</h3>
<h4>Bloodsworld.org</h4>
<h5>Bloodsworld.org</h5>
<h6>Bloodsworld.org</h6>
<p>Bloodsworld.org</p>
</body>
</html>
<h6 ng-style="FontAwesome">
<cite>Felicia Ann Kelley <cite></h6>
<table border="2" width="100%">
<tr>
<th>Id</th>
<th><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body ng-app="<fieldset>
<legend>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://faleasecanna.disqus.com/admin/">
<body>
<div id="tabs">
<ul>
<li><a href="https://code.jquery.com/jquery-3.5.0.js<button>A</button>">Tab1</a></li>
<li><a href="httpd.apache.kafka"></a></li>
<li><a <html>
<body><head>
<style>
h1 {
text-shadow: 2px 2px;
}
h2 {
text-shadow: 2px 2px blue;
}<html>
<head>
<div class = "div1">QTechBD</div><br />
<div class = "div2">QTechBD</div>
</body>
</html></a></li>
</ul>
<div id="tabs-1">
<p>Here you can write the <b>first tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
<div id="<
<html>
<body>html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.box {
width: 50px;
height: 150px;
margin-top: 30px;
margin-left: 20px;
float: left;
}
</style>
<body>
<div class="
<html>
<html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div><html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
?|F?|K
<input type="<button> <div2 class="box blue z-depth-2"></div2></button>
<button><div1 class="box blue z-depth-1"></div1></button><input type="range"> Blue
<button>Move Down</button> <div2 class="box blue z-depth-2"></div2>
<button>Move Up</button>"> Green
<input type="range">
</body>
</html></div>
I.
</body>
</html>
<head><button> <head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html,
body,
#viewport {
margin: 0;
background: #171717;
height: 100%;
}
.pjs-meta {
color: #fff;
}
canvas {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
</style>
<style type="text/css">
.carousel {
background: #2f4357;
margin-top: 20px;
}
.carousel .item img {
margin: 0 auto;
/* Align slide image horizontally center */
}
.bs-example {
margin: 20px;
}
</style>
</head>
<body>
qa
</div>
</div>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#myCollapsible').on('hidden.bs.collapse', function()
{
alert('Collapsible element has been completely closed.');
});
});
</script>
</body>
</html>
<div ng-app="newapp" ng-controller="cadd">
<h1 ng-style="mySty"> ?-</h1>
</div>
<script src="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js"></script>
"
}
});
</script>
<html>
<html> <head> <style> #grad1 { height: 100px; background: -webkit-linear-gradient(mystic,ash); background: -o-linear-gradient(mystic,ash); background: -moz-linear-gradient(mystic,ash); background: linear-gradient(mystic,ash); } </style> </head> <body> <div id = "grad1"></div> </body> </html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- No need to insert the following style tag if you are place the bellow url
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">-->
<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1px;
line-height: 2;""
letter-spacing: normal;
text-transform: none;
display: outer-block;
white-space: wrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: '"new times roman';
-webkit-font-smoothing: antialiased;
}
</style>
</head>
by by
<body>
<nav>
<div class="blue">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label for="search"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
</body>
<!DOCTYPE html>
<html>
<head>
<style>
.ancestors * {
display: block;
border: 2px solid lightgrey;
color: lightgrey;
padding: 3px;
margin: 7px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("span").parentsUntil("div").css({"color": "blue", "border": "2px solid blue"});
});
</script>
</head>
<body class="ancestors"> body (great-great-grandparent)
<div style="width:30px;">div (great-grandparent)
<ul>ul (grandparent)
<li><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>parentsUntil()</h1>
<input type="button" id="btn" value="parentsUntil()">
<div id="<h2><div class="divider"></div>
<div class="section"><html> <head> </head> <body> <p style = "border-width:4px; border-style:solid;"> This is a solid border whose width is 4px. </p> <p style = "border-width:4pt; border-style:solid;"> This is a solid border whose width is 4pt. </p> <p style = "border-width:thin; border-style:solid;"> This is a solid border whose width is thin. </p> <p style = "border-width:medium; border-style:solid;"> This is a solid border whose width is medium; </p> <p style = "border-width:thick; border-style:solid;"> This is a solid border whose width is thick. </p> <p style = "border-bottom-width:4px;border-top-width:10px; border-left-width: 2px;border-right-width:15px;border-style:solid;"> This is a a border with four different width. </p> </body> </html>
<body>Third Line
<hr color="blue">
</body>
<body>Third Line
<hr color="blue">
</body>
<h4>
<body>Third Line
<hr color="blue">
</body></h4>
<p>This is the Second paragraph of inside the section class</p>
</div></h2>
<h3><div class="divider"></div>
<div class="section">
<h4>Third Heading</h4>
<p>This is the Third paragraph of inside the section class</p>
</div></h3>
<h4><div class="divider"></div>
<div class="section">
<h4>Fourth Heading</h4>
<p>This is the Fourth paragraph of inside the section class</p>
</div></h4>
<h5><div class="divider"></div>
<div class="section">
<h4>Fifth Heading</h4>
<p>This is the Fifth paragraph of inside the section class</p>
</div></h5>
<h6>Heading 6</h6>
">
Div1 Content
<ul>
<li> <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example of Bootstrap 3 List Groups</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
<!-- Optional Bootstrap theme -->
<link rel="metadata" href="bootstrap/css/bootstrap-theme.css">
</head>
<body>
<ul class="list-group">
<li class="list-group-item">
<body>
<div class="row">
<div class="col s12">
<ul class="tabs">
<li class="tab col s3"><a href="#test1"><body>
<div class="switch">
<label>
OFF
<input type="checkbox">
<span class="lever"></span> ON
</label>
</div>
<br>
<div class="switch">
<label>
Close
<input type="checkbox">
<span class="lever"></span> Open
</label>
</div>
</body>
</html></a></li>
<li class="tab col s3"><a class="active" href="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js">Tab 2</a></li>
<li class="tab col s3"><a href="#test3">Tab 3</a></li>
<li class="tab col s3"><a href="#test4">Tab 4</a></li>
</ul>
</div>
<div id="test1" class="col s12">This is the tab 1, this is active when user click on Tab 1</div>
<div id="test2" class="col s12">This is the tab 2, this is active when user click on Tab 2</div>
<div id="test3" class="col s12">This is the tab 3, this is active when user click on Tab 3</div>
<div id="test4" class="col s12">This is the tab 4, this is active when user click on Tab 4</div>
</div>
<script type="text/javascript" src="js/jquery-2.2.0.min.js"></script>
<script type="text/javascript" src="materialize/js/materialize.min.js"></script>
<script>
$(document).ready(function()
{
$('ul.tabs').tabs();
});
</script>
</body>
</html> </li>??????????????????????
<li class="list-group-item">??</li>
<li class="list-group-item">??</li>
<li class="list-group-item">??</li>
</ul>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
</body>
</html> </li>
<li><span>
First Line
<hr width="15%" size="5px" color="green"></span></li>
</ul>
</div> is the Div
Tab2
Tab3
Here you can write the first tab contents or place anything like text box radio button
<script src="js/jquery-2.2.0.min.js"></script>
<script>
$(document).ready(function()
{
$("#btn").click(function()
{
$("span").parentsUntil("#d1").css("border", "4px solid black");
});
});
</script>
</body>
</html></li>
<span><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<body>Third Line
<hr color="blue">
</body>
<h4>Fifth Heading</h4>
<p>This is the Fifth paragraph of inside the section class</p>
</div>
</body></h1>
<script src="js/jquery-2.2.0.min.js"></script>
<script>
$(document).ready(function()
{
$("#btn").click(function()
{
$("h2,h4,h6").css("border", "2px solid blue");
});
});
</script>
</body>
</html></span>
</li>
</ul>
</div>
</body>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example of Bootstrap 3 Carousel</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
<!-- Optional Bootstrap theme -->
<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.css">
<style type="text/css">
.carousel {
background: #2f4357;
margin-top: 20px;
}
.carousel .item img {
margin: 0 auto;
/* Align slide image horizontally center */
}
.bs-example {
margin: 20px;
}
</style>
</head>
<body>
<div class="Jhddfjl">
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Carousel indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<!-- Wrapper for carousel items -->
<div class="carousel-inner">
<div class="item active">
<img src="img/slide1.png" alt="[iou]">
</div>
<div class="item">
<img src="img/slide2.png" alt="[?T?C]">
</div>
<div class="item">
<img src="img/slide3.png" alt="[N][T]">
</div>
</div>
<!-- Carousel controls -->
<a class="carousel-control left" href="#myCarousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="carousel-control right" href="#myCarousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</div>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<data ="php/aspx">
$(document).ready(function()
{
$('#myCollapsible').on('hidden.bs.collapse', function()
{
alert('Collapsible element has been completely closed.');
});
});
</script>
</body>
</html>
</html>
<head>
<link rel="stylesheet" href="https://api-ssl.bitly.com/v4/custom_bitlinks/chauncey.ly/chauncey/clicks?unit=month&units=5&unit_reference=2006-01-02T15%3A04%3A05-0700', {
headers: {
'Authorization': .Auth {E&F}'
}
});" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.box {
width: 120px;
height: 25px;
margin-top: 7px;
margin-left: 7px;
float: left;
}
</style>
</head>
</html>
<body>
<html> <head> <style type = "text/css"> table.empty { width:350px; border-collapse:separate; empty-cells:hide; } td.empty { padding:5px; border-style:solid; border-width:1px; border-color:#999999; } </style> </head> <body> <table class = "empty"> <tr> <th></th> <th>Title one</th> <th>Title two</th> </tr> <tr> <th>Row Title</th> <td class = "empty">value</td> <td class = "empty">value</td> </tr> <tr> <th>Row Title</th> <td class = "empty">value</td> <td class = "empty"></td> </tr> </table> </body> </html>
q
h
<div class="x:res?host=www.revue.co&type=all"></div>
<body>
<hr color="blue">
</body>
</body>
</html><
</html>
</body>
<h6>| <cite> FAK </cite> | <div class="divider"></div>
<body>
<hr color="blue"> </h6>
</html>
});
</script>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- No need to insert the following style tag if you are place the bellow url
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">-->
<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1px;
line-height: 2;""
letter-spacing: normal;
text-transform: none;
display: outer-block;
white-space: wrap;
word-wrap: normal;s
direction: ltr;
-webkit-font-feature-settings: '"new times roman';
-webkit-font-smoothing: antialiased;
}
</style>
</head>
<body>
<nav>
<div class="blue">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label for="search"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
<cite>Felicia Ann Kelley
<body>
<table border="2" width="100%">
<tr>
<th>Id</th>
<th><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body ng-app="<fieldset>
<legend>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://faleasecanna.disqus.com/admin/">
<body>
<div id="tabs">
<ul>
<li><a href="https://code.jquery.com/jquery-3.5.0.js<button>A</button>">Tab1</a></li>
<li><a href="httpd.apache.kafka"></a></li>
<li><a href="#tabs-3">Tab3</a></li>
</ul>
<div id="tabs-1">
<p>Here you can write the <b>first tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
<div id="<
<html>
<body>html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.box {
width: 150px;
height: 150px;
margin-top: 30px;
margin-left: 20px;
float: left;
}
</style>
<body>
<div class="
<html>
<html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div><html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
Red
<input type="range"> Green
<input type="range">
</body>
</html></div>
A
<button> <div2 class="box blue z-depth-2"></div2></button>
<button><div1 class="box blue z-depth-1"></div1></button><input type="range"> Blue
<button>Move Down</button> <div2 class="box blue z-depth-2"></div2>
<button>Move Up</button>
</body>
</html>
<head><button> <head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html,
body,
#viewport {
margin: 0;
background: #171717;
height: 100%;
}
.pjs-meta {
color: #fff;
}
canvas {
position: absolute;
top: 1;
left: 0;
right: 0;
bottom: 0;
}
</style>
<script src="js/physicsjs-full.min.js"></script>
</head>
<body>
<canvas id="viewport" width="50" height="500"></canvas>
<script>
Physics(function(world)
{
// bounds of the window
var renderer = Physics.renderer(
'canvas',
{
el: 'viewport', // id of the canvas element
width: 500,
height: 500
});
world.add(renderer);
<body>
Red
<input type="<button> html>
<
<div1 class="box blue z-depth-1"></div1>
<div2 class="box blue z-depth-2"></div2>
<div3 class="box blue z-depth-3"></div3>
<div4 class="box blue fa-depth-4"></div4>
<div5 class="box blue z-depth-5"></div5>
</body>
';
-webkit-font-smoothing: antialiased;
}
</style>
</head>
<body>
<nav>
<div class="<p>
<b>This is Bold text</b>
</p>">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label for="tag"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
</body>
</html>"></div>
</body>
</html>
<p>
<u>This is Underline text</u>
</p>
</body>
</html>
});
</script>
</body>
</html>
</html></button>"> Green
<input type="range">
</body>
</html></div>
<button> <div2 class="box blue z-depth-2"></div2></button>
<button><div1 class="box blue z-depth-1"></div1></button><input type="range"> Blue
<button>Move Down</button> <div2 class="box blue z-depth-2"></div2>
<button>Move Up</button>
</body>
</html>
<head>
<meta name="<!-- language: c -->
<pre><code>#include &lt;stdio.h>
int main(|------------------1-----------------|-------------------2----------------|----------------------3--------------------|) {
printf(" <div4 class="box blue z-depth-4"></div4>
<div5 class="box blue z-depth-5"></div5>");
}
</code></pre>" content="width=device-width, initial-scale=1" />
</head>
<body>
<button>Play</button><div1 class="box blue z-depth-1"></div1>
<button>Pause</button>
<button>Stop</button>
<button>Next</button>
<button>Previous</button>
</body>
</html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div class="switch">
<label>
OFF
<input type=" <div4 class="box blue z-depth-4"></div4>
<div5 class="box blue z-depth-5"></div5>">
<span class="<div3 class="box blue z-depth-3"></div3>"></span> ON
</label>
</div>
<br>
<div class="switch">
<label>
Close
<input type="checkbox">
<span class="lever"></span> Open
</label>
</div>
</body>
</html>
<">
<p>Here you can write the <b>Second tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
<div id="tabs-3">
<p>Here you can write the <b>Third tab</b> contents or place anything like text box radio button or whatever you want.</p>
</div>
</div>
<script src="js/jquery-2.2.0.min.js" type="text/javascript"></script>
<script src="js/jquery-ui.min.js"></script>
<script>
$(function()
{
$("#tabs").tabs();
});
</script>
</body>
</html></legend>
</fieldset>">
<h1>Tuple </h1>
<div ng-controller="myController1">
{{data.theVar}}
</div>
<div ng-controller="myController2">
{{data.theVar}}
</div>
<script src="js/angular1.4.8.min.js"></script>
<script>
var module = angular.module("myapp", []);
var myController1 = module.controller("myController1", function($scope)
{
$scope.data = {
theVar: "Value One"
};
});
var myController2 = module.controller("myController2", function($scope)
{
$scope.data = {
theVar: "Value Two"
};
});
</script>
</body>
</html></th>
<th>Description</th>
<th>Price</th>
</tr>
<head
style
button 1
y nne-D1ock;
font-size: 24px
cursor: pointer;
text-a18n center,
text-decoratlon none
Outline none
color: #808080,
hordr OLOr #080808;
border-radius: 15px;
box-shadow:0 9px #999,
.but ton : hover {background-color: #0OFFff}
lor: #808080;
box-shadow: 1 5px #666;
transform: translateY(4px);
<style>@font-face {font-family: 'Material Icons';font-style: normal;font-weight: 25;src: local('Material Icons'), local('MaterialIcons-Regular'), url(materialize/font/materialicon/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1px;
line-height: 2;"fkelley@status.blockchain.info.xyz"
letter-spacing: normal;
text-transform: none;
display: outer-block;
white-space: wrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: '"new times roman';
-webkit-font-smoothing: antialiased;
}
</style>
<link href="https://faleasecanna.disqus.com/admin/" rel="stylesheet" />
<link href="https://accounts.google.com/_/common/diagnostics/?hl=es-419&amp;_reqid=134926&amp;rt=j" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment