From 2084dd072098d4e80ad66510ae7c8e307feb97de Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sat, 25 Mar 2023 10:46:29 +0530 Subject: [PATCH 001/620] Schema updates in database page without reloading. --- .../breadcrumb/LogoAndNameWithLink.svelte | 22 +++++++++++++++++++ .../pages/schema/CreateNewTableButton.svelte | 2 ++ mathesar_ui/src/pages/schema/TableCard.svelte | 2 ++ mathesar_ui/src/stores/schemas.ts | 3 +++ .../systems/data-explorer/ActionsPane.svelte | 2 ++ .../ExplorationTab.svelte | 2 ++ .../table-inspector/table/TableActions.svelte | 2 ++ 7 files changed, 35 insertions(+) diff --git a/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte b/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte index 35c1dfaa50..9020ceedf4 100644 --- a/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte +++ b/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte @@ -1,12 +1,34 @@ { + if (isReloadNecessary) { + await refetchSchemasForDB(getDatabaseNamefromURL(href)); + isSchemaCountChanged.set(false); + } + }} class="home-link" class:has-responsive-abridgement={hasResponsiveAbridgement} > diff --git a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte index 5943a356ce..4091d69b68 100644 --- a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte +++ b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte @@ -16,8 +16,10 @@ export let schema: SchemaEntry; let isCreatingNewTable = false; + import { isSchemaCountChanged } from '@mathesar/stores/schemas'; async function handleCreateEmptyTable() { + isSchemaCountChanged.set(true); isCreatingNewTable = true; const tableInfo = await createTable(schema.id, {}); isCreatingNewTable = false; diff --git a/mathesar_ui/src/pages/schema/TableCard.svelte b/mathesar_ui/src/pages/schema/TableCard.svelte index dfe11263ff..9f11eed6a0 100644 --- a/mathesar_ui/src/pages/schema/TableCard.svelte +++ b/mathesar_ui/src/pages/schema/TableCard.svelte @@ -20,6 +20,7 @@ getImportPreviewPageUrl, getTablePageUrl, } from '@mathesar/routes/urls'; + import { isSchemaCountChanged } from '@mathesar/stores/schemas'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { modal } from '@mathesar/stores/modal'; import { deleteTable, refetchTablesForSchema } from '@mathesar/stores/tables'; @@ -54,6 +55,7 @@ void confirmDelete({ identifierType: 'Table', onProceed: async () => { + isSchemaCountChanged.set(true); await deleteTable(table.id); await refetchTablesForSchema(schema.id); }, diff --git a/mathesar_ui/src/stores/schemas.ts b/mathesar_ui/src/stores/schemas.ts index 4d503bf998..dcd4463a67 100644 --- a/mathesar_ui/src/stores/schemas.ts +++ b/mathesar_ui/src/stores/schemas.ts @@ -18,6 +18,8 @@ import { currentDBName } from './databases'; const commonData = preloadCommonData(); +export const isSchemaCountChanged = writable(false); + export const currentSchemaId: Writable = writable(commonData?.current_schema ?? undefined); @@ -115,6 +117,7 @@ export async function refetchSchemasForDB( dbSchemasRequestMap.set(database, schemaRequest); const response = await schemaRequest; const schemas = response?.results || []; + schemas.sort((a, b) => a.id - b.id); const dbSchemasStore = setDBSchemaStore(database, schemas); diff --git a/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte b/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte index 6640978d22..adc1b36170 100644 --- a/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte +++ b/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte @@ -26,6 +26,7 @@ import { modal } from '@mathesar/stores/modal'; import { toast } from '@mathesar/stores/toast'; import { queries } from '@mathesar/stores/queries'; + import { isSchemaCountChanged } from '@mathesar/stores/schemas'; import type QueryManager from './QueryManager'; import type { ColumnWithLink } from './utils'; @@ -97,6 +98,7 @@ } async function saveExistingOrCreateNew() { + isSchemaCountChanged.set(true); if ($query.isSaved()) { await save(); } else { diff --git a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte index 93d1f126ef..3e3e38f7f9 100644 --- a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte +++ b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte @@ -17,6 +17,7 @@ import Form from '@mathesar/components/Form.svelte'; import FormField from '@mathesar/components/FormField.svelte'; import { toast } from '@mathesar/stores/toast'; + import { isSchemaCountChanged } from '@mathesar/stores/schemas'; import type QueryRunner from '../QueryRunner'; import QueryManager from '../QueryManager'; @@ -87,6 +88,7 @@ void confirmDelete({ identifierType: 'Exploration', onProceed: async () => { + isSchemaCountChanged.set(true); await deleteQuery(queryId); dispatch('delete'); }, diff --git a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte index 3a5454c84a..8fe43dbb2a 100644 --- a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte +++ b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte @@ -24,6 +24,7 @@ constructDataExplorerUrlToSummarizeFromGroup, createDataExplorerUrlToExploreATable, } from '@mathesar/systems/data-explorer'; + import { isSchemaCountChanged } from '@mathesar/stores/schemas'; export let canExecuteDDL: boolean; @@ -62,6 +63,7 @@ void confirmDelete({ identifierType: 'Table', onProceed: async () => { + isSchemaCountChanged.set(true); await deleteTable($tabularData.id); // TODO handle error when deleting // TODO: Get db and schema from prop or context From 047775a331f68f1c3c201841030ad61a210abc63 Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Sat, 25 Mar 2023 14:40:34 -0400 Subject: [PATCH 002/620] Revert "Merge pull request #2731 from centerofci/fix_regressions" This reverts commit ef067446a9c21191140d50c88eb67638167248d4, reversing changes made to 422691b9e7f0ed2369f6d8f80d7630f00e046bef. --- mathesar_ui/src/api/types/tables.ts | 1 + .../components/sheet/SheetCellResizer.svelte | 1 + .../src/components/sheet/SheetSelection.ts | 71 ++++++--- .../src/pages/record/TableWidget.svelte | 5 +- mathesar_ui/src/pages/record/Widgets.svelte | 5 +- mathesar_ui/src/pages/table/TablePage.svelte | 3 +- .../src/stores/table-data/tabularData.ts | 9 ++ mathesar_ui/src/stores/tables.ts | 10 ++ .../src/systems/data-explorer/QueryRunner.ts | 1 + .../RecordSelectorWindow.svelte | 20 ++- .../src/systems/table-view/TableView.svelte | 13 +- .../systems/table-view/header/Header.svelte | 145 +++++++++++++++--- .../header/drag-and-drop/Draggable.svelte | 34 ++++ .../header/drag-and-drop/Droppable.svelte | 63 ++++++++ .../table-view/header/drag-and-drop/index.ts | 2 + .../header/header-cell/HeaderCell.svelte | 21 ++- .../FkRecordSummaryConfig.svelte | 1 + mathesar_ui/src/utils/tables.ts | 41 +++++ 18 files changed, 384 insertions(+), 62 deletions(-) create mode 100644 mathesar_ui/src/systems/table-view/header/drag-and-drop/Draggable.svelte create mode 100644 mathesar_ui/src/systems/table-view/header/drag-and-drop/Droppable.svelte create mode 100644 mathesar_ui/src/systems/table-view/header/drag-and-drop/index.ts diff --git a/mathesar_ui/src/api/types/tables.ts b/mathesar_ui/src/api/types/tables.ts index 37ddbe980b..df3324cfb2 100644 --- a/mathesar_ui/src/api/types/tables.ts +++ b/mathesar_ui/src/api/types/tables.ts @@ -13,6 +13,7 @@ export interface TableSettings { customized: boolean; template: string; }; + column_order: number[]; } /** diff --git a/mathesar_ui/src/components/sheet/SheetCellResizer.svelte b/mathesar_ui/src/components/sheet/SheetCellResizer.svelte index c0e029182d..b56220da83 100644 --- a/mathesar_ui/src/components/sheet/SheetCellResizer.svelte +++ b/mathesar_ui/src/components/sheet/SheetCellResizer.svelte @@ -57,6 +57,7 @@
api.resetColumnWidth(columnIdentifierKey)} diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index 0d2c24c725..a4c8db1bc8 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -3,7 +3,6 @@ import { get, writable, type Unsubscriber, type Writable } from 'svelte/store'; interface SelectionColumn { id: number | string; - columnIndex: number; } interface SelectionRow { @@ -133,8 +132,8 @@ export function scrollBasedOnSelection(): void { type SelectionBounds = { startRowIndex: number; endRowIndex: number; - startColumnIndex: number; - endColumnIndex: number; + startColumnId: string | number; + endColumnId: string | number; }; type Cell = [ @@ -195,6 +194,8 @@ export default class SheetSelection< > { private getColumns: () => Column[]; + private getColumnOrder: () => number[]; + private getRows: () => Row[]; // max index is inclusive @@ -221,17 +222,22 @@ export default class SheetSelection< freezeSelection: boolean; + selectionInProgress: Writable; + constructor(args: { getColumns: () => Column[]; + getColumnOrder: () => number[]; getRows: () => Row[]; getMaxSelectionRowIndex: () => number; }) { this.selectedCells = new WritableSet(); this.columnsSelectedWhenTheTableIsEmpty = new WritableSet(); this.getColumns = args.getColumns; + this.getColumnOrder = args.getColumnOrder; this.getRows = args.getRows; this.getMaxSelectionRowIndex = args.getMaxSelectionRowIndex; this.freezeSelection = false; + this.selectionInProgress = writable(false); this.activeCell = writable(undefined); /** @@ -281,10 +287,12 @@ export default class SheetSelection< if (this.freezeSelection) { return; } + + this.selectionInProgress.set(true); // Initialize the bounds of the selection this.selectionBounds = { - startColumnIndex: column.columnIndex, - endColumnIndex: column.columnIndex, + startColumnId: column.id, + endColumnId: column.id, startRowIndex: row.rowIndex, endRowIndex: row.rowIndex, }; @@ -298,7 +306,7 @@ export default class SheetSelection< column: SelectionColumn, ): void { const { rowIndex } = row; - const { columnIndex } = column; + const { id } = column; // If there is no selection start cell, // this means the selection was never initiated @@ -307,7 +315,7 @@ export default class SheetSelection< } this.selectionBounds.endRowIndex = rowIndex; - this.selectionBounds.endColumnIndex = columnIndex; + this.selectionBounds.endColumnId = id; const cells = this.getIncludedCells(this.selectionBounds); this.selectMultipleCells(cells); @@ -319,6 +327,7 @@ export default class SheetSelection< this.selectMultipleCells(cells); this.selectionBounds = undefined; } + this.selectionInProgress.set(false); } selectAndActivateFirstCellIfExists(): void { @@ -339,22 +348,32 @@ export default class SheetSelection< } getIncludedCells(selectionBounds: SelectionBounds): Cell[] { - const { startRowIndex, endRowIndex, startColumnIndex, endColumnIndex } = + const { startRowIndex, endRowIndex, startColumnId, endColumnId } = selectionBounds; const minRowIndex = Math.min(startRowIndex, endRowIndex); const maxRowIndex = Math.max(startRowIndex, endRowIndex); - const minColumnIndex = Math.min(startColumnIndex, endColumnIndex); - const maxColumnIndex = Math.max(startColumnIndex, endColumnIndex); + + const columnOrder = this.getColumnOrder(); + + const startOrderIndex = columnOrder.indexOf(Number(startColumnId)); + const endOrderIndex = columnOrder.indexOf(Number(endColumnId)); + + const minColumnPosition = Math.min(startOrderIndex, endOrderIndex); + const maxColumnPosition = Math.max(startOrderIndex, endOrderIndex); + const columnOrderSelected = columnOrder.slice( + minColumnPosition, + maxColumnPosition + 1, + ); + + const columns = this.getColumns(); const cells: Cell[] = []; this.getRows().forEach((row) => { const { rowIndex } = row; if (rowIndex >= minRowIndex && rowIndex <= maxRowIndex) { - this.getColumns().forEach((column) => { - if ( - column.columnIndex >= minColumnIndex && - column.columnIndex <= maxColumnIndex - ) { + columnOrderSelected.forEach((columnId) => { + const column = columns.find((c) => c.id === columnId); + if (column) { cells.push([row, column]); } }); @@ -376,7 +395,7 @@ export default class SheetSelection< this.selectedCells.clear(); } - private isCompleteColumnSelected(column: Pick): boolean { + isCompleteColumnSelected(column: Pick): boolean { if (this.getRows().length) { return ( this.columnsSelectedWhenTheTableIsEmpty.getHas(column.id) || @@ -517,17 +536,19 @@ export default class SheetSelection< } onColumnSelectionStart(column: Column): boolean { - this.activateCell({ rowIndex: 0 }, { id: column.id }); - const rows = this.getRows(); + if (!this.isCompleteColumnSelected(column)) { + this.activateCell({ rowIndex: 0 }, { id: column.id }); + const rows = this.getRows(); - if (rows.length === 0) { - this.resetSelection(); - this.columnsSelectedWhenTheTableIsEmpty.add(column.id); - return true; - } + if (rows.length === 0) { + this.resetSelection(); + this.columnsSelectedWhenTheTableIsEmpty.add(column.id); + return true; + } - this.onStartSelection(rows[0], column); - this.onMouseEnterCellWhileSelection(rows[rows.length - 1], column); + this.onStartSelection(rows[0], column); + this.onMouseEnterCellWhileSelection(rows[rows.length - 1], column); + } return true; } diff --git a/mathesar_ui/src/pages/record/TableWidget.svelte b/mathesar_ui/src/pages/record/TableWidget.svelte index 1105a71303..98b3258e0b 100644 --- a/mathesar_ui/src/pages/record/TableWidget.svelte +++ b/mathesar_ui/src/pages/record/TableWidget.svelte @@ -22,7 +22,7 @@ }); export let recordPk: string; - export let table: Pick; + export let table: TableEntry; export let fkColumn: Pick; $: abstractTypesMap = $currentDbAbstractTypes.data; @@ -31,6 +31,7 @@ abstractTypesMap, meta, contextualFilters: new Map([[fkColumn.id, recordPk]]), + table, }); $: tabularDataStore.set(tabularData); @@ -42,7 +43,7 @@
- +
diff --git a/mathesar_ui/src/pages/record/Widgets.svelte b/mathesar_ui/src/pages/record/Widgets.svelte index dfeccf671e..4da465a0ad 100644 --- a/mathesar_ui/src/pages/record/Widgets.svelte +++ b/mathesar_ui/src/pages/record/Widgets.svelte @@ -1,14 +1,17 @@ @@ -31,27 +109,58 @@ let:htmlAttributes let:style > -
+ dropColumn()} + on:dragover={(e) => e.preventDefault()} + locationOfFirstDraggedColumn={0} + columnLocation={-1} + > +
+ {#each [...$processedColumns] as [columnId, processedColumn] (columnId)} -
- selection.onColumnSelectionStart(processedColumn)} - on:mouseenter={() => - selection.onMouseEnterColumnHeaderWhileSelection(processedColumn)} - /> - - - - +
+
+ dragColumn()} + column={processedColumn} + {selection} + selectionInProgress={$selectionInProgress} + > + dropColumn(processedColumn)} + on:dragover={(e) => e.preventDefault()} + {locationOfFirstDraggedColumn} + columnLocation={columnOrder.indexOf(columnId)} + isSelected={isColumnSelected( + $selectedCells, + $columnsSelectedWhenTheTableIsEmpty, + processedColumn, + )} + > + + selection.onColumnSelectionStart(processedColumn)} + on:mouseenter={() => + selection.onMouseEnterColumnHeaderWhileSelection( + processedColumn, + )} + /> + + + + + + +
{/each} diff --git a/mathesar_ui/src/systems/table-view/header/drag-and-drop/Draggable.svelte b/mathesar_ui/src/systems/table-view/header/drag-and-drop/Draggable.svelte new file mode 100644 index 0000000000..2dcfe0a5bd --- /dev/null +++ b/mathesar_ui/src/systems/table-view/header/drag-and-drop/Draggable.svelte @@ -0,0 +1,34 @@ + + +
+ +
+ + diff --git a/mathesar_ui/src/systems/table-view/header/drag-and-drop/Droppable.svelte b/mathesar_ui/src/systems/table-view/header/drag-and-drop/Droppable.svelte new file mode 100644 index 0000000000..b978f2297a --- /dev/null +++ b/mathesar_ui/src/systems/table-view/header/drag-and-drop/Droppable.svelte @@ -0,0 +1,63 @@ + + +
e.preventDefault()} + on:dragenter={(e) => dragEnter(e)} + on:dragleave={() => dragLeave()} +> + +
+ + diff --git a/mathesar_ui/src/systems/table-view/header/drag-and-drop/index.ts b/mathesar_ui/src/systems/table-view/header/drag-and-drop/index.ts new file mode 100644 index 0000000000..9dc98387d4 --- /dev/null +++ b/mathesar_ui/src/systems/table-view/header/drag-and-drop/index.ts @@ -0,0 +1,2 @@ +export { default as Draggable } from './Draggable.svelte'; +export { default as Droppable } from './Droppable.svelte'; diff --git a/mathesar_ui/src/systems/table-view/header/header-cell/HeaderCell.svelte b/mathesar_ui/src/systems/table-view/header/header-cell/HeaderCell.svelte index e8888d8d61..19b31385af 100644 --- a/mathesar_ui/src/systems/table-view/header/header-cell/HeaderCell.svelte +++ b/mathesar_ui/src/systems/table-view/header/header-cell/HeaderCell.svelte @@ -4,7 +4,7 @@ using table inspector --> diff --git a/mathesar_ui/src/utils/tables.ts b/mathesar_ui/src/utils/tables.ts index b476272458..ebfd601c00 100644 --- a/mathesar_ui/src/utils/tables.ts +++ b/mathesar_ui/src/utils/tables.ts @@ -1,4 +1,5 @@ import type { TableEntry } from '@mathesar/api/types/tables'; +import type { ProcessedColumn } from '@mathesar/stores/table-data'; import { getImportPreviewPageUrl, getTablePageUrl, @@ -19,6 +20,46 @@ export function isTableImportConfirmationRequired( ); } +export function getColumnOrder( + processedColumns: ProcessedColumn[], + table: Partial>, +) { + const allColumns = [...processedColumns.values()]; + let completeColumnOrder: number[] = []; + const { settings } = table; + if (settings) { + const { column_order: columnOrder } = settings; + if (columnOrder) { + completeColumnOrder = columnOrder; + } + } + allColumns.forEach((column) => { + if (!completeColumnOrder.includes(column.id)) { + completeColumnOrder.push(column.id); + } + }); + return completeColumnOrder; +} + +export function orderProcessedColumns( + processedColumns: Map, + table: Partial>, +): Map { + const columns = [...processedColumns.values()]; + const orderedColumns = new Map(); + + const columnOrder = getColumnOrder(columns, table); + columnOrder.forEach((id) => { + const index = columns.map((column) => column.id).indexOf(id); + if (index !== -1) { + const orderColumn = columns.splice(index, 1)[0]; + orderedColumns.set(orderColumn.id, orderColumn); + } + }); + + return orderedColumns; +} + export function getLinkForTableItem( databaseName: string, schemaId: number, From 6372019f47d64335c1e41ab1a9c9d643e1ef45b7 Mon Sep 17 00:00:00 2001 From: Dominykas Mostauskis Date: Mon, 27 Mar 2023 15:56:14 +0300 Subject: [PATCH 003/620] Update README.md with troubleshooting instructions --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 75d69b8d63..dc4564295b 100644 --- a/README.md +++ b/README.md @@ -110,5 +110,13 @@ We want to make existing database functionality more accessible, for users of al ## Contributing We actively encourage contribution! Read through [our contributing guidelines](https://wiki.mathesar.org/community/contributing) to get started. +## Bugs and troubleshooting + +If you run into problems, here's what you can try: +1. Narrow down the problem you're having to a minimal search phrase +2. Search on [our issue tracker](https://github.com/centerofci/mathesar/issues/) +3. Search on [StackOverflow using our tag `[mathesar]`](https://stackoverflow.com/questions/tagged/mathesar) +4. If you think this is a novel problem, ask on one of those platforms or [on Matrix](#join-our-community) + ## License Mathesar is open source under the GPLv3 license - see [LICENSE](LICENSE). It also contains derivatives of third-party open source modules licensed under the MIT license. See the list and respective licenses in [THIRDPARTY](THIRDPARTY). From 4c629fa6200897aad5c927b5ded82d16c88d2a58 Mon Sep 17 00:00:00 2001 From: dmos62 Date: Mon, 27 Mar 2023 13:20:07 +0000 Subject: [PATCH 004/620] chore(docs): update TOC --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dc4564295b..fb046a7a3c 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ You can use Mathesar to build **data models**, **enter data**, and even **build - [Local development setup](#local-development-setup) - [Our motivation](#our-motivation) - [Contributing](#contributing) +- [Bugs and troubleshooting](#bugs-and-troubleshooting) - [License](#license) From a54d1c7e0d2f3768593835de17b676174c35bbb7 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Wed, 29 Mar 2023 09:15:19 +0530 Subject: [PATCH 005/620] Moved reloading logic to the stores --- .../src/pages/schema/CreateNewTableButton.svelte | 2 ++ mathesar_ui/src/pages/schema/TableCard.svelte | 2 ++ mathesar_ui/src/stores/schemas.ts | 1 + .../src/systems/data-explorer/ActionsPane.svelte | 12 ++++++++++++ .../exploration-inspector/ExplorationTab.svelte | 6 ++++++ .../table-inspector/table/TableActions.svelte | 2 ++ 6 files changed, 25 insertions(+) diff --git a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte index 5943a356ce..1303d4e8a0 100644 --- a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte +++ b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte @@ -11,6 +11,7 @@ import { iconAddNew } from '@mathesar/icons'; import Icon from '@mathesar/component-library/icon/Icon.svelte'; import LinkMenuItem from '@mathesar/component-library/menu/LinkMenuItem.svelte'; + import { refetchSchema } from '@mathesar/stores/schemas'; export let database: Database; export let schema: SchemaEntry; @@ -20,6 +21,7 @@ async function handleCreateEmptyTable() { isCreatingNewTable = true; const tableInfo = await createTable(schema.id, {}); + await refetchSchema(database.name, schema.id); isCreatingNewTable = false; router.goto(getTablePageUrl(database.name, schema.id, tableInfo.id), false); } diff --git a/mathesar_ui/src/pages/schema/TableCard.svelte b/mathesar_ui/src/pages/schema/TableCard.svelte index dfe11263ff..4ed9842a78 100644 --- a/mathesar_ui/src/pages/schema/TableCard.svelte +++ b/mathesar_ui/src/pages/schema/TableCard.svelte @@ -22,6 +22,7 @@ } from '@mathesar/routes/urls'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { modal } from '@mathesar/stores/modal'; + import { refetchSchema } from '@mathesar/stores/schemas'; import { deleteTable, refetchTablesForSchema } from '@mathesar/stores/tables'; import { createDataExplorerUrlToExploreATable } from '@mathesar/systems/data-explorer'; import { getRecordSelectorFromContext } from '@mathesar/systems/record-selector/RecordSelectorController'; @@ -56,6 +57,7 @@ onProceed: async () => { await deleteTable(table.id); await refetchTablesForSchema(schema.id); + await refetchSchema(database.name, schema.id); }, }); } diff --git a/mathesar_ui/src/stores/schemas.ts b/mathesar_ui/src/stores/schemas.ts index 4d503bf998..f21e07f5d3 100644 --- a/mathesar_ui/src/stores/schemas.ts +++ b/mathesar_ui/src/stores/schemas.ts @@ -115,6 +115,7 @@ export async function refetchSchemasForDB( dbSchemasRequestMap.set(database, schemaRequest); const response = await schemaRequest; const schemas = response?.results || []; + schemas.sort((a, b) => a.id - b.id); const dbSchemasStore = setDBSchemaStore(database, schemas); diff --git a/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte b/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte index 6640978d22..bacee7e506 100644 --- a/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte +++ b/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte @@ -23,6 +23,9 @@ import ModificationStatus from '@mathesar/components/ModificationStatus.svelte'; import EntityPageHeader from '@mathesar/components/EntityPageHeader.svelte'; import NameAndDescInputModalForm from '@mathesar/components/NameAndDescInputModalForm.svelte'; + import { currentDatabase } from '@mathesar/stores/databases'; + import { currentSchemaId } from '@mathesar/stores/schemas'; + import { refetchSchema } from '@mathesar/stores/schemas'; import { modal } from '@mathesar/stores/modal'; import { toast } from '@mathesar/stores/toast'; import { queries } from '@mathesar/stores/queries'; @@ -71,6 +74,9 @@ async function save() { try { await queryManager.save(); + if ($currentDatabase && $currentSchemaId) { + await refetchSchema($currentDatabase.name, $currentSchemaId); + } return { success: true }; } catch (err) { toast.fromError(err); @@ -81,6 +87,9 @@ async function saveAndClose() { const { success } = await save(); if (success) { + if ($currentDatabase && $currentSchemaId) { + await refetchSchema($currentDatabase.name, $currentSchemaId); + } dispatch('close'); } } @@ -102,6 +111,9 @@ } else { saveModalController.open(); } + if ($currentDatabase && $currentSchemaId) { + await refetchSchema($currentDatabase.name, $currentSchemaId); + } } diff --git a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte index 93d1f126ef..c77509b15c 100644 --- a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte +++ b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte @@ -12,6 +12,9 @@ import { iconDeleteMajor } from '@mathesar/icons'; import type { QueryInstance } from '@mathesar/api/types/queries'; import { queries, putQuery, deleteQuery } from '@mathesar/stores/queries'; + import { currentDatabase } from '@mathesar/stores/databases'; + import { currentSchemaId } from '@mathesar/stores/schemas'; + import { refetchSchema } from '@mathesar/stores/schemas'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { getAvailableName } from '@mathesar/utils/db'; import Form from '@mathesar/components/Form.svelte'; @@ -89,6 +92,9 @@ onProceed: async () => { await deleteQuery(queryId); dispatch('delete'); + if ($currentDatabase && $currentSchemaId) { + await refetchSchema($currentDatabase.name, $currentSchemaId); + } }, }); } diff --git a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte index 3a5454c84a..4f960b2234 100644 --- a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte +++ b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte @@ -12,6 +12,7 @@ import { getSchemaPageUrl } from '@mathesar/routes/urls'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { currentDatabase } from '@mathesar/stores/databases'; + import { refetchSchema } from '@mathesar/stores/schemas'; import { currentSchemaId } from '@mathesar/stores/schemas'; import { getTabularDataStoreFromContext } from '@mathesar/stores/table-data'; import { @@ -67,6 +68,7 @@ // TODO: Get db and schema from prop or context if ($currentDatabase && $currentSchemaId) { await refetchTablesForSchema($currentSchemaId); + await refetchSchema($currentDatabase.name, $currentSchemaId); router.goto( getSchemaPageUrl($currentDatabase.name, $currentSchemaId), true, From b94e73211e28cb4fb6e3e0597c7a7803dcd01958 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Wed, 29 Mar 2023 10:10:34 +0530 Subject: [PATCH 006/620] Reverted the previous modifications to finalise. --- .../breadcrumb/LogoAndNameWithLink.svelte | 22 ------------------- .../pages/schema/CreateNewTableButton.svelte | 2 -- mathesar_ui/src/pages/schema/TableCard.svelte | 2 -- mathesar_ui/src/stores/schemas.ts | 2 -- .../systems/data-explorer/ActionsPane.svelte | 2 -- .../ExplorationTab.svelte | 2 -- .../table-inspector/table/TableActions.svelte | 2 -- 7 files changed, 34 deletions(-) diff --git a/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte b/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte index 9020ceedf4..35c1dfaa50 100644 --- a/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte +++ b/mathesar_ui/src/components/breadcrumb/LogoAndNameWithLink.svelte @@ -1,34 +1,12 @@
{ - if (isReloadNecessary) { - await refetchSchemasForDB(getDatabaseNamefromURL(href)); - isSchemaCountChanged.set(false); - } - }} class="home-link" class:has-responsive-abridgement={hasResponsiveAbridgement} > diff --git a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte index b3b2ed0bee..1303d4e8a0 100644 --- a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte +++ b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte @@ -17,10 +17,8 @@ export let schema: SchemaEntry; let isCreatingNewTable = false; - import { isSchemaCountChanged } from '@mathesar/stores/schemas'; async function handleCreateEmptyTable() { - isSchemaCountChanged.set(true); isCreatingNewTable = true; const tableInfo = await createTable(schema.id, {}); await refetchSchema(database.name, schema.id); diff --git a/mathesar_ui/src/pages/schema/TableCard.svelte b/mathesar_ui/src/pages/schema/TableCard.svelte index 8b96870241..4ed9842a78 100644 --- a/mathesar_ui/src/pages/schema/TableCard.svelte +++ b/mathesar_ui/src/pages/schema/TableCard.svelte @@ -20,7 +20,6 @@ getImportPreviewPageUrl, getTablePageUrl, } from '@mathesar/routes/urls'; - import { isSchemaCountChanged } from '@mathesar/stores/schemas'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { modal } from '@mathesar/stores/modal'; import { refetchSchema } from '@mathesar/stores/schemas'; @@ -56,7 +55,6 @@ void confirmDelete({ identifierType: 'Table', onProceed: async () => { - isSchemaCountChanged.set(true); await deleteTable(table.id); await refetchTablesForSchema(schema.id); await refetchSchema(database.name, schema.id); diff --git a/mathesar_ui/src/stores/schemas.ts b/mathesar_ui/src/stores/schemas.ts index dcd4463a67..f21e07f5d3 100644 --- a/mathesar_ui/src/stores/schemas.ts +++ b/mathesar_ui/src/stores/schemas.ts @@ -18,8 +18,6 @@ import { currentDBName } from './databases'; const commonData = preloadCommonData(); -export const isSchemaCountChanged = writable(false); - export const currentSchemaId: Writable = writable(commonData?.current_schema ?? undefined); diff --git a/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte b/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte index 03dfd179f5..bacee7e506 100644 --- a/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte +++ b/mathesar_ui/src/systems/data-explorer/ActionsPane.svelte @@ -29,7 +29,6 @@ import { modal } from '@mathesar/stores/modal'; import { toast } from '@mathesar/stores/toast'; import { queries } from '@mathesar/stores/queries'; - import { isSchemaCountChanged } from '@mathesar/stores/schemas'; import type QueryManager from './QueryManager'; import type { ColumnWithLink } from './utils'; @@ -107,7 +106,6 @@ } async function saveExistingOrCreateNew() { - isSchemaCountChanged.set(true); if ($query.isSaved()) { await save(); } else { diff --git a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte index a71e95dac0..c77509b15c 100644 --- a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte +++ b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte @@ -20,7 +20,6 @@ import Form from '@mathesar/components/Form.svelte'; import FormField from '@mathesar/components/FormField.svelte'; import { toast } from '@mathesar/stores/toast'; - import { isSchemaCountChanged } from '@mathesar/stores/schemas'; import type QueryRunner from '../QueryRunner'; import QueryManager from '../QueryManager'; @@ -91,7 +90,6 @@ void confirmDelete({ identifierType: 'Exploration', onProceed: async () => { - isSchemaCountChanged.set(true); await deleteQuery(queryId); dispatch('delete'); if ($currentDatabase && $currentSchemaId) { diff --git a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte index 48ef28364a..4f960b2234 100644 --- a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte +++ b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte @@ -25,7 +25,6 @@ constructDataExplorerUrlToSummarizeFromGroup, createDataExplorerUrlToExploreATable, } from '@mathesar/systems/data-explorer'; - import { isSchemaCountChanged } from '@mathesar/stores/schemas'; export let canExecuteDDL: boolean; @@ -64,7 +63,6 @@ void confirmDelete({ identifierType: 'Table', onProceed: async () => { - isSchemaCountChanged.set(true); await deleteTable($tabularData.id); // TODO handle error when deleting // TODO: Get db and schema from prop or context From f64fdd5974c5762c2855206b19bfb855869ccecd Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Fri, 31 Mar 2023 23:27:29 -0400 Subject: [PATCH 007/620] fix #2717 --- mathesar_ui/src/pages/record/TableWidget.svelte | 2 +- mathesar_ui/src/pages/record/Widgets.svelte | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/mathesar_ui/src/pages/record/TableWidget.svelte b/mathesar_ui/src/pages/record/TableWidget.svelte index 98b3258e0b..831a5ce6b6 100644 --- a/mathesar_ui/src/pages/record/TableWidget.svelte +++ b/mathesar_ui/src/pages/record/TableWidget.svelte @@ -22,7 +22,7 @@ }); export let recordPk: string; - export let table: TableEntry; + export let table: TableEntry | undefined; export let fkColumn: Pick; $: abstractTypesMap = $currentDbAbstractTypes.data; diff --git a/mathesar_ui/src/pages/record/Widgets.svelte b/mathesar_ui/src/pages/record/Widgets.svelte index 4da465a0ad..ac12c1fee1 100644 --- a/mathesar_ui/src/pages/record/Widgets.svelte +++ b/mathesar_ui/src/pages/record/Widgets.svelte @@ -4,14 +4,13 @@ import { Help } from '@mathesar-component-library'; import NameWithIcon from '@mathesar/components/NameWithIcon.svelte'; import { iconRecord } from '@mathesar/icons'; - import { currentTable } from '@mathesar/stores/tables'; + import { tables } from '@mathesar/stores/tables'; import TableWidget from './TableWidget.svelte'; export let recordPk: string; export let recordSummary: string; export let joinableTablesResult: JoinableTablesResult; - $: currTable = $currentTable as TableEntry; $: tableNameMap = new Map( Object.entries(joinableTablesResult.tables).map(([tableId, table]) => [ parseInt(tableId, 10), @@ -30,6 +29,7 @@ table: { id: joinableTable.target, name: tableNameMap.get(joinableTable.target) ?? '(unknown table)', + entry: $tables.data.get(joinableTable.target) }, fkColumn: { id: joinableTable.jp_path[0].slice(-1)[0], @@ -55,9 +55,11 @@
{#each tableWidgetInputs as { table, fkColumn } (`${table.id}-${fkColumn.id}`)} -
- -
+ {#if table.entry} +
+ +
+ {/if} {/each}
From 3f9eba06459a7e4c2290afe24708b67abba36953 Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Tue, 4 Apr 2023 07:44:52 -0400 Subject: [PATCH 008/620] fix #2718 --- mathesar_ui/src/components/sheet/SheetSelection.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index a4c8db1bc8..c509323038 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -616,6 +616,9 @@ export default class SheetSelection< activeCell: ActiveCell, direction: Direction, ): ActiveCell | undefined { + + const columnOrder = this.getColumnOrder(); + const rowIndex = (() => { const delta = getVerticalDelta(direction); if (delta === 0) { @@ -638,10 +641,9 @@ export default class SheetSelection< if (delta === 0) { return activeCell.columnId; } - const columns = this.getColumns(); - const index = columns.findIndex((c) => c.id === activeCell.columnId); - const target = columns[index + delta] as Column | undefined; - return target?.id; + const index = columnOrder.indexOf(Number(activeCell.columnId)); + const target_id = columnOrder[index + delta] as number; //CHANGE THIS + return target_id; })(); if (columnId === undefined) { return undefined; From e04db7b7b6efd558e5445bd97aedcb0ddfbcb399 Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Mon, 10 Apr 2023 08:06:52 -0400 Subject: [PATCH 009/620] fix #2722 --- .../src/components/sheet/SheetSelection.ts | 33 +++++++++---------- .../src/systems/data-explorer/QueryRunner.ts | 2 +- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index c509323038..e51573be22 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -132,8 +132,8 @@ export function scrollBasedOnSelection(): void { type SelectionBounds = { startRowIndex: number; endRowIndex: number; - startColumnId: string | number; - endColumnId: string | number; + startColumnId: string; + endColumnId: string; }; type Cell = [ @@ -181,7 +181,7 @@ function getSelectedColumnId(selectedCell: string): SelectionColumn['id'] { if (Number.isNaN(numericalColumnId)) { return columnId; } - return numericalColumnId; + return numericalColumnId.toString(); } export function getSelectedRowIndex(selectedCell: string): number { @@ -194,7 +194,7 @@ export default class SheetSelection< > { private getColumns: () => Column[]; - private getColumnOrder: () => number[]; + private getColumnOrder: () => string[] | number[]; private getRows: () => Row[]; @@ -226,7 +226,7 @@ export default class SheetSelection< constructor(args: { getColumns: () => Column[]; - getColumnOrder: () => number[]; + getColumnOrder: () => string[] | number[]; getRows: () => Row[]; getMaxSelectionRowIndex: () => number; }) { @@ -291,8 +291,8 @@ export default class SheetSelection< this.selectionInProgress.set(true); // Initialize the bounds of the selection this.selectionBounds = { - startColumnId: column.id, - endColumnId: column.id, + startColumnId: column.id.toString(), + endColumnId: column.id.toString(), startRowIndex: row.rowIndex, endRowIndex: row.rowIndex, }; @@ -315,8 +315,7 @@ export default class SheetSelection< } this.selectionBounds.endRowIndex = rowIndex; - this.selectionBounds.endColumnId = id; - + this.selectionBounds.endColumnId = id.toString(); const cells = this.getIncludedCells(this.selectionBounds); this.selectMultipleCells(cells); } @@ -353,10 +352,9 @@ export default class SheetSelection< const minRowIndex = Math.min(startRowIndex, endRowIndex); const maxRowIndex = Math.max(startRowIndex, endRowIndex); - const columnOrder = this.getColumnOrder(); - - const startOrderIndex = columnOrder.indexOf(Number(startColumnId)); - const endOrderIndex = columnOrder.indexOf(Number(endColumnId)); + const columnOrder: string[] = [...this.getColumnOrder().map(c => c.toString())]; + const startOrderIndex = columnOrder.indexOf(startColumnId); + const endOrderIndex = columnOrder.indexOf(endColumnId); const minColumnPosition = Math.min(startOrderIndex, endOrderIndex); const maxColumnPosition = Math.max(startOrderIndex, endOrderIndex); @@ -372,13 +370,14 @@ export default class SheetSelection< const { rowIndex } = row; if (rowIndex >= minRowIndex && rowIndex <= maxRowIndex) { columnOrderSelected.forEach((columnId) => { - const column = columns.find((c) => c.id === columnId); + const column = columns.find((c) => c.id.toString() === columnId); if (column) { cells.push([row, column]); } }); } }); + return cells; } @@ -617,7 +616,7 @@ export default class SheetSelection< direction: Direction, ): ActiveCell | undefined { - const columnOrder = this.getColumnOrder(); + const columnOrder = this.getColumnOrder().map(column => column.toString()); const rowIndex = (() => { const delta = getVerticalDelta(direction); @@ -641,8 +640,8 @@ export default class SheetSelection< if (delta === 0) { return activeCell.columnId; } - const index = columnOrder.indexOf(Number(activeCell.columnId)); - const target_id = columnOrder[index + delta] as number; //CHANGE THIS + const index = columnOrder.indexOf(activeCell.columnId.toString()); + const target_id = columnOrder[index + delta]; return target_id; })(); if (columnId === undefined) { diff --git a/mathesar_ui/src/systems/data-explorer/QueryRunner.ts b/mathesar_ui/src/systems/data-explorer/QueryRunner.ts index 270b9d512c..7853e0637e 100644 --- a/mathesar_ui/src/systems/data-explorer/QueryRunner.ts +++ b/mathesar_ui/src/systems/data-explorer/QueryRunner.ts @@ -83,7 +83,7 @@ export default class QueryRunner< void this.run(); this.selection = new SheetSelection({ getColumns: () => [...get(this.processedColumns).values()], - getColumnOrder: () => [], // Empty array to default to the columnIndex order + getColumnOrder: () => [...get(this.processedColumns).values()].map(column=>column.id), getRows: () => get(this.rowsData).rows, getMaxSelectionRowIndex: () => { const rowLength = get(this.rowsData).rows.length; From c8dab70c909f7c1e18b4c8afdc210a6e352fbda5 Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Mon, 10 Apr 2023 08:12:04 -0400 Subject: [PATCH 010/620] lint and format --- mathesar_ui/src/components/sheet/SheetSelection.ts | 13 ++++++++----- mathesar_ui/src/pages/record/Widgets.svelte | 3 +-- .../src/systems/data-explorer/QueryRunner.ts | 3 ++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index e51573be22..ceaaea1a19 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -352,7 +352,9 @@ export default class SheetSelection< const minRowIndex = Math.min(startRowIndex, endRowIndex); const maxRowIndex = Math.max(startRowIndex, endRowIndex); - const columnOrder: string[] = [...this.getColumnOrder().map(c => c.toString())]; + const columnOrder: string[] = [ + ...this.getColumnOrder().map((c) => c.toString()), + ]; const startOrderIndex = columnOrder.indexOf(startColumnId); const endOrderIndex = columnOrder.indexOf(endColumnId); @@ -615,8 +617,9 @@ export default class SheetSelection< activeCell: ActiveCell, direction: Direction, ): ActiveCell | undefined { - - const columnOrder = this.getColumnOrder().map(column => column.toString()); + const columnOrder = this.getColumnOrder().map((column) => + column.toString(), + ); const rowIndex = (() => { const delta = getVerticalDelta(direction); @@ -641,8 +644,8 @@ export default class SheetSelection< return activeCell.columnId; } const index = columnOrder.indexOf(activeCell.columnId.toString()); - const target_id = columnOrder[index + delta]; - return target_id; + const targetId = columnOrder[index + delta]; + return targetId; })(); if (columnId === undefined) { return undefined; diff --git a/mathesar_ui/src/pages/record/Widgets.svelte b/mathesar_ui/src/pages/record/Widgets.svelte index ac12c1fee1..c0bfa12370 100644 --- a/mathesar_ui/src/pages/record/Widgets.svelte +++ b/mathesar_ui/src/pages/record/Widgets.svelte @@ -1,5 +1,4 @@ diff --git a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte index c77509b15c..93d1f126ef 100644 --- a/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte +++ b/mathesar_ui/src/systems/data-explorer/exploration-inspector/ExplorationTab.svelte @@ -12,9 +12,6 @@ import { iconDeleteMajor } from '@mathesar/icons'; import type { QueryInstance } from '@mathesar/api/types/queries'; import { queries, putQuery, deleteQuery } from '@mathesar/stores/queries'; - import { currentDatabase } from '@mathesar/stores/databases'; - import { currentSchemaId } from '@mathesar/stores/schemas'; - import { refetchSchema } from '@mathesar/stores/schemas'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { getAvailableName } from '@mathesar/utils/db'; import Form from '@mathesar/components/Form.svelte'; @@ -92,9 +89,6 @@ onProceed: async () => { await deleteQuery(queryId); dispatch('delete'); - if ($currentDatabase && $currentSchemaId) { - await refetchSchema($currentDatabase.name, $currentSchemaId); - } }, }); } diff --git a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte index 4f960b2234..3a5454c84a 100644 --- a/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte +++ b/mathesar_ui/src/systems/table-view/table-inspector/table/TableActions.svelte @@ -12,7 +12,6 @@ import { getSchemaPageUrl } from '@mathesar/routes/urls'; import { confirmDelete } from '@mathesar/stores/confirmation'; import { currentDatabase } from '@mathesar/stores/databases'; - import { refetchSchema } from '@mathesar/stores/schemas'; import { currentSchemaId } from '@mathesar/stores/schemas'; import { getTabularDataStoreFromContext } from '@mathesar/stores/table-data'; import { @@ -68,7 +67,6 @@ // TODO: Get db and schema from prop or context if ($currentDatabase && $currentSchemaId) { await refetchTablesForSchema($currentSchemaId); - await refetchSchema($currentDatabase.name, $currentSchemaId); router.goto( getSchemaPageUrl($currentDatabase.name, $currentSchemaId), true, From 4e27ed10d4f07ec3f7b98bc2633d7aae9e96511d Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sat, 15 Apr 2023 16:33:42 +0530 Subject: [PATCH 019/620] Revert back previous change --- mathesar_ui/src/pages/schema/CreateNewTableButton.svelte | 2 -- 1 file changed, 2 deletions(-) diff --git a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte index 1303d4e8a0..5943a356ce 100644 --- a/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte +++ b/mathesar_ui/src/pages/schema/CreateNewTableButton.svelte @@ -11,7 +11,6 @@ import { iconAddNew } from '@mathesar/icons'; import Icon from '@mathesar/component-library/icon/Icon.svelte'; import LinkMenuItem from '@mathesar/component-library/menu/LinkMenuItem.svelte'; - import { refetchSchema } from '@mathesar/stores/schemas'; export let database: Database; export let schema: SchemaEntry; @@ -21,7 +20,6 @@ async function handleCreateEmptyTable() { isCreatingNewTable = true; const tableInfo = await createTable(schema.id, {}); - await refetchSchema(database.name, schema.id); isCreatingNewTable = false; router.goto(getTablePageUrl(database.name, schema.id, tableInfo.id), false); } From 7d8f616c9abe9338b846ec87d751d6f874fc8c8e Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Wed, 19 Apr 2023 21:52:10 -0400 Subject: [PATCH 020/620] fix row selection --- .../src/components/sheet/SheetSelection.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index e24cd9083f..fde37f0d14 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -568,17 +568,24 @@ export default class SheetSelection< onRowSelectionStart(row: Row): boolean { const columns = this.getColumns(); - + const columnOrder: string[] = [ + ...this.getColumnOrder().map((c) => c.toString()), + ]; if (!columns.length) { // Not possible to have tables without columns } - const startColumn = columns[0]; - const endColumn = columns[columns.length - 1]; - this.activateCell(row, startColumn); + const startColumnId = columnOrder[0]; + const endColumnId = columnOrder[columnOrder.length - 1]; + const startColumn = columns.find((c) => c.id.toString() === startColumnId) + const endColumn = columns.find((c) => c.id.toString() === endColumnId) + + if (startColumn && endColumn) { + this.activateCell(row, startColumn); + this.onStartSelection(row, startColumn); + this.onMouseEnterCellWhileSelection(row, endColumn); + } - this.onStartSelection(row, startColumn); - this.onMouseEnterCellWhileSelection(row, endColumn); return true; } From 7764dff8d5fc3deb70d9f1b5a457ff99b5811ee2 Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Wed, 19 Apr 2023 22:35:04 -0400 Subject: [PATCH 021/620] going back to string|number for columnOrder --- .../src/components/sheet/SheetSelection.ts | 47 ++++++++----------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index fde37f0d14..5761a14d03 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -132,8 +132,8 @@ export function scrollBasedOnSelection(): void { type SelectionBounds = { startRowIndex: number; endRowIndex: number; - startColumnId: string; - endColumnId: string; + startColumnId: number | string; + endColumnId: number | string; }; type Cell = [ @@ -181,7 +181,7 @@ function getSelectedColumnId(selectedCell: string): SelectionColumn['id'] { if (Number.isNaN(numericalColumnId)) { return columnId; } - return numericalColumnId.toString(); + return numericalColumnId; } export function getSelectedRowIndex(selectedCell: string): number { @@ -291,8 +291,8 @@ export default class SheetSelection< this.selectionInProgress.set(true); // Initialize the bounds of the selection this.selectionBounds = { - startColumnId: column.id.toString(), - endColumnId: column.id.toString(), + startColumnId: column.id, + endColumnId: column.id, startRowIndex: row.rowIndex, endRowIndex: row.rowIndex, }; @@ -315,7 +315,7 @@ export default class SheetSelection< } this.selectionBounds.endRowIndex = rowIndex; - this.selectionBounds.endColumnId = id.toString(); + this.selectionBounds.endColumnId = id; const cells = this.getIncludedCells(this.selectionBounds); this.selectMultipleCells(cells); } @@ -352,11 +352,10 @@ export default class SheetSelection< const minRowIndex = Math.min(startRowIndex, endRowIndex); const maxRowIndex = Math.max(startRowIndex, endRowIndex); - const columnOrder: string[] = [ - ...this.getColumnOrder().map((c) => c.toString()), - ]; - const startOrderIndex = columnOrder.indexOf(startColumnId); - const endOrderIndex = columnOrder.indexOf(endColumnId); + const columnOrder = this.getColumnOrder(); + + const startOrderIndex = columnOrder.findIndex((id) => id === startColumnId); + const endOrderIndex = columnOrder.findIndex((id) => id === endColumnId); const minColumnPosition = Math.min(startOrderIndex, endOrderIndex); const maxColumnPosition = Math.max(startOrderIndex, endOrderIndex); @@ -577,9 +576,9 @@ export default class SheetSelection< const startColumnId = columnOrder[0]; const endColumnId = columnOrder[columnOrder.length - 1]; - const startColumn = columns.find((c) => c.id.toString() === startColumnId) - const endColumn = columns.find((c) => c.id.toString() === endColumnId) - + const startColumn = columns.find((c) => c.id.toString() === startColumnId); + const endColumn = columns.find((c) => c.id.toString() === endColumnId); + if (startColumn && endColumn) { this.activateCell(row, startColumn); this.onStartSelection(row, startColumn); @@ -624,9 +623,7 @@ export default class SheetSelection< activeCell: ActiveCell, direction: Direction, ): ActiveCell | undefined { - const columnOrder = this.getColumnOrder().map((column) => - column.toString(), - ); + const columnOrder = this.getColumnOrder(); const rowIndex = (() => { const delta = getVerticalDelta(direction); @@ -650,19 +647,13 @@ export default class SheetSelection< if (delta === 0) { return activeCell.columnId; } - const index = columnOrder.indexOf(activeCell.columnId.toString()); - const targetId = parseInt(columnOrder[index + delta], 10); - - if (Number.isNaN(targetId)) { - return undefined; + if (activeCell.columnId) { + const index = columnOrder.findIndex((id) => id === activeCell.columnId); + const targetId = columnOrder[index + delta]; + return targetId; } - - return targetId; + return ''; })(); - if (columnId === undefined) { - return undefined; - } - return { rowIndex, columnId }; } From 7ba2d66a0a12c4dcefafd37bc4b8129d018005a1 Mon Sep 17 00:00:00 2001 From: Alek Lefebvre Date: Thu, 20 Apr 2023 08:05:30 -0400 Subject: [PATCH 022/620] going back to string|number for columnOrder --- mathesar_ui/src/components/sheet/SheetSelection.ts | 14 ++++++++------ .../src/systems/table-view/header/Header.svelte | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetSelection.ts b/mathesar_ui/src/components/sheet/SheetSelection.ts index 5761a14d03..08cfbd9af4 100644 --- a/mathesar_ui/src/components/sheet/SheetSelection.ts +++ b/mathesar_ui/src/components/sheet/SheetSelection.ts @@ -371,7 +371,7 @@ export default class SheetSelection< const { rowIndex } = row; if (rowIndex >= minRowIndex && rowIndex <= maxRowIndex) { columnOrderSelected.forEach((columnId) => { - const column = columns.find((c) => c.id.toString() === columnId); + const column = columns.find((c) => c.id === columnId); if (column) { cells.push([row, column]); } @@ -567,17 +567,16 @@ export default class SheetSelection< onRowSelectionStart(row: Row): boolean { const columns = this.getColumns(); - const columnOrder: string[] = [ - ...this.getColumnOrder().map((c) => c.toString()), - ]; + const columnOrder = this.getColumnOrder(); + if (!columns.length) { // Not possible to have tables without columns } const startColumnId = columnOrder[0]; const endColumnId = columnOrder[columnOrder.length - 1]; - const startColumn = columns.find((c) => c.id.toString() === startColumnId); - const endColumn = columns.find((c) => c.id.toString() === endColumnId); + const startColumn = columns.find((c) => c.id === startColumnId); + const endColumn = columns.find((c) => c.id === endColumnId); if (startColumn && endColumn) { this.activateCell(row, startColumn); @@ -654,6 +653,9 @@ export default class SheetSelection< } return ''; })(); + if (!columnId) { + return undefined; + } return { rowIndex, columnId }; } diff --git a/mathesar_ui/src/systems/table-view/header/Header.svelte b/mathesar_ui/src/systems/table-view/header/Header.svelte index 552b913199..e70a5574fd 100644 --- a/mathesar_ui/src/systems/table-view/header/Header.svelte +++ b/mathesar_ui/src/systems/table-view/header/Header.svelte @@ -47,7 +47,7 @@ // Keep only IDs for which the column exists for (const columnId of $processedColumns.keys()) { const columnIdString = columnId.toString(); - columnOrderString = [...new Set(columnOrderString.map(String))]; + columnOrderString = [...new Set(columnOrderString)]; if (!columnOrderString.includes(columnIdString)) { columnOrderString = [...columnOrderString, columnIdString]; } From 7e084de96587f586776df38077803c6fb87ecfcb Mon Sep 17 00:00:00 2001 From: dev-cj Date: Mon, 24 Apr 2023 20:39:31 +0530 Subject: [PATCH 023/620] Fix caret position with scrollLeft --- .../component-library/formatted-input/FormattedInput.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte b/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte index 64bc867ac1..ab956ee2fb 100644 --- a/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte +++ b/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte @@ -97,6 +97,10 @@ }); await tick(); element?.setSelectionRange(newCursorPosition, newCursorPosition); + if (element) { + const { scrollWidth } = element; + element.scrollLeft = scrollWidth; + } } catch (error) { onParseError({ userInput, error }); } From e1db5cd5e741e59eb63f5c919754e3c6762bdda2 Mon Sep 17 00:00:00 2001 From: dev-cj Date: Sat, 29 Apr 2023 01:13:53 +0530 Subject: [PATCH 024/620] Added caret position in pixel helper to scrollleft --- .../formatted-input/FormattedInput.svelte | 11 +- .../formatted-input/utils.ts | 162 ++++++++++++++++++ 2 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 mathesar_ui/src/component-library/formatted-input/utils.ts diff --git a/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte b/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte index ab956ee2fb..edd9719a79 100644 --- a/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte +++ b/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte @@ -5,6 +5,7 @@ import type { ArtificialEvents } from '@mathesar/component-library/common/types/ArtificialEvents'; import type { ParseResult, FormattedInputProps } from './FormattedInputTypes'; import { getCursorPositionAfterReformat } from './formattedInputUtils'; + import { getCaretCoordinates } from './utils'; type T = $$Generic; type $$Props = FormattedInputProps; @@ -97,9 +98,13 @@ }); await tick(); element?.setSelectionRange(newCursorPosition, newCursorPosition); - if (element) { - const { scrollWidth } = element; - element.scrollLeft = scrollWidth; + + if (!element) return; + // scroll input left + const coordinates = getCaretCoordinates(element, newCursorPosition); + + if (coordinates.diff > 0) { + element.scrollLeft = coordinates.diff + 8; } } catch (error) { onParseError({ userInput, error }); diff --git a/mathesar_ui/src/component-library/formatted-input/utils.ts b/mathesar_ui/src/component-library/formatted-input/utils.ts new file mode 100644 index 0000000000..9d1725b0f2 --- /dev/null +++ b/mathesar_ui/src/component-library/formatted-input/utils.ts @@ -0,0 +1,162 @@ +/* eslint-disable */ + +// Below code is taken from here and modified for FormattedInput use +// https://github.com/component/textarea-caret-position/blob/master/index.js + +const properties = [ + 'direction', // RTL support + 'boxSizing', + 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does + 'height', + 'overflowX', + 'overflowY', // copy the scrollbar for IE + + 'borderTopWidth', + 'borderRightWidth', + 'borderBottomWidth', + 'borderLeftWidth', + 'borderStyle', + + 'paddingTop', + 'paddingRight', + 'paddingBottom', + 'paddingLeft', + + // https://developer.mozilla.org/en-US/docs/Web/CSS/font + 'fontStyle', + 'fontVariant', + 'fontWeight', + 'fontStretch', + 'fontSize', + 'fontSizeAdjust', + 'lineHeight', + 'fontFamily', + + 'textAlign', + 'textTransform', + 'textIndent', + 'textDecoration', // might not make a difference, but better be safe + + 'letterSpacing', + 'wordSpacing', + + 'tabSize', + 'MozTabSize', +]; + +const isBrowser = typeof window !== 'undefined'; +const isFirefox = isBrowser && window.mozInnerScreenX != null; + +// We'll copy the properties below into the mirror div. +// Note that some browsers, such as Firefox, do not concatenate properties +// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding), +// so we have to list every single property explicitly. + +export function getCaretCoordinates( + element: HTMLInputElement, + position: number, +) { + let debug = false; + if (debug) { + let el = document.querySelector( + '#input-textarea-caret-position-mirror-div', + ); + if (el) el.parentNode?.removeChild(el); + } + + // The mirror div will replicate the textarea's style + let div = document.createElement('div'); + div.id = 'input-textarea-caret-position-mirror-div'; + document.body.appendChild(div); + + let style = div.style; + let computed = window.getComputedStyle + ? window.getComputedStyle(element) + : element.currentStyle; // currentStyle for IE < 9 + let isInput = element.nodeName === 'INPUT'; + + // Default textarea styles + style.whiteSpace = 'pre-wrap'; + if (!isInput) style.wordWrap = 'break-word'; // only for textarea-s + + // Position off-screen + style.position = 'absolute'; // required to return coordinates properly + if (!debug) style.visibility = 'hidden'; // not 'display: none' because we want rendering + if (debug) { + style.top = '0px'; + style.zIndex = '999999999'; + style.backgroundColor = 'green'; + } + // Transfer the element's properties to the div + properties.forEach(function (prop: string) { + if (isInput && prop === 'lineHeight') { + // Special case for s because text is rendered centered and line height may be != height + if (computed.boxSizing === 'border-box') { + let height = parseInt(computed.height); + let outerHeight = + parseInt(computed.paddingTop) + + parseInt(computed.paddingBottom) + + parseInt(computed.borderTopWidth) + + parseInt(computed.borderBottomWidth); + let targetHeight = outerHeight + parseInt(computed.lineHeight); + if (height > targetHeight) { + style.lineHeight = height - outerHeight + 'px'; + } else if (height === targetHeight) { + style.lineHeight = computed.lineHeight; + } else { + style.lineHeight = '0'; + } + } else { + style.lineHeight = computed.height; + } + } else { + style[prop] = computed[prop]; + } + }); + + if (isFirefox) { + // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275 + if (element.scrollHeight > parseInt(computed.height)) + style.overflowY = 'scroll'; + } else { + style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll' + } + + div.textContent = element.value.substring(0, position); + // The second special handling for input type="text" vs textarea: + // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037 + if (isInput) div.textContent = div.textContent.replace(/\s/g, '\u00a0'); + + let span = document.createElement('span'); + span.style.zIndex = '999999'; + + // Wrapping must be replicated *exactly*, including when a long word gets + // onto the next line, with whitespace at the end of the line before (#7). + // The *only* reliable way to do that is to copy the *entire* rest of the + // textarea's content into the created at the caret position. + // For inputs, just '.' would be enough, but no need to bother. + span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all + div.appendChild(span); + + // Added diff method for FormattedInput + // return diff offset in negative until scrolling is required + // which can be directly used to scroll + let diff = + span.offsetLeft + + parseInt(computed['borderLeftWidth']) - + parseInt(div.style.width); + let coordinates = { + top: span.offsetTop + parseInt(computed['borderTopWidth']), + left: span.offsetLeft + parseInt(computed['borderLeftWidth']), + height: parseInt(computed['lineHeight']), + diff: diff, + }; + + if (debug) { + span.style.backgroundColor = '#aaa'; + } else { + document.body.removeChild(div); + } + + return coordinates; +} From 6b6066a1a10fd92a6a210ba1650db89a0755a096 Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Mon, 1 May 2023 18:30:29 -0400 Subject: [PATCH 025/620] Clean up code in Widgets.svelte --- mathesar_ui/src/pages/record/Widgets.svelte | 45 +++++++++------------ 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/mathesar_ui/src/pages/record/Widgets.svelte b/mathesar_ui/src/pages/record/Widgets.svelte index c0bfa12370..10ce4f17e9 100644 --- a/mathesar_ui/src/pages/record/Widgets.svelte +++ b/mathesar_ui/src/pages/record/Widgets.svelte @@ -1,6 +1,9 @@ @@ -54,11 +49,9 @@
{#each tableWidgetInputs as { table, fkColumn } (`${table.id}-${fkColumn.id}`)} - {#if table.entry} -
- -
- {/if} +
+ +
{/each}
From 5b07040a9b7dc67010a400dbd8f7ab879b7ba915 Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Tue, 9 May 2023 13:37:10 -0400 Subject: [PATCH 026/620] Install papaparse --- mathesar_ui/package-lock.json | 14 ++++++++++++++ mathesar_ui/package.json | 2 ++ 2 files changed, 16 insertions(+) diff --git a/mathesar_ui/package-lock.json b/mathesar_ui/package-lock.json index 5ede732d00..bd4d9d4ed3 100644 --- a/mathesar_ui/package-lock.json +++ b/mathesar_ui/package-lock.json @@ -11045,6 +11045,15 @@ "integrity": "sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w==", "dev": true }, + "@types/papaparse": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.7.tgz", + "integrity": "sha512-f2HKmlnPdCvS0WI33WtCs5GD7X1cxzzS/aduaxSu3I7TbhWlENjSPs6z5TaB9K0J+BH1jbmqTaM+ja5puis4wg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -20243,6 +20252,11 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, "parallel-transform": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", diff --git a/mathesar_ui/package.json b/mathesar_ui/package.json index 11efcd7af7..b092a7c033 100644 --- a/mathesar_ui/package.json +++ b/mathesar_ui/package.json @@ -27,6 +27,7 @@ "@testing-library/user-event": "^14.4.3", "@tsconfig/svelte": "^3.0.0", "@types/js-cookie": "^3.0.2", + "@types/papaparse": "^5.3.7", "@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", "@vitejs/plugin-legacy": "^2.2.0", @@ -64,6 +65,7 @@ "flatpickr": "^4.6.13", "iter-tools": "^7.4.0", "js-cookie": "^3.0.1", + "papaparse": "^5.4.1", "perfect-scrollbar": "^1.5.5" } } From 2cd141a26837ca04190df4d0e082dbf890f53796 Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Tue, 9 May 2023 14:35:08 -0400 Subject: [PATCH 027/620] Use papaparse library to improve TSV serialization --- .../components/sheet/SheetClipboardHandler.ts | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/mathesar_ui/src/components/sheet/SheetClipboardHandler.ts b/mathesar_ui/src/components/sheet/SheetClipboardHandler.ts index a7fd1928c7..c8e7a8b3d7 100644 --- a/mathesar_ui/src/components/sheet/SheetClipboardHandler.ts +++ b/mathesar_ui/src/components/sheet/SheetClipboardHandler.ts @@ -1,3 +1,4 @@ +import * as Papa from 'papaparse'; import { get } from 'svelte/store'; import { ImmutableSet, type MakeToast } from '@mathesar-component-library'; @@ -60,6 +61,13 @@ function getCellText< return formattedValue; } +function serializeTsv(data: string[][]): string { + return Papa.unparse(data, { + delimiter: '\t', + escapeFormulae: true, + }); +} + export interface SheetClipboardStats { cellCount: number; } @@ -101,34 +109,31 @@ export class SheetClipboardHandler< private getCopyContent(): string { const cells = get(this.deps.selection.selectedCells); - let result = ''; const indexedRecords = new Map( this.deps.getRows().map((r) => [r.rowIndex, r.record]), ); const processedColumns = this.deps.getColumnsMap(); const recordSummaries = this.deps.getRecordSummaries(); + const plainTextMatrix: string[][] = []; for (const rowId of this.getRowIds(cells)) { - let isFirstColumn = true; + const plainTextRow: string[] = []; for (const columnId of this.getColumnIds(cells)) { - if (!isFirstColumn) { - result += '\t'; - } if (isCellSelected(cells, { rowIndex: rowId }, { id: columnId })) { - result += getCellText( + const cellText = getCellText( indexedRecords, processedColumns, rowId, columnId, - 'formatted', + 'raw', recordSummaries, ); + plainTextRow.push(cellText); } - isFirstColumn = false; } - result += '\n'; + plainTextMatrix.push(plainTextRow); } this.deps.toast.info(`Copied ${labeledCount(cells.size, 'cells')}.`); - return result; + return serializeTsv(plainTextMatrix); } handleCopy(event: ClipboardEvent): void { From 6724a96ea390e24e0c2d47997077b730a4f58c6d Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Thu, 11 May 2023 22:31:14 +0800 Subject: [PATCH 028/620] add first pass column creation private function --- db/sql/0_msar.sql | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index c812f04182..ff223e3705 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -691,6 +691,47 @@ END; $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; +-- Column creation definition type ----------------------------------------------------------------- + +CREATE TYPE __msar.col_create_def AS ( + name_ text, -- The name of the column to create, quoted. + type_ text, -- The type of the column to create, fully specced with arguments. + not_null boolean, -- A boolean to describe whether the column is nullable or not. + default_ text -- Text SQL giving the default value for the column. +); + + +-- Add columns to table ---------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION +__msar.add_columns(tab_name text, col_defs variadic __msar.col_create_def[]) RETURNS text AS $$/* +Add the given columns to the given table. + +Args: + tab_name: Fully-qualified, quoted table name. + col_defs: The columns to be added. +*/ +DECLARE col_additions text := ''; +DECLARE col_add text; +BEGIN + SELECT string_agg( + CASE + WHEN col.not_null AND col.default_ IS NULL THEN + format('ADD COLUMN %s %s NOT NULL', col.name_, col.type_) + WHEN col.not_null AND col.default_ IS NOT NULL THEN + format('ADD COLUMN %s %s NOT NULL DEFAULT %s', col.name_, col.type_, col.default_) + WHEN col.default_ IS NOT NULL THEN + format('ADD COLUMN %s %s DEFAULT %s', col.name_, col.type_, col.default_) + ELSE + format('ADD COLUMN %s %s', col.name_, col.type_) + END, + ', ' + ) + FROM unnest(col_defs) as col INTO col_additions; + RETURN __msar.exec_ddl('ALTER TABLE %s %s', tab_name, col_additions); +END; +$$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; + ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -- MATHESAR DROP TABLE FUNCTIONS @@ -699,7 +740,7 @@ $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --- Drop table -------------------------------------------------------------------------------- +-- Drop table -------------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION __msar.drop_table(tab_name text, cascade_ boolean, if_exists boolean) RETURNS text AS $$/* From d82ff7bb5d36285a7eb871859bdd6118054b12c6 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Wed, 17 May 2023 18:21:52 +0800 Subject: [PATCH 029/620] add column creation JSON deserialization an processing functions --- db/sql/0_msar.sql | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index ff223e3705..c657942ed5 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -693,6 +693,7 @@ $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; -- Column creation definition type ----------------------------------------------------------------- +DROP TYPE IF EXISTS __msar.col_create_def CASCADE; CREATE TYPE __msar.col_create_def AS ( name_ text, -- The name of the column to create, quoted. type_ text, -- The type of the column to create, fully specced with arguments. @@ -700,9 +701,85 @@ CREATE TYPE __msar.col_create_def AS ( default_ text -- Text SQL giving the default value for the column. ); +-- Column creation raw definition type ------------------------------------------------------------- + +DROP TYPE IF EXISTS __msar.type_options CASCADE; +CREATE TYPE __msar.type_options AS ( + len integer, + pre integer, + sca integer, + + not_null boolean, -- A boolean to describe whether the column is nullable or not. + default_ text -- Text SQL giving the default value for the column. +); + -- Add columns to table ---------------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION +msar.build_type_text(typ_jsonb jsonb) RETURNS text AS $$/* +Turns the given type-describing JSON into a proper string defining a type with arguments + +The input JSON should be of the form + { + "id": + "schema": , + "name": , + "options": { + "length": , + "precision": , + "scale": + "fields": , + "dimensions": + } + "arguments": -- handles custom types + } +*/ +DECLARE + type_string text; +BEGIN + SELECT COALESCE( + typ.id::regtype::text, + msar.get_fully_qualified_object_name(typ.schema, typ.name)::regtype::text, + quote_ident(typ.name)::regtype::text + )::regtype::text || COALESCE( + '(' || topts.length || ')', + ' ' || topts.fields || ' (' || topts.precision || ')', + '(' || topts.precision || ', ' || topts.scale || ')', + '(' || topts.precision || ')', + '' + ) || COALESCE ( + REPEAT('[]', topts.dimensions), + '' + ) + FROM + jsonb_to_record(typ_jsonb) AS typ(id oid, schema text, name text, options jsonb), + jsonb_to_record(typ_jsonb -> 'options') + AS topts(length integer, precision integer, scale integer, fields text, dimensions integer) + INTO type_string; + RETURN type_string; +END; +$$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; + + +CREATE OR REPLACE FUNCTION +msar.process_column_create_jsonb(col_create_jsonb jsonb) RETURNS __msar.col_create_def AS $$/* +Create a __msar.col_create_def from a column creation defining JSON blob. + +Args: + col_create_jsonb: A jsonb object defining a column creation (must have "name" + and "type" keys; "not_null" and "default" keys optional). +*/ +BEGIN + RETURN ( + quote_ident(col_create_jsonb ->> 'name'), + msar.build_type_text(col_create_jsonb -> 'type'), + col_create_jsonb ->> 'not_null', + col_create_jsonb ->> 'default' + )::__msar.col_create_def; +END; +$$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; + CREATE OR REPLACE FUNCTION __msar.add_columns(tab_name text, col_defs variadic __msar.col_create_def[]) RETURNS text AS $$/* Add the given columns to the given table. From 1d7dcf216cb46ca1a46f0a01ec68f0ddc42e2dd4 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Thu, 18 May 2023 15:08:45 +0800 Subject: [PATCH 030/620] add public column adding function --- db/sql/0_msar.sql | 99 +++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 54 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index c657942ed5..222f8b0812 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -701,18 +701,6 @@ CREATE TYPE __msar.col_create_def AS ( default_ text -- Text SQL giving the default value for the column. ); --- Column creation raw definition type ------------------------------------------------------------- - -DROP TYPE IF EXISTS __msar.type_options CASCADE; -CREATE TYPE __msar.type_options AS ( - len integer, - pre integer, - sca integer, - - not_null boolean, -- A boolean to describe whether the column is nullable or not. - default_ text -- Text SQL giving the default value for the column. -); - -- Add columns to table ---------------------------------------------------------------------------- @@ -735,31 +723,25 @@ The input JSON should be of the form "arguments": -- handles custom types } */ -DECLARE - type_string text; -BEGIN - SELECT COALESCE( - typ.id::regtype::text, - msar.get_fully_qualified_object_name(typ.schema, typ.name)::regtype::text, - quote_ident(typ.name)::regtype::text - )::regtype::text || COALESCE( - '(' || topts.length || ')', - ' ' || topts.fields || ' (' || topts.precision || ')', - '(' || topts.precision || ', ' || topts.scale || ')', - '(' || topts.precision || ')', - '' - ) || COALESCE ( - REPEAT('[]', topts.dimensions), - '' - ) - FROM - jsonb_to_record(typ_jsonb) AS typ(id oid, schema text, name text, options jsonb), - jsonb_to_record(typ_jsonb -> 'options') - AS topts(length integer, precision integer, scale integer, fields text, dimensions integer) - INTO type_string; - RETURN type_string; -END; -$$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; +SELECT COALESCE( + typ.id::regtype::text, + msar.get_fully_qualified_object_name(typ.schema, typ.name)::regtype::text, + typ.name::regtype::text +)::regtype::text || COALESCE( + '(' || topts.length || ')', + ' ' || topts.fields || ' (' || topts.precision || ')', + '(' || topts.precision || ', ' || topts.scale || ')', + '(' || topts.precision || ')', + '' +) || COALESCE ( + REPEAT('[]', topts.dimensions), + '' +) +FROM + jsonb_to_record(typ_jsonb) AS typ(id oid, schema text, name text, options jsonb), + jsonb_to_record(typ_jsonb -> 'options') + AS topts(length integer, precision integer, scale integer, fields text, dimensions integer); +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION @@ -770,15 +752,13 @@ Args: col_create_jsonb: A jsonb object defining a column creation (must have "name" and "type" keys; "not_null" and "default" keys optional). */ -BEGIN - RETURN ( - quote_ident(col_create_jsonb ->> 'name'), - msar.build_type_text(col_create_jsonb -> 'type'), - col_create_jsonb ->> 'not_null', - col_create_jsonb ->> 'default' - )::__msar.col_create_def; -END; -$$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; +SELECT ( + quote_ident(col_create_jsonb ->> 'name'), + msar.build_type_text(col_create_jsonb -> 'type'), + col_create_jsonb ->> 'not_null', + col_create_jsonb ->> 'default' +)::__msar.col_create_def; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION __msar.add_columns(tab_name text, col_defs variadic __msar.col_create_def[]) RETURNS text AS $$/* @@ -788,9 +768,7 @@ Args: tab_name: Fully-qualified, quoted table name. col_defs: The columns to be added. */ -DECLARE col_additions text := ''; -DECLARE col_add text; -BEGIN +WITH ca_cte AS ( SELECT string_agg( CASE WHEN col.not_null AND col.default_ IS NULL THEN @@ -803,11 +781,24 @@ BEGIN format('ADD COLUMN %s %s', col.name_, col.type_) END, ', ' - ) - FROM unnest(col_defs) as col INTO col_additions; - RETURN __msar.exec_ddl('ALTER TABLE %s %s', tab_name, col_additions); -END; -$$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; + ) AS col_additions + FROM unnest(col_defs) AS col +) +SELECT __msar.exec_ddl('ALTER TABLE %s %s', tab_name, col_additions) FROM ca_cte; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + + +CREATE OR REPLACE FUNCTION +msar.add_columns(tab_id oid, col_defs jsonb) RETURNS text AS $$/* +TODO +*/ +WITH cols_cte AS ( + SELECT array_agg(msar.process_column_create_jsonb(col)) AS col_create_defs + FROM jsonb_array_elements(col_defs) AS col +) +SELECT __msar.add_columns(__msar.get_relation_name(tab_id), variadic col_create_defs) FROM cols_cte; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- From 5b49d5b2d06dd310bcad91d12eee4f1069d9cb16 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Thu, 18 May 2023 16:02:03 +0800 Subject: [PATCH 031/620] Add string ID column adder public function --- db/sql/0_msar.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 222f8b0812..d865891afd 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -800,6 +800,20 @@ SELECT __msar.add_columns(__msar.get_relation_name(tab_id), variadic col_create_ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; +CREATE OR REPLACE FUNCTION +msar.add_columns(sch_name text, tab_name text, col_defs jsonb) RETURNS text AS $$/* +TODO +*/ +WITH cols_cte AS ( + SELECT array_agg(msar.process_column_create_jsonb(col)) AS col_create_defs + FROM jsonb_array_elements(col_defs) AS col +) +SELECT __msar.add_columns( + msar.get_fully_qualified_object_name(sch_name, tab_name), variadic col_create_defs +) +FROM cols_cte; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -- MATHESAR DROP TABLE FUNCTIONS From f13529f8ee8e3686127e2c55274e7f0bd9af9e78 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Thu, 18 May 2023 23:25:45 +0800 Subject: [PATCH 032/620] add column name generating logic --- db/sql/0_msar.sql | 66 ++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index d865891afd..8bde2409cc 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -153,7 +153,7 @@ $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.get_relation_oid(sch_name text, rel_name text) RETURNS text AS $$/* +msar.get_relation_oid(sch_name text, rel_name text) RETURNS oid AS $$/* Return the OID for a given relation (e.g., table). The relation *must* be in the pg_class table to use this function. @@ -704,6 +704,22 @@ CREATE TYPE __msar.col_create_def AS ( -- Add columns to table ---------------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION +msar.generate_column_name(tab_id oid, base_name text) returns text AS $$/* +TODO +*/ +SELECT base_name || (MAX(attnum) + 1) FROM pg_attribute WHERE attrelid=tab_id; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + +CREATE OR REPLACE FUNCTION +msar.generate_column_name(tab_id oid, modifier integer) returns text AS $$/* +TODO +*/ +SELECT msar.generate_column_name(tab_id, 'Column '); +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + + + CREATE OR REPLACE FUNCTION msar.build_type_text(typ_jsonb jsonb) RETURNS text AS $$/* Turns the given type-describing JSON into a proper string defining a type with arguments @@ -745,21 +761,32 @@ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.process_column_create_jsonb(col_create_jsonb jsonb) RETURNS __msar.col_create_def AS $$/* +msar.process_col_create_arr(tab_id oid, col_create_arr jsonb) RETURNS __msar.col_create_def[] AS $$/* Create a __msar.col_create_def from a column creation defining JSON blob. Args: - col_create_jsonb: A jsonb object defining a column creation (must have "name" - and "type" keys; "not_null" and "default" keys optional). -*/ -SELECT ( - quote_ident(col_create_jsonb ->> 'name'), - msar.build_type_text(col_create_jsonb -> 'type'), - col_create_jsonb ->> 'not_null', - col_create_jsonb ->> 'default' -)::__msar.col_create_def; + tab_id: The OID of the table where we'll create the columns + col_create_arr: A jsonb array defining a column creation (must have "name" and "type" keys; + "not_null" and "default" keys optional). +*/ +WITH attnum_cte AS ( + SELECT MAX(attnum) AS m_attnum FROM pg_attribute WHERE attrelid=tab_id +), col_create_cte AS ( + SELECT ( + COALESCE( + quote_ident(col_create_obj ->> 'name'), + quote_ident('Column ' || (attnum_cte.m_attnum + ROW_NUMBER() OVER ())) + ), + msar.build_type_text(col_create_obj -> 'type'), + col_create_obj ->> 'not_null', + col_create_obj ->> 'default' + )::__msar.col_create_def AS col_create_defs + FROM attnum_cte, jsonb_array_elements(col_create_arr) as col_create_obj +) +SELECT array_agg(col_create_defs) FROM col_create_cte; $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + CREATE OR REPLACE FUNCTION __msar.add_columns(tab_name text, col_defs variadic __msar.col_create_def[]) RETURNS text AS $$/* Add the given columns to the given table. @@ -792,11 +819,9 @@ CREATE OR REPLACE FUNCTION msar.add_columns(tab_id oid, col_defs jsonb) RETURNS text AS $$/* TODO */ -WITH cols_cte AS ( - SELECT array_agg(msar.process_column_create_jsonb(col)) AS col_create_defs - FROM jsonb_array_elements(col_defs) AS col -) -SELECT __msar.add_columns(__msar.get_relation_name(tab_id), variadic col_create_defs) FROM cols_cte; +SELECT __msar.add_columns( + __msar.get_relation_name(tab_id), variadic msar.process_col_create_arr(tab_id, col_defs) +); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; @@ -804,14 +829,7 @@ CREATE OR REPLACE FUNCTION msar.add_columns(sch_name text, tab_name text, col_defs jsonb) RETURNS text AS $$/* TODO */ -WITH cols_cte AS ( - SELECT array_agg(msar.process_column_create_jsonb(col)) AS col_create_defs - FROM jsonb_array_elements(col_defs) AS col -) -SELECT __msar.add_columns( - msar.get_fully_qualified_object_name(sch_name, tab_name), variadic col_create_defs -) -FROM cols_cte; +SELECT msar.add_columns(msar.get_relation_oid(sch_name, tab_name), col_defs); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; ---------------------------------------------------------------------------------------------------- From 6f03c79e3847409e126806c3c5d8c74b6052bb82 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Fri, 19 May 2023 15:16:34 +0800 Subject: [PATCH 033/620] remove unneeded custom args array --- db/sql/0_msar.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 8bde2409cc..63b9439ac6 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -736,7 +736,6 @@ The input JSON should be of the form "fields": , "dimensions": } - "arguments": -- handles custom types } */ SELECT COALESCE( From f8dbd3080965f650c566a82ce7bd89746268b311 Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Mon, 22 May 2023 20:52:04 -0400 Subject: [PATCH 034/620] Rewrite logic to scroll text caret into view --- .../formatted-input/FormattedInput.svelte | 15 +- .../scrollCaretIntoView/README.md | 34 ++ .../scrollCaretIntoView/README.svg | 390 ++++++++++++++++++ .../scrollCaretIntoView/index.ts | 1 + .../scrollCaretIntoView.ts | 108 +++++ .../formatted-input/utils.ts | 162 -------- 6 files changed, 538 insertions(+), 172 deletions(-) create mode 100644 mathesar_ui/src/component-library/formatted-input/scrollCaretIntoView/README.md create mode 100644 mathesar_ui/src/component-library/formatted-input/scrollCaretIntoView/README.svg create mode 100644 mathesar_ui/src/component-library/formatted-input/scrollCaretIntoView/index.ts create mode 100644 mathesar_ui/src/component-library/formatted-input/scrollCaretIntoView/scrollCaretIntoView.ts delete mode 100644 mathesar_ui/src/component-library/formatted-input/utils.ts diff --git a/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte b/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte index edd9719a79..9c00445337 100644 --- a/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte +++ b/mathesar_ui/src/component-library/formatted-input/FormattedInput.svelte @@ -1,11 +1,12 @@
- {#if $currentDatabase && $currentSchemaId} + {#if $currentDatabase && $currentSchema}
From 49b13b2c4373c3a9d0ae983bafd5fd293410539d Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Mon, 29 May 2023 15:05:39 +0800 Subject: [PATCH 051/620] Update dependents tests to use dict --- db/tests/dependents/test_dependents.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/tests/dependents/test_dependents.py b/db/tests/dependents/test_dependents.py index 27e54cde82..2c75ab26d0 100644 --- a/db/tests/dependents/test_dependents.py +++ b/db/tests/dependents/test_dependents.py @@ -92,7 +92,7 @@ def test_self_reference(engine_with_schema, library_tables_oids): # remove when library_without_checkouts.sql is updated and includes self-reference case fk_column = create_column(engine, publishers_oid, {'name': 'Parent Publisher', 'type': PostgresType.INTEGER.id}) pk_column_attnum = get_column_attnum_from_name(publishers_oid, 'id', engine, metadata=get_empty_metadata()) - fk_constraint = ForeignKeyConstraint('Publishers_Publisher_fkey', publishers_oid, [fk_column.column_attnum], publishers_oid, [pk_column_attnum], {}) + fk_constraint = ForeignKeyConstraint('Publishers_Publisher_fkey', publishers_oid, [fk_column['col_id']], publishers_oid, [pk_column_attnum], {}) create_constraint(schema, engine, fk_constraint) publishers_oid = library_tables_oids['Publishers'] @@ -113,7 +113,7 @@ def test_circular_reference(engine_with_schema, library_tables_oids): # remove when library_without_checkouts.sql is updated and includes circular reference case fk_column = create_column(engine, publishers_oid, {'name': 'Top Publication', 'type': PostgresType.INTEGER.id}) publications_pk_column_attnum = get_column_attnum_from_name(publications_oid, 'id', engine, metadata=get_empty_metadata()) - fk_constraint = ForeignKeyConstraint('Publishers_Publications_fkey', publishers_oid, [fk_column.column_attnum], publications_oid, [publications_pk_column_attnum], {}) + fk_constraint = ForeignKeyConstraint('Publishers_Publications_fkey', publishers_oid, [fk_column['col_id']], publications_oid, [publications_pk_column_attnum], {}) create_constraint(schema, engine, fk_constraint) publishers_dependents_graph = get_dependents_graph(publishers_oid, engine, []) From 3bdfd45569bcc3c533b3658ecbbc89c234407f27 Mon Sep 17 00:00:00 2001 From: IamEzio Date: Mon, 29 May 2023 21:16:34 +0530 Subject: [PATCH 052/620] changed datafile model --- mathesar/models/base.py | 2 + mathesar/tests/data/patents.json | 12539 +++++++++++++++++++++++++++++ mathesar/utils/datafiles.py | 34 +- 3 files changed, 12564 insertions(+), 11 deletions(-) create mode 100644 mathesar/tests/data/patents.json diff --git a/mathesar/models/base.py b/mathesar/models/base.py index 5bad2c4301..09694b7b5c 100644 --- a/mathesar/models/base.py +++ b/mathesar/models/base.py @@ -865,10 +865,12 @@ def drop(self): class DataFile(BaseModel): created_from_choices = models.TextChoices("created_from", "FILE PASTE URL") + file_type_choices = models.TextChoices("type", "CSV TSV JSON") file = models.FileField(upload_to=model_utils.user_directory_path) user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, on_delete=models.CASCADE) created_from = models.CharField(max_length=128, choices=created_from_choices.choices) + type = models.CharField(max_length=128, choices=file_type_choices.choices) table_imported_to = models.ForeignKey(Table, related_name="data_files", blank=True, null=True, on_delete=models.SET_NULL) diff --git a/mathesar/tests/data/patents.json b/mathesar/tests/data/patents.json new file mode 100644 index 0000000000..5eb22460e8 --- /dev/null +++ b/mathesar/tests/data/patents.json @@ -0,0 +1,12539 @@ +[ + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12871", + "Patent Number": 0, + "Application SN": "13/033,085", + "Title": "Polyimide Wire Insulation Repair System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14048-1", + "Patent Number": 5694939, + "Application SN": "08/543,093", + "Title": "Autogenic-Feedback Training Exercise Method & System", + "Patent Expiration Date": "10/03/2015" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14231-1", + "Patent Number": 6109270, + "Application SN": "09/017,519", + "Title": "Multimodality Instrument For Tissue Characterization", + "Patent Expiration Date": "02/04/2017" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14231-2DIV", + "Patent Number": 6976013, + "Application SN": "10/874,003", + "Title": "Metrics For Body Sensing System", + "Patent Expiration Date": "06/16/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14231-3", + "Patent Number": 6718196, + "Application SN": "09/652,299", + "Title": "Multimodality Instrument For Tissue Characterization", + "Patent Expiration Date": "02/04/2017" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14275-1", + "Patent Number": 6445390, + "Application SN": "09/226,673", + "Title": "Automated Triangle Geometry Processing For Surface Modeling And Cartesian Grid Generation (CART3D)", + "Patent Expiration Date": "12/24/2018" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14281-1", + "Patent Number": 6606612, + "Application SN": "09/374,491", + "Title": "Aerodynamic Design Using Neural Networks", + "Patent Expiration Date": "08/13/2019" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14281-3", + "Patent Number": 7191161, + "Application SN": "10/637,087", + "Title": "Method For Constructing Composite Response Surfaces By Combining Neural Networks With Polynomial Interpolation Or Estimation Techniques", + "Patent Expiration Date": "11/18/2020" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14359-1", + "Patent Number": 6314362, + "Application SN": "09/498,123", + "Title": "A Direct-To Controller Tool (A Component Of The CTAS Software Suite)", + "Patent Expiration Date": "02/02/2020" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14494-1", + "Patent Number": 6720984, + "Application SN": "09/606,107", + "Title": "Bio-Electric Keyboard/Mouse/Joystick Interface Software/Algorithm", + "Patent Expiration Date": "06/13/2020" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14512-1", + "Patent Number": 6823333, + "Application SN": "09/800,309", + "Title": "Keyword-in-context Search Method And Software For Information Retrieval From Collections Of Text Documents (Quorum/Perilog)", + "Patent Expiration Date": "03/02/2021" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14513-1", + "Patent Number": 6741981, + "Application SN": "09/800,311", + "Title": "Model-based Phrase Search Method And Software For Information Retrieval From Collections Of Text Documents (Quorum/Perilog)", + "Patent Expiration Date": "09/14/2021" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14514-1", + "Patent Number": 6697793, + "Application SN": "09/800,313", + "Title": "Method And Software For Using Implicit Phrase Models To Generate Prominent Phrases Contained In Collections Of Text Documents (Quorum/Perilog)", + "Patent Expiration Date": "03/02/2021" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14515-1", + "Patent Number": 6721728, + "Application SN": "09/800,310", + "Title": "Method And Software For Extracting And Distilling Topically And Situationally Relevant Phrases From Collections Of Text Documents (Quorum/Perilog)", + "Patent Expiration Date": "07/26/2021" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14556-1", + "Patent Number": 7346172, + "Application SN": "09/822470", + "Title": "Spatially-modulated Auditory Alert Having Enhanced Detection", + "Patent Expiration Date": "08/24/2022" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14569-1", + "Patent Number": 7783130, + "Application SN": "11/045,041", + "Title": "Spatial Standard Observer", + "Patent Expiration Date": "03/26/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14569-2", + "Patent Number": 8139892, + "Application SN": "12/807,375", + "Title": "Spatial Standard Observer", + "Patent Expiration Date": "01/24/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14586-1DIV", + "Patent Number": 7293001, + "Application SN": "11/274,744", + "Title": "A Hybrid Neural Network And Support Vector Machine Method For Optimization", + "Patent Expiration Date": "01/07/2022" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14613-1", + "Patent Number": 6858197, + "Application SN": "10/099,247", + "Title": "A Novel Technique That Allows For The Deposition And Patterning Of A Catalyst Onto A Surface For The Growth Of Single-Walled Carbon Nanotubes", + "Patent Expiration Date": "11/30/2019" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14652-1", + "Patent Number": 7375826, + "Application SN": "10/956,517", + "Title": "3D Laser Scanner", + "Patent Expiration Date": "03/25/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14653-1", + "Patent Number": 7702427, + "Application SN": "10/914,783", + "Title": "Future ATM (Air Traffic Management) Concepts Evaluation Tool (FACET)", + "Patent Expiration Date": "07/30/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14653-2", + "Patent Number": 8290696, + "Application SN": "12/694,966", + "Title": "Future ATM (Air Traffic Management) Concepts Evaluation Tool (FACET)", + "Patent Expiration Date": "07/30/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14661-1", + "Patent Number": 7276266, + "Application SN": "10/320,698", + "Title": "A Plasma Apparatus And Process For Functionalization Of Carbon Nanotubes", + "Patent Expiration Date": "12/13/2022" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14661-2", + "Patent Number": 7473436, + "Application SN": "10/828,524", + "Title": "Improved Functionalization Of Carbon Nanotubes", + "Patent Expiration Date": "12/13/2022" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14661-3", + "Patent Number": 7767270, + "Application SN": "11/387,503", + "Title": "Selective Functionalization Of Carbon Nanotubes Based Upon Distance Traveled", + "Patent Expiration Date": "11/05/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14662-1", + "Patent Number": 6968338, + "Application SN": "10/232,975", + "Title": "Advanced XML Database Integration Technique For Managing Unstructured Documents (NETMARK) (Part of NTTS Suite)", + "Patent Expiration Date": "07/18/2023" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14682-2", + "Patent Number": 7333735, + "Application SN": "10/885,533", + "Title": "Communication Using VCSEL Laser Array", + "Patent Expiration Date": "11/03/2023" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14710-1", + "Patent Number": 7231329, + "Application SN": "10/706,478", + "Title": "Elimination Of Parameter Input Requirement For Elliptic Grid Generation Methods In Engineering", + "Patent Expiration Date": "03/11/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14733-1", + "Patent Number": 6972056, + "Application SN": "10/135,013", + "Title": "An Environmentally Compatible Method To Purify Carbon Nanotubes", + "Patent Expiration Date": "01/03/2023" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14743-1", + "Patent Number": 7767305, + "Application SN": "10/758611", + "Title": "High-Efficiency Tantalum-Based Ceramics (HETC)", + "Patent Expiration Date": "01/14/2024" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-008-014", + "Patent Number": 8047472, + "Application SN": "12/45,970", + "Title": "IMPROVED RAM BOOSTER", + "Patent Expiration Date": "03/11/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14744-1US", + "Patent Number": 7816491, + "Application SN": "10/494,853", + "Title": "Ordered Biological Nanostructures Formed From Chaperonin Polypeptides", + "Patent Expiration Date": "05/06/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14744-2", + "Patent Number": 7795388, + "Application SN": "11/194,991", + "Title": "A Versatile Platform For Nanotechnology Based On Circular Permutations Of Chaperonin Protein", + "Patent Expiration Date": "05/06/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14940-1", + "Patent Number": 7135172, + "Application SN": "10/238,515", + "Title": "Bucky Paper As An Artificial Support Membrane In Retinal Cell Transplantation", + "Patent Expiration Date": "06/12/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14941-1", + "Patent Number": 6755530, + "Application SN": "10/198,672", + "Title": "Carbon Nanotubes As A Prototype Interface For Retinal Cell Recording And Stimulation (Vision Chip)", + "Patent Expiration Date": "10/18/2022" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14950-1", + "Patent Number": 7596416, + "Application SN": "10/928,874", + "Title": "Program Management Tool (PMT) Also Known As Business Intelligence (BI)", + "Patent Expiration Date": "07/22/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14950-2", + "Patent Number": 8224472, + "Application SN": "12/211,439", + "Title": "Enhanced Project Management Tool", + "Patent Expiration Date": "10/20/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-14970-1", + "Patent Number": 7129857, + "Application SN": "10/789,049", + "Title": "Intelligent Weather Agent", + "Patent Expiration Date": "07/20/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15040-1", + "Patent Number": 8200486, + "Application SN": "10/457,696", + "Title": "Sub Auditory Speech Recognition Based On Electromyographic Signals", + "Patent Expiration Date": "09/14/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15041-2", + "Patent Number": 7206674, + "Application SN": "10/923,156", + "Title": "Information Display System For Atypical Flight Phase", + "Patent Expiration Date": "05/21/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15042-2", + "Patent Number": 7217650, + "Application SN": "10/816,576", + "Title": "Metallic Nanowire Interconnections For Integrated Circuit Fabrication", + "Patent Expiration Date": "03/11/2023" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15058-1", + "Patent Number": 7383238, + "Application SN": "10/789,029", + "Title": "Inductive Monitoring System - System Health Monitoring Software That Learns System Behavior From Data (IMS)", + "Patent Expiration Date": "03/12/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15073-1", + "Patent Number": 7590606, + "Application SN": "10/703,039", + "Title": "InvestigationOrganizer: Information Storage, Modeling And Visualization Support For Accident/Mishap Investigations (Part Of A Suite Of Software That Includes ARC-15069, ARC-15070 And ARC-15073)", + "Patent Expiration Date": "04/30/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15088-1", + "Patent Number": 7070923, + "Application SN": "10/608,884", + "Title": "Carbon Nanotube Bucky Paper Cages For Immune Shielding Of Cells And Tissue For Transplantation", + "Patent Expiration Date": "09/20/2023" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15101-1", + "Patent Number": 7113265, + "Application SN": "10/808,704", + "Title": "Sample Handling Device For X-ray Diffraction Instruments", + "Patent Expiration Date": "03/17/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15157-1", + "Patent Number": 7286573, + "Application SN": "10/923,160", + "Title": "A Method Of Converting Quantum Wells From Type-II To Type-I And Of Enhancing Interband Optical Gain", + "Patent Expiration Date": "03/11/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15171-1", + "Patent Number": 7650232, + "Application SN": "11/239,456", + "Title": "Trajectory Specification For High-Capacity Air Traffic Control", + "Patent Expiration Date": "05/25/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15173-1", + "Patent Number": 7273095, + "Application SN": "10/825,795", + "Title": "Embedded Carbon Nanotube Array As High Performance Thermal Conductors", + "Patent Expiration Date": "03/11/2023" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15173-2", + "Patent Number": 7784531, + "Application SN": "11/900,131", + "Title": "Nanoengineered Thermal Materials Based On Carbon Nanotube Array Composites", + "Patent Expiration Date": "02/16/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15201-1", + "Patent Number": 7381459, + "Application SN": "10/779,504", + "Title": "Toughened Uni-piece Fibrous Reduced Oxidation Ceramic (TUFROC) Light-Weight Thermal Protection System For Use On Space Vehicles During Atmospheric Entry At Hypersonic Speed", + "Patent Expiration Date": "02/12/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15201-2", + "Patent Number": 7314648, + "Application SN": "10/911,747", + "Title": "Toughened Uni-piece Fibrous Reinforced Oxidation-Resistant Composite (TUFROC)", + "Patent Expiration Date": "02/12/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15204-1", + "Patent Number": 7949472, + "Application SN": "10/885,537", + "Title": "Nanopore Pipetts For Structural Characterization Of Single Polymeric Biomelecules", + "Patent Expiration Date": "01/14/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15204-1DIV", + "Patent Number": 8494782, + "Application SN": "13/092,048", + "Title": "Nanopore Pipetts For Structural Characterization Of Single Polymeric Biomelecules", + "Patent Expiration Date": "06/24/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15205-1", + "Patent Number": 7939734, + "Application SN": "10/873,996", + "Title": "The Electrochemical Biosensors Using Carbon Nanotube Nanoelectrode Arrays", + "Patent Expiration Date": "06/14/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15312-1", + "Patent Number": 7672969, + "Application SN": "11/513,429", + "Title": "Context Based Configuration Management Concept", + "Patent Expiration Date": "08/25/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15314-1", + "Patent Number": 7718223, + "Application SN": "11/007,913", + "Title": "Provision Of Carbon Nanotube Arrays Of Variable Density For IC Hot Spot Control", + "Patent Expiration Date": "02/12/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15314-2", + "Patent Number": 7704547, + "Application SN": "11/472,516", + "Title": "Carbon Nanotube Growth Density Control", + "Patent Expiration Date": "12/07/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15315-1", + "Patent Number": 7378963, + "Application SN": "11/239,449", + "Title": "Reconfigurable Auditory-visual Display For Multi-channel Control Center And Rescue Communications", + "Patent Expiration Date": "01/06/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15356-2", + "Patent Number": 7161501, + "Application SN": "11/66,650", + "Title": "Display Of Aircraft Energy State For Flight Operations Quality Assurance (FOQA) Programs", + "Patent Expiration Date": "09/22/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15356-3", + "Patent Number": 7212135, + "Application SN": "11/066649", + "Title": "Real-Time Analysis And Display Of Aircraft Approach Maneuvers", + "Patent Expiration Date": "09/22/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15370-1", + "Patent Number": 7698274, + "Application SN": "10/956,524", + "Title": "Selective Access And Editing In A Database (Part of NTTS Suite)", + "Patent Expiration Date": "03/18/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15392-1", + "Patent Number": 7313475, + "Application SN": "11/053,713", + "Title": "Delay Banking: Collaborative Decision Making For Airspace-user Priority In Tactical Flow Restrictions", + "Patent Expiration Date": "04/04/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15404-1", + "Patent Number": 7288490, + "Application SN": "11/009,854", + "Title": "Use Of A Single Electrode To Orient Carbon Nanotube Growth", + "Patent Expiration Date": "12/07/2024" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15437-1", + "Patent Number": 7438422, + "Application SN": "11/340,816", + "Title": "Low Cost Portable Planetarium Imaging System", + "Patent Expiration Date": "05/14/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15443-1", + "Patent Number": 7531775, + "Application SN": "11/251,006", + "Title": "A Tracking Sunphotometer Without Moving Parts", + "Patent Expiration Date": "01/31/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15460-1", + "Patent Number": 7426848, + "Application SN": "11/203,576", + "Title": "Discharge Based Gas Sensor Array Using Self-Oriented Regular Vertical Array Of Carbon Nanotubes", + "Patent Expiration Date": "08/05/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15462-1", + "Patent Number": 7574338, + "Application SN": "11/340002", + "Title": "Finite-Difference Simulation And Visualization Of Elastodynamics In Time-Evolving Generalized Curvilinear Coordinates", + "Patent Expiration Date": "07/29/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15487-1", + "Patent Number": 7796026, + "Application SN": "11/111,620", + "Title": "Electronic Firefighter Escape Trail", + "Patent Expiration Date": "06/04/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15506-1", + "Patent Number": 7529633, + "Application SN": "11/203,589", + "Title": "Applications Of Carbon Nanotube Hold-Off Voltages", + "Patent Expiration Date": "10/22/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15519-1", + "Patent Number": 7574357, + "Application SN": "11/169,265", + "Title": "Security Applications For Subvocal Speech", + "Patent Expiration Date": "11/09/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15566-1", + "Patent Number": 7801687, + "Application SN": "11/178,079", + "Title": "Gas Sensors Based on Coated and Doped Carbon Nanotubes", + "Patent Expiration Date": "05/26/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15566-2", + "Patent Number": 8000903, + "Application SN": "11/416,505", + "Title": "Coated Or Doped Carbon Nanotube Network Sensors As Affected By Environmental Parameters And Elapsed Time", + "Patent Expiration Date": "09/15/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15566-3", + "Patent Number": 7875455, + "Application SN": "11/489,803", + "Title": "Nanotechnology Sensors For Determination Of Chemical Substances In An Oil Reservoir", + "Patent Expiration Date": "12/17/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15566-5", + "Patent Number": 7623972, + "Application SN": "11/591,630", + "Title": "Detection Of Presence Of Chemical Precursors", + "Patent Expiration Date": "07/08/2025" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15575-1", + "Patent Number": 7473930, + "Application SN": "11/173,053", + "Title": "Use Of Carbon Nanotube Arrays For Display Purposes", + "Patent Expiration Date": "10/24/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15578-2", + "Patent Number": 7873181, + "Application SN": "11/525,600", + "Title": "Visual Signal Sensor Organ Replacement: Implementation", + "Patent Expiration Date": "05/19/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15606-1", + "Patent Number": 7431242, + "Application SN": "11/265,324", + "Title": "Aero Assist Capsule Vehicle Geometry For Atmospheric Entry", + "Patent Expiration Date": "04/01/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15684-1", + "Patent Number": 7516890, + "Application SN": "11/444,807", + "Title": "InterIssued Inventory Monitoring", + "Patent Expiration Date": "05/25/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15714-1", + "Patent Number": 7869029, + "Application SN": "11/398,733", + "Title": "Light Collimator And Monitor", + "Patent Expiration Date": "11/11/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15782-1", + "Patent Number": 7549338, + "Application SN": "11/973998", + "Title": "Nanotechnology Sensor Of Presence And Concentration Of A Target Molecule", + "Patent Expiration Date": "09/28/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15796-1", + "Patent Number": 8675922, + "Application SN": "13/444,777", + "Title": "Motion Blur Evaluation Techniques", + "Patent Expiration Date": "08/31/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15870-1", + "Patent Number": 7655497, + "Application SN": "11/513,431", + "Title": "Growth Method For Phase Change Nanostructures", + "Patent Expiration Date": "08/16/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15890-1", + "Patent Number": 7655145, + "Application SN": "11/543,275", + "Title": "Water Treatment Systems For Long Space Flight Use", + "Patent Expiration Date": "11/05/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15900-1", + "Patent Number": 7490367, + "Application SN": "11/526,175", + "Title": "Wet Waste Drying Bag", + "Patent Expiration Date": "09/20/2026" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15903-1DIV", + "Patent Number": 8409491, + "Application SN": "13/215,206", + "Title": "In-situ Formation Of Reinforcement Phases In Ceramic Composites And Ultra High Temperature Ceramic Composites For Advanced TPS Applications", + "Patent Expiration Date": "09/28/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15967-1", + "Patent Number": 7635420, + "Application SN": "11/645,267", + "Title": "Dielectrophoresis-Based Particle Sensor Using Nanoelectrode Arrays", + "Patent Expiration Date": "06/06/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-15977-1", + "Patent Number": 0, + "Application SN": "12/100,378", + "Title": "Artificial Immune System Based Approach For Air Combat Maneuvering", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-15981-4", + "Patent Number": "", + "Application SN": "13/463,780", + "Title": "Chaperonin-based Templates for Pseudo-cellulosomes with Multiple Enzymes Present", + "Patent Expiration Date": "07/19/2027" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15983-1", + "Patent Number": 7923709, + "Application SN": "12/273,502", + "Title": "Radiation Shielding System Using A Composite Of Hydrogen-Rich Polymers Loaded With Carbon Nanotubes", + "Patent Expiration Date": "09/30/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16478-1", + "Patent Number": "", + "Application SN": "14/191,246", + "Title": "Real Time PIREPs Using Audio Twitter", + "Patent Expiration Date": "02/26/1934" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-15995-1", + "Patent Number": 8290246, + "Application SN": "11/958,296", + "Title": "A Method To Measure The Recession Of Ablative Materials In Arc-jet Testing Using Digital Stereo-photogrammetry And Image Cross-correlation", + "Patent Expiration Date": "07/01/1931" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16013-1", + "Patent Number": 7968054, + "Application SN": "11/715,785", + "Title": "Wireless Chemical Sensor Data Transmission System Based On Nanotechnology", + "Patent Expiration Date": "10/03/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16018-1", + "Patent Number": 7662459, + "Application SN": "12/175,379", + "Title": "Atmospheric Entry Heat Shield Employing Cured Thermal Protection Material Blocks Bonded In A Large-Cell Honeycomb Matrix", + "Patent Expiration Date": "07/17/2028" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16132-1", + "Patent Number": 0, + "Application SN": "14/091,250", + "Title": "Surface Densification Of Phenolic Impregnated Carbon Ablator (PICA)", + "Patent Expiration Date": "11/26/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16133-1", + "Patent Number": 8069001, + "Application SN": "12/319,918", + "Title": "Hollow AErothermal Ablation And Temperature (HEAT) Isotherm Sensor For Tracking Isotherm Through The TPS Material", + "Patent Expiration Date": "10/09/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16211-1", + "Patent Number": 0, + "Application SN": "13/896,284", + "Title": "Low Cost Optical Fiber Solar Cell Configurations", + "Patent Expiration Date": "05/16/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16235-1", + "Patent Number": 8285659, + "Application SN": "12/543,411", + "Title": "Modeling-Error-Driven Performance-Seeking Direct Adaptive Control", + "Patent Expiration Date": "11/18/1930" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16273-1", + "Patent Number": 0, + "Application SN": "12/454,024", + "Title": "Decomposition Technique for Remaining Useful Life Prediction", + "Patent Expiration Date": "11/18/1930" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16280-1", + "Patent Number": 8409845, + "Application SN": "12/316,557", + "Title": "Offshore membrane enclosures for dewatering Algae (OMEDA)", + "Patent Expiration Date": "10/15/1931" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16298-1", + "Patent Number": 8333810, + "Application SN": "12/398,854", + "Title": "Nanotechnology-Based Supercapacitor", + "Patent Expiration Date": "06/29/1930" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16320-1", + "Patent Number": 8332342, + "Application SN": "12/622,407", + "Title": "Battery Prognostics using Particle Filtering Techniques", + "Patent Expiration Date": "02/05/1931" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16331-1", + "Patent Number": 8408707, + "Application SN": "12/428,441", + "Title": "System to estimate visual acuity from wavefront aberrations", + "Patent Expiration Date": "05/29/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16334-1", + "Patent Number": 8244477, + "Application SN": "12/478,667", + "Title": "Estimation of Growth Stage and Growth Rate for Algae", + "Patent Expiration Date": "06/04/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16337-1", + "Patent Number": 0, + "Application SN": "13/793,998", + "Title": "Method and Device for Biometric Subject Verification and Identification Based Upon electrocardiographic signals", + "Patent Expiration Date": "03/11/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16340-1", + "Patent Number": 0, + "Application SN": "13/645,284", + "Title": "Method for formation and manufacture of carbon nanotube mesh bucky paper capsules for transplantation of cells and tissue and implantation of medical devices", + "Patent Expiration Date": "10/04/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16342-1", + "Patent Number": 8412469, + "Application SN": "12/698,996", + "Title": "Advanced Sensor Technology for Algal Biotechnology (ASTAB)", + "Patent Expiration Date": "12/16/1930" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16348-1", + "Patent Number": "", + "Application SN": "13/109,954", + "Title": "Co-Optimized Blunt-Body ReEntry Vehicle Aerothermodynamic Parametric Shape and Multi-Discipline Optimization Design Process", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16351-1", + "Patent Number": 8498756, + "Application SN": "13/213,022", + "Title": "Hovercraft Landing System", + "Patent Expiration Date": "12/07/1931" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16370-1", + "Patent Number": 8375675, + "Application SN": "12/574,493", + "Title": "Self Aligning Lug for adapting carbon fiber rods to a bolted metallic connection", + "Patent Expiration Date": "05/07/1931" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16372-1", + "Patent Number": 0, + "Application SN": "13/794,061", + "Title": "Inexpensive Cooling Systems for Devices", + "Patent Expiration Date": "03/11/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16373-1", + "Patent Number": 8489181, + "Application SN": "12/319,220", + "Title": "Heart Electrical Actions as Biometric Indicia", + "Patent Expiration Date": "04/29/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16405-1", + "Patent Number": 0, + "Application SN": "14/091,236", + "Title": "Nanowire based piezoelectric power generation", + "Patent Expiration Date": "11/26/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Issued", + "Case Number": "ARC-16407-1", + "Patent Number": 8337208, + "Application SN": "12/622,374", + "Title": "Content Analysis to Detect High Stress in Oral Interviews and Text Documents", + "Patent Expiration Date": "05/26/1931" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16419-1", + "Patent Number": 0, + "Application SN": "13/317,034", + "Title": "Strobing to Mitigate Vibration for Display Legibility", + "Patent Expiration Date": "10/05/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16450-1CIP", + "Patent Number": 0, + "Application SN": "13/720,898", + "Title": "Distributed Prognostics and Health Management with a Wireless Network Architecture", + "Patent Expiration Date": "05/05/2029" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16456-1", + "Patent Number": "", + "Application SN": "13/480,917", + "Title": "FABRICATION OF NANOPIPETTE ARRAY FOR BIOSENSING", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16461-1", + "Patent Number": "", + "Application SN": "13/956,218", + "Title": "Solar Powered CO2 Conversions with Thin Film Devices", + "Patent Expiration Date": "07/31/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16466-1", + "Patent Number": "", + "Application SN": "14/010,322", + "Title": "Combined HETC/ROCCI TPS Material for Temperatures Up To T=3200 F", + "Patent Expiration Date": "08/26/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16467-1", + "Patent Number": "", + "Application SN": "13/615,202", + "Title": "ODVEC: Outlier Detection Via Estimating Clusters", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16607-1", + "Patent Number": "", + "Application SN": "13/658,749", + "Title": "An Approach to Make Flexible Ablators that are Flexible Char Formers", + "Patent Expiration Date": "10/23/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16621-1", + "Patent Number": "", + "Application SN": "13/472,283", + "Title": "Transformable Hypersonic Aerodynamic Decelerator", + "Patent Expiration Date": "12/04/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16644-1", + "Patent Number": "", + "Application SN": "13/648,197", + "Title": "Variable Camber Continuous Aerodynamic Control Surfaces and Methods for Active Wing Shaping Control", + "Patent Expiration Date": "10/09/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16646-1", + "Patent Number": "", + "Application SN": "13/485,721", + "Title": "A method to produce copper nanowires for interconnect applications", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16661-1", + "Patent Number": "", + "Application SN": "13/444,789", + "Title": "Video acuity measurement system", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16697-1", + "Patent Number": "", + "Application SN": "13/956,929", + "Title": "NTTS Search and Reporting (Part of NTTS Suite)", + "Patent Expiration Date": "08/01/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16707-1", + "Patent Number": "", + "Application SN": "13/438,793", + "Title": "Ectomycorrhizal mediated remediaiton of phenolic-based contamination through use of specifically adapted ectomycorrhizal fungi and enzyme enhancement through partial defoliation of the host.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16707-1CIP", + "Patent Number": "", + "Application SN": "13/854,620", + "Title": "Ectomycorrhizal mediated remediaiton of phenolic-based contamination through use of specifically adapted ectomycorrhizal fungi and enzyme enhancement through partial defoliation of the host.", + "Patent Expiration Date": "04/03/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16732-1", + "Patent Number": "", + "Application SN": "13/573,924", + "Title": "NanoSat Launch Adapter System (NLAS)", + "Patent Expiration Date": "03/14/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16733-1", + "Patent Number": "", + "Application SN": "13/535,884", + "Title": "Habitat Water Wall for Water, Solids, and Atmosphere Recycle and Reuse", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16752-1", + "Patent Number": "", + "Application SN": "14/179,401", + "Title": "Fuel-Efficient, Airport-Friendly, Multi-Speed Transport Aircraft Configuration with Novel Structural Approach", + "Patent Expiration Date": "02/12/1934" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16811-1", + "Patent Number": "", + "Application SN": "13/544,752", + "Title": "Compliant electrode and composite materials for piezoelectric wind and mechanical energy conversions", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16812-1", + "Patent Number": "", + "Application SN": "13/783,112", + "Title": "Graphene composite materials for supercapacitor electrodes", + "Patent Expiration Date": "03/01/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16833-1", + "Patent Number": "", + "Application SN": "13/747,875", + "Title": "Flight Deck Predictive Weather Display and Decision Support Interface", + "Patent Expiration Date": "01/23/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16844-1", + "Patent Number": "", + "Application SN": "13/662,346", + "Title": "Adaptive control and disturbance rejection of non-minimum phase plants using residual mode filters", + "Patent Expiration Date": "10/26/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16846-1", + "Patent Number": "", + "Application SN": "13/707,546", + "Title": "Dynamic Weather Routes Tool", + "Patent Expiration Date": "12/06/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16892-1A", + "Patent Number": "", + "Application SN": "13/929,646", + "Title": "The Surface-Adhering Bioreactor (SABR): A novel microbial cell cultivation platform", + "Patent Expiration Date": "06/27/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16902-1", + "Patent Number": "", + "Application SN": "13/725,475", + "Title": "Nanosensors for medical diagnosis", + "Patent Expiration Date": "12/21/1932" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16916-1", + "Patent Number": "", + "Application SN": "13/956,736", + "Title": "A Method for Improving Control Systems with Normalized Adaptation by Optimal Control Modification", + "Patent Expiration Date": "08/01/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16924-1", + "Patent Number": "", + "Application SN": "14/010,355", + "Title": "Aluminoborosilicate Supplement for Thermal Protection of a Re-entrant Vehicle", + "Patent Expiration Date": "08/26/1933" + }, + { + "Center": "NASA Ames Research Center", + "Status": "Application", + "Case Number": "ARC-16942-2", + "Patent Number": "", + "Application SN": "13/659,739", + "Title": "A new family of low density flexible ablators", + "Patent Expiration Date": "10/24/1932" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-001-049", + "Patent Number": 7180943, + "Application SN": "10/113,637", + "Title": "Adaptive Lossless Data Compression", + "Patent Expiration Date": "03/26/2022" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-005-031", + "Patent Number": 7407131, + "Application SN": "11/288,052", + "Title": "Sound Shield", + "Patent Expiration Date": "10/31/2025" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-006-001", + "Patent Number": 7431243, + "Application SN": "11/227,325", + "Title": "Algorithms For Autonomous Soaring", + "Patent Expiration Date": "02/27/2026" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-006-002", + "Patent Number": 0, + "Application SN": "11/422,554", + "Title": "Air Breathing,Reusable, Vertical Launch, Vertical Landing, First Stage Launch System with Off-the-Shelf Second Stage - Ram Booster", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-006-005", + "Patent Number": 7711455, + "Application SN": "11/463,485", + "Title": "Propulsion Controlled Aircraft Computer (PCAC)", + "Patent Expiration Date": "08/09/2026" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-006-024", + "Patent Number": 7520176, + "Application SN": "11/567,118", + "Title": "Method for Real-Time Structure Shape Sensing", + "Patent Expiration Date": "12/05/2026" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-006-045", + "Patent Number": 0, + "Application SN": "11/682,969", + "Title": "METHOD FOR REDUCING THE REFRESH RATE OF FIBER BRAGG GRATING SENSORS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-008-001", + "Patent Number": 8145366, + "Application SN": "12/138,747", + "Title": "Real-time Interactive Sonic Boom Display", + "Patent Expiration Date": "04/28/2030" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-008-023", + "Patent Number": 7715994, + "Application SN": "12/191,734", + "Title": "IMPROVED PROCESS FOR USING SURFACE STRAIN MEASUREMENTS TO OBTAIN OPERATIONAL LOADS FOR COMPLEX STRUCTURES", + "Patent Expiration Date": "08/14/2028" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-009-008", + "Patent Number": 0, + "Application SN": "12/718034", + "Title": "Continental Digital Elevation Map Compression and Decompression Software", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-009-026", + "Patent Number": 8447443, + "Application SN": "13/367990", + "Title": "A New Peak-Seeking Control Method", + "Patent Expiration Date": "02/07/2032" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-010-042", + "Patent Number": "", + "Application SN": "13/463246", + "Title": "An apparatus and a method to eliminate polarization-induced fading from multiple fiber-optics strain sensors via signal-processing under polarization diversity detection scheme", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-011-002", + "Patent Number": "", + "Application SN": "13/759,847", + "Title": "OPTICAL WAVEGUIDE BRAGG GRATING WAVELENGTH SHIFT BY LIGHT INTERACTION WITH ACTIVE MATERIAL", + "Patent Expiration Date": "02/05/2033" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-011-015", + "Patent Number": "", + "Application SN": "14/106947", + "Title": "In-situ three-dimensional shape rendering from strain values obtained through optical fiber sensors", + "Patent Expiration Date": "05/31/2032" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-012-005", + "Patent Number": "", + "Application SN": "13/759210", + "Title": "Method and apparatus of multiplexing and acquiring data from multiple optical fibers using a single data channel of an optical frequency-domain reflectrometry (OFDR) system (Revised)", + "Patent Expiration Date": "02/05/2033" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-012-006", + "Patent Number": "", + "Application SN": "13/733364", + "Title": "A Novel Approach to Liquid Level Sensing Using Fiber Bragg Grating Technology", + "Patent Expiration Date": "01/03/2033" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Application", + "Case Number": "DRC-012-011", + "Patent Number": "", + "Application SN": "13/573920", + "Title": "Air Launch From A Towed Aircraft", + "Patent Expiration Date": "07/05/2032" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-096-055", + "Patent Number": 6126111, + "Application SN": "09/112,067", + "Title": "Emergency Flight Control System Using One Engine And Fuel Transfer", + "Patent Expiration Date": "07/08/2018" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-097-021", + "Patent Number": 6102330, + "Application SN": "08/905,777", + "Title": "Emergency Aircraft Lateral Controller Using Existing (non-modified) Digital Engine Computers During A System Failure For The Purpose Of Safe Landing", + "Patent Expiration Date": "07/29/2017" + }, + { + "Center": "NASA Armstrong Flight Research Center", + "Status": "Issued", + "Case Number": "DRC-098-001", + "Patent Number": 6216063, + "Application SN": "09/74,024", + "Title": "A Flutterometer Flight Test Tool", + "Patent Expiration Date": "05/06/2018" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-13378-1", + "Patent Number": 0, + "Application SN": "07/710,633", + "Title": "SPLINE-LOCKING PAYLOAD FASTENER", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13802-1", + "Patent Number": 6584874, + "Application SN": "08/673,859", + "Title": "USING A 3-D SPRAG IN RACHETING TOOLS BASED ON PAT. NO. 5,482-144", + "Patent Expiration Date": "07/02/2016" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13817-1", + "Patent Number": 5983162, + "Application SN": "08/872,586", + "Title": "Empirical Mode Decomposition Method And Hilbert Spectral Analysis Algorithms", + "Patent Expiration Date": "06/10/2017" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13817-2", + "Patent Number": 6631325, + "Application SN": "09/82,523", + "Title": "COMPUTER IMPLEMENTED EMPIRICAL MODE DECOMPOSITION METHOD APPARATUS AND ARTICLE OF MANUFACTURE UTILIZING CURVATURE EXTREMA", + "Patent Expiration Date": "06/10/2017" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13817-3", + "Patent Number": 6381559, + "Application SN": "09/282,424", + "Title": "Empirical Mode Decomposition Apparatus, Method, And Article Of Manufacture For Analyzing Biological Signals And Performing Curve Fitting", + "Patent Expiration Date": "03/31/2019" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13817-4", + "Patent Number": 6862558, + "Application SN": "10/73,957", + "Title": "Empirical Mode Decomposition For Analyzing Acoustical Signals", + "Patent Expiration Date": "02/13/2022" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13817-5", + "Patent Number": 6738734, + "Application SN": "10/11,206", + "Title": "Empirical Mode Decomposition Apparatus, Method And Article Of Manufacture For Analyzing Biological Signals And Performing Curve Fitting", + "Patent Expiration Date": "06/10/2017" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13905-1", + "Patent Number": 6640949, + "Application SN": "10/95,343", + "Title": "1-Way Bearing", + "Patent Expiration Date": "03/01/2022" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13909-1", + "Patent Number": 6311130, + "Application SN": "09/150,671", + "Title": "Computer Implemented Empirical Mode Decomposition Method, Apparatus, And Article Of Manufacture For Two-Dimensional Signals", + "Patent Expiration Date": "09/10/2018" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-13985-1", + "Patent Number": 6566854, + "Application SN": "09/646,161", + "Title": "Active Antenna Combined With Non-Ferrous Current Probe.", + "Patent Expiration Date": "09/12/2020" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14064-1", + "Patent Number": 6648522, + "Application SN": "09/804,646", + "Title": "Universal Fiber Optic Connector Polishing Fixture With Precision Alignment Capability", + "Patent Expiration Date": "03/13/2021" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14207-1", + "Patent Number": 6626792, + "Application SN": "09/799,872", + "Title": "Gear Bearings", + "Patent Expiration Date": "03/03/2021" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14209-1", + "Patent Number": 6293803, + "Application SN": "09/501,412", + "Title": "Stress Relieved Zee Electrical Interconnect", + "Patent Expiration Date": "02/09/2020" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14213-1", + "Patent Number": 6760487, + "Application SN": "09/550,254", + "Title": "Estimated Spectrum Adaptive Postfilter (ESAP) And The Iterative Prepost Filtering (IPF) Algorithms", + "Patent Expiration Date": "04/14/2020" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14236-1", + "Patent Number": 6538796, + "Application SN": "09/541,680", + "Title": "MEMS Devices For Spacecraft Thermal Control Applications", + "Patent Expiration Date": "03/31/2020" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14302-1", + "Patent Number": 6782124, + "Application SN": "09/729,138", + "Title": "Extension Of The Empirical Mode Decomposition Method To A Time Series Of 2-Dimensional Grid Maps", + "Patent Expiration Date": "11/29/2020" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14305-1", + "Patent Number": 6895115, + "Application SN": "09/839,147", + "Title": "Method For Recursive Implementation Of Hierarchical Segmentation", + "Patent Expiration Date": "04/23/2021" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14389-1", + "Patent Number": 7543274, + "Application SN": "10/789,028", + "Title": "Deriving Formal Specifications And Code From Scenarios", + "Patent Expiration Date": "02/25/2024" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14393-1", + "Patent Number": 7145739, + "Application SN": "10/385,166", + "Title": "Light Weight Optical Mirrors Formed In Single Crystal Silicon", + "Patent Expiration Date": "03/06/2023" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14413-1", + "Patent Number": 7255483, + "Application SN": "10/93,621", + "Title": "Thrust Rollers", + "Patent Expiration Date": "03/01/2022" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14435-1", + "Patent Number": 6740224, + "Application SN": "10/173,533", + "Title": "Innovative Manufacturing Procedure For Low Cost And High Quality Carbon Nanotubes", + "Patent Expiration Date": "06/11/2022" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14480-2", + "Patent Number": 7762155, + "Application SN": "11/444,808", + "Title": "Gear Bearings", + "Patent Expiration Date": "05/25/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14561-1", + "Patent Number": 7207245, + "Application SN": "11/174,454", + "Title": "Screw-Locking Wrench", + "Patent Expiration Date": "06/30/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14562-1", + "Patent Number": 7504921, + "Application SN": "11/543,278", + "Title": "Stepping Flextures", + "Patent Expiration Date": "09/29/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14601-1", + "Patent Number": 7008605, + "Application SN": "10/292,952", + "Title": "Method For Manufacturing High Quality Carbon Nanotubes", + "Patent Expiration Date": "11/08/2022" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14603-1", + "Patent Number": 7544146, + "Application SN": "11/122,201", + "Title": "Anti-Backlash Gear-Bearings", + "Patent Expiration Date": "05/02/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14608-1", + "Patent Number": 6990436, + "Application SN": "10/729,579", + "Title": "Time Frequency Analysis Based On Extrema Sifting", + "Patent Expiration Date": "11/28/2023" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14616-1", + "Patent Number": 7248342, + "Application SN": "10/730,195", + "Title": "Conceptual Design Of A 3D Imaging Lidar For High-Resolution Mapping Of The Surface Topography Of Moons Or Planets From Space", + "Patent Expiration Date": "12/05/2023" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14657-1", + "Patent Number": 7512568, + "Application SN": "11/109,400", + "Title": "Evolvable Neural Software System", + "Patent Expiration Date": "04/08/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14666-1", + "Patent Number": 6775600, + "Application SN": "10/267,092", + "Title": "Systems And Methods For Determining Spacecraft Orientation", + "Patent Expiration Date": "10/07/2022" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14673-1", + "Patent Number": 6901353, + "Application SN": "10/615,365", + "Title": "Normalized Amplitude Hilbert Transform (NAHT): A New Algorithm For Computing Instantaneous Frequency", + "Patent Expiration Date": "07/08/2023" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14683-1", + "Patent Number": 8480826, + "Application SN": "11/736,874", + "Title": "Specular Coatings For Composite Structures", + "Patent Expiration Date": "04/18/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14762-1", + "Patent Number": 7769488, + "Application SN": "11/108,627", + "Title": "SMART Solar Sail", + "Patent Expiration Date": "04/08/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14777-1", + "Patent Number": 7341932, + "Application SN": "11/251,531", + "Title": "Large Area Vacuum Ultra-Violet Sensors", + "Patent Expiration Date": "09/30/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14793-1", + "Patent Number": 7548199, + "Application SN": "11/239,458", + "Title": "Pivot 2.0: Radiation Hardened, Fast Acquisition/Weak Signal Tracking GPS Receiver", + "Patent Expiration Date": "09/20/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14807-1", + "Patent Number": 7464006, + "Application SN": "10/963,470", + "Title": "Application Of HHT To Financial Data Analysis For Define Volatility And Trend", + "Patent Expiration Date": "10/07/2024" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14833-1", + "Patent Number": 7346461, + "Application SN": "11/251,004", + "Title": "Stability Spectrum Through Hilbert-Huang Transform", + "Patent Expiration Date": "09/30/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14845-1", + "Patent Number": 7290737, + "Application SN": "11/251,537", + "Title": "Demiseable Reaction Wheel Assembly", + "Patent Expiration Date": "09/29/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14871-1", + "Patent Number": 7935297, + "Application SN": "11/370,396", + "Title": "Template For Deposition Of Micron And Sub-micron Pointed Structures", + "Patent Expiration Date": "03/06/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14873-1", + "Patent Number": 8357211, + "Application SN": "12/872,445", + "Title": "ADR Salt Pill Design And Crystal Growth Process For Hydrated Magnetic Salts", + "Patent Expiration Date": "08/31/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14879-1", + "Patent Number": 7635832, + "Application SN": "11/469,105", + "Title": "Iterative-Transform Phase-Retrieval Utilizing Adaptive Diversity", + "Patent Expiration Date": "08/31/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14941-1", + "Patent Number": 7739671, + "Application SN": "11/203,590", + "Title": "A Method And System For Direct Implementation Of Formal Specifications Derived Mechanically From Informal Requirements", + "Patent Expiration Date": "08/12/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14942-1", + "Patent Number": 7752608, + "Application SN": "11/203,586", + "Title": "A Method And System For Formal Analysis, Simulation, And Verification Of Knowledge-Based Systems, Rule-Based Systems, And Expert Systems", + "Patent Expiration Date": "08/12/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14952-1", + "Patent Number": 7513546, + "Application SN": "11/689,161", + "Title": "Conformal Gripper", + "Patent Expiration Date": "03/21/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14960-1", + "Patent Number": 7992760, + "Application SN": "11/357,458", + "Title": "Hardware And Technique For Dead End Welding Of All Types Of Tubing", + "Patent Expiration Date": "02/08/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16700-1", + "Patent Number": "", + "Application SN": "14/041407", + "Title": "SpaceCube v2.0 Flight Processor Card", + "Patent Expiration Date": "09/30/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14968-1", + "Patent Number": 7627538, + "Application SN": "11/251,538", + "Title": "Apoptosis And Self-destruct: Mechanisms For Management Of Autonomic Systems", + "Patent Expiration Date": "09/29/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14968-2", + "Patent Number": 7925600, + "Application SN": "12/603,140", + "Title": "SWARM AUTONOMIC AGENTS WITH SELF-DESTRUCT CAPABILITY", + "Patent Expiration Date": "10/21/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14979-1", + "Patent Number": 7601091, + "Application SN": "11/426,134", + "Title": "Modular Gear Bearing", + "Patent Expiration Date": "06/23/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-14994-1", + "Patent Number": 7697759, + "Application SN": "11/251,530", + "Title": "A Split-Remerge Method For Eliminating Processing Window Artifacts In Recursive Hierarchical Segmentation", + "Patent Expiration Date": "09/30/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15001-1", + "Patent Number": 7924415, + "Application SN": "12/389,097", + "Title": "Light Direction Sensor", + "Patent Expiration Date": "02/19/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15002-1", + "Patent Number": 7240879, + "Application SN": "11/124,592", + "Title": "Space Robotic System For In Space Servicing Of Unmanned Spacecraft Applications", + "Patent Expiration Date": "05/06/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15002-2", + "Patent Number": 7513459, + "Application SN": "11/670,653", + "Title": "Method And Associated Apparatus For Capturing, Servicing, And De-Orbiting Earth Satellites Using Robotics", + "Patent Expiration Date": "05/06/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15002-3", + "Patent Number": 7293743, + "Application SN": "11/670,270", + "Title": "Method And Associated Apparatus For Capturing, Servicing, And De-Orbiting Earth Satellites Using Robotics", + "Patent Expiration Date": "11/13/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15002-4", + "Patent Number": 7438264, + "Application SN": "11/670,781", + "Title": "Method And Associated Apparatus For Capturing, Servicing And De-Orbiting Earth Satellites Using Robotics", + "Patent Expiration Date": "05/06/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15002-5", + "Patent Number": 7513460, + "Application SN": "11/671,062", + "Title": "Method And Associated Apparatus For Capturing, Servicing, And De-Orbiting Earth Satellites Using Robotics", + "Patent Expiration Date": "05/06/2025" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15027-1", + "Patent Number": 7412175, + "Application SN": "11/425,352", + "Title": "Millimeter Wave Polarization Transformer", + "Patent Expiration Date": "06/20/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15027-2", + "Patent Number": 7609978, + "Application SN": "12/056,964", + "Title": "INTERFEROMETRIC POLARIZATION CONTROL", + "Patent Expiration Date": "03/27/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15027-3", + "Patent Number": 7616903, + "Application SN": "12/057,060", + "Title": "INTERFEROMETRIC POLARIZATION CONTROL", + "Patent Expiration Date": "03/27/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15030-1", + "Patent Number": 7907333, + "Application SN": "11/460,482", + "Title": "A Pulsed, 1 Micron, Single Frequency, Diode-Seeded Ytterbium-doped Fiber Amplifier With Variable Output Parameters, P", + "Patent Expiration Date": "07/27/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15038-1", + "Patent Number": 7765171, + "Application SN": "11/426,853", + "Title": "SPAACE: Self Properties For An Autonomous & Autonomic Computing Environment", + "Patent Expiration Date": "06/27/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15039-1", + "Patent Number": 7762523, + "Application SN": "11/861,038", + "Title": "Miniaturized Double Latching Solenoid Valve", + "Patent Expiration Date": "09/25/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15042-1", + "Patent Number": 7622907, + "Application SN": "11/535,872", + "Title": "Driven Ground", + "Patent Expiration Date": "09/27/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15055-1", + "Patent Number": 7746190, + "Application SN": "11/748,969", + "Title": "Broadband High Spurious-suppression Microwave Waveguide Filter For Polarization-preserving And Transformer", + "Patent Expiration Date": "05/15/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15077-1", + "Patent Number": 8068556, + "Application SN": "12/147,100", + "Title": "Low Cost TDRSS Tranceiver (LCT2)", + "Patent Expiration Date": "06/26/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15079-1", + "Patent Number": 7886273, + "Application SN": "11/532,800", + "Title": "Generation And Verification Of Policies For Autonomic Systems", + "Patent Expiration Date": "09/18/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15080-1", + "Patent Number": 7979848, + "Application SN": "11/533,837", + "Title": "A Method Of Deriving Process Based Specifications From Scenarios Via Pattern Matching", + "Patent Expiration Date": "09/21/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15115-1", + "Patent Number": 7465926, + "Application SN": "11/537,280", + "Title": "Miniaturized Radiation Spectrometer Development", + "Patent Expiration Date": "09/29/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15136-1", + "Patent Number": 8093094, + "Application SN": "12/137,844", + "Title": "Blocking Contacts For N-Type Cadmium Zinc Cadmium Zinc Telluride (CdZnTe)", + "Patent Expiration Date": "06/12/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15148-1", + "Patent Number": 7668796, + "Application SN": "11/536,132", + "Title": "Enhancing R2D2C Requirements Based Programming With Automata Learning", + "Patent Expiration Date": "09/28/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15162-1", + "Patent Number": 7796726, + "Application SN": "11/706,693", + "Title": "Instrument And Method For X-Ray Diffraction, Fluorescence, And Crystal Texture Analysis Without Sample Preparation", + "Patent Expiration Date": "02/14/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15163-2", + "Patent Number": 0, + "Application SN": "13/092198", + "Title": "AIGaN Ultraviolet Detectors For Dual Band UV Detection", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15176-1", + "Patent Number": 7899760, + "Application SN": "11/533,855", + "Title": "Autonomic Quiescence", + "Patent Expiration Date": "09/21/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15177-1", + "Patent Number": 8082538, + "Application SN": "11/536378", + "Title": "A Method For Developing And Maintaining Evolving Systems With Software Product Lines", + "Patent Expiration Date": "09/28/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15177-2", + "Patent Number": 0, + "Application SN": "13/305932", + "Title": "A Method For Developing And Maintaining Evolving Systems With Software Product Lines", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15178-1", + "Patent Number": 7992134, + "Application SN": "11/536,969", + "Title": "Modeling, Specifying And Deploying Policies In Autonomous And Autonomic Systems Using An AOSE Methodology", + "Patent Expiration Date": "09/29/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15179-1", + "Patent Number": 7904396, + "Application SN": "11/533,895", + "Title": "An Autonomic Smoke Detector", + "Patent Expiration Date": "09/21/2026" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15184-1", + "Patent Number": 7978312, + "Application SN": "11/933,492", + "Title": "An Active, Solid-state, 3-Dimensional Range Imaging System", + "Patent Expiration Date": "11/01/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15206-1", + "Patent Number": 8041655, + "Application SN": "11/836,352", + "Title": "Otoacoustic Protection In Biologically-Inspired Systems", + "Patent Expiration Date": "08/09/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15206-2", + "Patent Number": 8140452, + "Application SN": "13/230915", + "Title": "Otoacoustic Protection In Biologically-Inspired Systems", + "Patent Expiration Date": "09/13/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15206-3", + "Patent Number": 8140453, + "Application SN": "13/230922", + "Title": "Otoacoustic Protection In Biologically-Inspired Systems", + "Patent Expiration Date": "09/13/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15206-4", + "Patent Number": 8275725, + "Application SN": "13/230920", + "Title": "Otoacoustic Protection In Biologically-Inspired Systems", + "Patent Expiration Date": "09/13/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15206-5", + "Patent Number": 8165976, + "Application SN": "13/230922", + "Title": "Otoacoustic Protection In Biologically-Inspired Systems", + "Patent Expiration Date": "09/13/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15206-6", + "Patent Number": 8165977, + "Application SN": "13/230923", + "Title": "Otoacoustic Protection In Biologically-Inspired Systems", + "Patent Expiration Date": "09/13/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15217-1", + "Patent Number": 8139674, + "Application SN": "12/173,243", + "Title": "Spaceflight Ka-Band High Rate Rad Hard Modulator", + "Patent Expiration Date": "07/15/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15301-1", + "Patent Number": 7673089, + "Application SN": "11/935,572", + "Title": "An Extendibe USB Drive That Accepts External Media", + "Patent Expiration Date": "11/06/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15302-1", + "Patent Number": 7673089, + "Application SN": "11/935,572", + "Title": "An Double-Headed USB Drive", + "Patent Expiration Date": "11/06/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15328-1", + "Patent Number": 8499779, + "Application SN": "12/014,889", + "Title": "Non-Pyrotechnic Zero-Leak Normally-Closed Valve", + "Patent Expiration Date": "01/16/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15333-1", + "Patent Number": 0, + "Application SN": "11/860,830", + "Title": "Improved, Flexure-Base Linear Bearing", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15341-1", + "Patent Number": 7922920, + "Application SN": "11/862,550", + "Title": "Low Conductance Silicon Micro-leak for Mass Spectrometer Inlet", + "Patent Expiration Date": "09/27/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15341-3", + "Patent Number": 8455926, + "Application SN": "12/889,014", + "Title": "Low Conductance Silicon Micro-leak for Mass Spectrometer Inlet", + "Patent Expiration Date": "09/23/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15349-1", + "Patent Number": 7830527, + "Application SN": "12/102,240", + "Title": "Method And Apparatus For Second Harmonic Generation And Other Frequency Convertion With Multiple Frequency Channels", + "Patent Expiration Date": "04/14/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15353-1", + "Patent Number": 7830224, + "Application SN": "11/877,102", + "Title": "Compact Low-loss Planar Magic-T With Broadband Phase And Amplitude Responses", + "Patent Expiration Date": "10/23/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15357-1", + "Patent Number": 8041661, + "Application SN": "11/861,687", + "Title": "Stability Algorithm For Neural Entities (SANE)", + "Patent Expiration Date": "09/26/2027" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15364-1", + "Patent Number": 8155939, + "Application SN": "12/170,683", + "Title": "Hughes Particle – Surface Interaction Model", + "Patent Expiration Date": "07/10/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15377-1", + "Patent Number": 7811406, + "Application SN": "12/249,265", + "Title": "Advanced Adhesive Bond Shape Tailoring for Large Composite Primary Structures Subjected to Cryogenic and Ambient Loading Environments", + "Patent Expiration Date": "10/10/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15416-1", + "Patent Number": 7999427, + "Application SN": "12/188,039", + "Title": "Directed Flux Motor Utilizing Concentric Magnets and Interwoven Flux Channels", + "Patent Expiration Date": "08/07/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15417-1", + "Patent Number": 7735385, + "Application SN": "12/187,562", + "Title": "Actuated Ball and Socket Joint", + "Patent Expiration Date": "08/07/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15419-1", + "Patent Number": 8030873, + "Application SN": "12/187,926", + "Title": "Improvements to the Walk and Roll Robot", + "Patent Expiration Date": "08/07/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15421-1", + "Patent Number": 7968812, + "Application SN": "12/353,009", + "Title": "Spring Joint Package with Overstrain Sensor ( OS Sensor Joint )", + "Patent Expiration Date": "01/13/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15431-1", + "Patent Number": 7921731, + "Application SN": "12/327,514", + "Title": "A two-axis direct fluid shear stress sensor suited for aerodynamic applications", + "Patent Expiration Date": "12/03/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15445-1", + "Patent Number": 7982861, + "Application SN": "12/183,820", + "Title": "Pseudo-Noise Code Modulation using Return to Zero pulses for Ranging, Altimetry and Communications", + "Patent Expiration Date": "07/31/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15458-1", + "Patent Number": 8094731, + "Application SN": "12/357,081", + "Title": "Space Link Extension Return Channel Frames (SLE-RCF) Service (User side) Software Library", + "Patent Expiration Date": "01/21/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15483-1", + "Patent Number": 7817087, + "Application SN": "12/116,518", + "Title": "Relative Spacecraft Navigation using Reflected GPS Signals", + "Patent Expiration Date": "05/07/2028" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15520-1", + "Patent Number": 8547531, + "Application SN": "12/873373", + "Title": "Non-scanning laser 3D imager", + "Patent Expiration Date": "09/01/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15527-1", + "Patent Number": 8160728, + "Application SN": "12/558,672", + "Title": "Sensor Complete Requirements Algorithm For Autonomous Mobility", + "Patent Expiration Date": "09/14/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15538-1", + "Patent Number": 8198956, + "Application SN": "12/535,954", + "Title": "Compact planar microwave blocking filter", + "Patent Expiration Date": "08/05/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15550-1", + "Patent Number": 8275724, + "Application SN": "12/569,422", + "Title": "A biologically-inspired method of improving system performance and survivability through self-sacrifice", + "Patent Expiration Date": "09/29/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15552-1", + "Patent Number": 7924126, + "Application SN": "12/555,634", + "Title": "Small, High Field Superconducting Magnets", + "Patent Expiration Date": "09/08/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15557-1", + "Patent Number": 8095485, + "Application SN": "12/353,637", + "Title": "Formulation for Emotion Embedding in Logic Systems (FEELS)", + "Patent Expiration Date": "01/14/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15583-1", + "Patent Number": 7970025, + "Application SN": "12/496,954", + "Title": "Tunable Frequency-stabilized Laser via Offset Sideband Locking", + "Patent Expiration Date": "07/02/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15584-1", + "Patent Number": 8144331, + "Application SN": "12/487,454", + "Title": "Hilbert-Transform-Based Phase Referencing Algorithm for Wide-Field Imaging Interferometry.", + "Patent Expiration Date": "06/18/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15655-1", + "Patent Number": 8138961, + "Application SN": "12/561,644", + "Title": "Low Frequency Wideband Step Frequency Inverse Synthetic Aperture Radar For 3-D Imaging of Interior of Near Earth Objects/Planetary Bodies", + "Patent Expiration Date": "09/17/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15660-1", + "Patent Number": 0, + "Application SN": "13/247416", + "Title": "Extreme Environment Low Temperature Transistor Models", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15662-1", + "Patent Number": 8092031, + "Application SN": "12/569,090", + "Title": "Flight Mirror Mount and Flight Mounting Procedure for an Ultra-Lightweight High-Precision Glass Mirror", + "Patent Expiration Date": "09/29/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15672-1", + "Patent Number": 0, + "Application SN": "13/211413", + "Title": "Multicolor detectors for ultrasensitive long-wave imaging cameras", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15678-1", + "Patent Number": 8484274, + "Application SN": "12/549,159", + "Title": "Optimal Padding for the Two-Dimensional Fast Fourier Transform", + "Patent Expiration Date": "08/27/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15684-1", + "Patent Number": 8285401, + "Application SN": "12/549,898", + "Title": "Discrete Fourier Transform (DFT) Analysis in a Complex Vector Space", + "Patent Expiration Date": "08/28/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15685-1", + "Patent Number": 8331733, + "Application SN": "12/550,141", + "Title": "Sampling Theorem in Terms of the Bandwidth and Sampling Interval", + "Patent Expiration Date": "08/28/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15692-1", + "Patent Number": 8330644, + "Application SN": "12/835,958", + "Title": "Expandable Reconfigurable Instrument Node - Web Sensor Strand Demonstration", + "Patent Expiration Date": "07/19/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15693-1", + "Patent Number": 0, + "Application SN": "12/570,224", + "Title": "Variable Sampling Mapping: A novel supplement to iterative-transform phase retrieval algorithms for undersampled images, broadband illumination, and noisy detection environments", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15699-1", + "Patent Number": 8480296, + "Application SN": "12/560,535", + "Title": "A Low Cost, Low Temperature Radiometer for Thermal Measurements.", + "Patent Expiration Date": "09/16/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15724-1", + "Patent Number": 8275015, + "Application SN": "12/551,212", + "Title": "Passively Q-switched side pumped Monolithic Ring Laser", + "Patent Expiration Date": "08/31/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15727-1", + "Patent Number": 0, + "Application SN": "13/222575", + "Title": "An All-metal, Solderless Circularly Polarized Microwave Antenna Element with Very Low Off-Axis Cross-Polarization", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15729-1", + "Patent Number": 8674302, + "Application SN": "12/789,937", + "Title": "Novel Superconducting Transition Edge Sensor Design", + "Patent Expiration Date": "05/28/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15729-2", + "Patent Number": 8393786, + "Application SN": "12/789,954", + "Title": "Novel Superconducting Transition Edge Sensor Design", + "Patent Expiration Date": "05/28/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15730-1", + "Patent Number": 8355579, + "Application SN": "12/783054", + "Title": "Automatic Extraction of Planetary Image Features", + "Patent Expiration Date": "05/19/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15732-1", + "Patent Number": 8093565, + "Application SN": "12/695478", + "Title": "Crossed Small Deflection Energy Analyzer (SDEA) for Wind/Temperature Spectrometer (WTS)", + "Patent Expiration Date": "01/28/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15758-1", + "Patent Number": 8044332, + "Application SN": "12/553,613", + "Title": "Hybrid Architecture Active Wavefront Sensing and Control", + "Patent Expiration Date": "09/03/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15771-1", + "Patent Number": 8035081, + "Application SN": "12/570,166", + "Title": "High Precision Electric Gate (HPEG) for Time of Flight Mass Spectrometers", + "Patent Expiration Date": "09/30/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15774-1", + "Patent Number": 0, + "Application SN": "13/154599", + "Title": "Ensemble Detector", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15782-1", + "Patent Number": 0, + "Application SN": "13/216479", + "Title": "Ultra-low Power (< 100mW), 64-Channel Pulse Data Collection System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15792-1", + "Patent Number": 8406469, + "Application SN": "12/838600", + "Title": "Progressive Band Selection for Hyperspectral Images", + "Patent Expiration Date": "07/19/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15815-1", + "Patent Number": 0, + "Application SN": "12/887988", + "Title": "LIDAR Luminance Quantizer", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15826-1", + "Patent Number": 8134130, + "Application SN": "12/839207", + "Title": "The Corner Cathode: Making Collimated Electron Beams with a Small Number of Electrodes", + "Patent Expiration Date": "07/19/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15829-1", + "Patent Number": 0, + "Application SN": "13/601293", + "Title": "Resolution enhanced pseudo random code technique", + "Patent Expiration Date": "08/31/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15839-1", + "Patent Number": 0, + "Application SN": "12/840787", + "Title": "Low threshold, narrow linewidth optical parametric generator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15856-1", + "Patent Number": 8196853, + "Application SN": "12/779494", + "Title": "Aerodynamically Stabilized Instrument Platform for Kites and Tethered Blimps ( AeroPod )", + "Patent Expiration Date": "05/13/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15886-1", + "Patent Number": 0, + "Application SN": "12/838963", + "Title": "Automated Beam Balance Scale Logger", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15911-1", + "Patent Number": 0, + "Application SN": "13/217965", + "Title": "Graphite Composite Panel Polishing Fixture", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15934-1", + "Patent Number": 0, + "Application SN": "12/839125", + "Title": "Determining Phase Retrieval Sampling from the Modulation Transfer Function", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15935-1", + "Patent Number": 0, + "Application SN": "13/043257", + "Title": "New Variables for Iterative Transform Phase Retrieval", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15936-1", + "Patent Number": 0, + "Application SN": "12/854490", + "Title": "SpaceCube Version 1.5", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15947-1", + "Patent Number": 8274726, + "Application SN": "12/839171", + "Title": "Sampling and Reconstruction of the Sinc(x) Function", + "Patent Expiration Date": "07/19/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15948-1", + "Patent Number": 0, + "Application SN": "13/204767", + "Title": "Lateral Kevlar Suspension Device (LKSD)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15949-1", + "Patent Number": 0, + "Application SN": "13/600992", + "Title": "Vectorized Rebinning Algorithm for Fast Data Down-Sampling", + "Patent Expiration Date": "08/31/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15951-1", + "Patent Number": 0, + "Application SN": "13/222839", + "Title": "An Improved Method of Fabricating Single Crystal Silicon Light Weight Mirrors", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15953-1", + "Patent Number": 8484509, + "Application SN": "12/854546", + "Title": "SpaceCube Demonstration Platform", + "Patent Expiration Date": "08/11/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15953-2", + "Patent Number": 0, + "Application SN": "13/903357", + "Title": "SpaceCube Demonstration Platform", + "Patent Expiration Date": "09/30/2029" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15957-1", + "Patent Number": 0, + "Application SN": "13/211526", + "Title": "Imaging System Aperture Masks for Image Plane Exit Pupil Characterization", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15964-1", + "Patent Number": 8525110, + "Application SN": "13/247,168", + "Title": "An Instrument Suite for the Vertical Characterization of the Ionosphere-Thermosphere System from 100 km to 700km Altitude", + "Patent Expiration Date": "09/28/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15970-1", + "Patent Number": 0, + "Application SN": "13/034125", + "Title": "Electrospray Ionization for Chemical Analysis of Organic Molecules for Mass Spectrometry", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15976-1", + "Patent Number": 0, + "Application SN": "12/872366", + "Title": "Phase Retrieval System for Assessing Diamond-Turning and other Optical Surface Artifacts", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-15977-1", + "Patent Number": 8354952, + "Application SN": "12/839060", + "Title": "Phase Retrieval for Radio Telescope and Antenna Control", + "Patent Expiration Date": "07/19/2030" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15979-1", + "Patent Number": 0, + "Application SN": "12/839187", + "Title": "Multi-Scale Image Reconstruction using Wavelets", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-15994-1", + "Patent Number": "", + "Application SN": "13/104538", + "Title": "Photonic Choke-Joints for Dual-Polarization Waveguides", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16006-1", + "Patent Number": "", + "Application SN": "13/216671", + "Title": "Programmable High-Rate Multi-Mission Receiver for Space Communication", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16008-1", + "Patent Number": "", + "Application SN": "13/600826", + "Title": "Phase controlled magnetic mirror for wavefront correction", + "Patent Expiration Date": "08/31/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16016-1", + "Patent Number": "", + "Application SN": "13/193272", + "Title": "Carbon Nanotubes on titanium substrates for stray light suppression", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Issued", + "Case Number": "GSC-16024-1", + "Patent Number": 8526733, + "Application SN": "13/150,316", + "Title": "Refinement of the HSEG Algorithm for Improved Computational Processing Efficiency", + "Patent Expiration Date": "06/01/2031" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16789-1", + "Patent Number": "", + "Application SN": "14/ 033725", + "Title": "LEARNS (Logic Expansion for Autonomously Reconfigurable Neural Systems)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16029-1", + "Patent Number": "", + "Application SN": "13/193249", + "Title": "Nanostructure secondary mirror apodization mask for transmitter signal suppression in a duplex telescope.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16096-1", + "Patent Number": "", + "Application SN": "13/211432", + "Title": "Prototype Genomics Based keyed-Hash Message Authentication Code Protocol", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16100-1", + "Patent Number": "", + "Application SN": "12/881587", + "Title": "Lunar Reconnaissance Orbiter (LRO) Command and Data Handling Flight Electronics Subsystem", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16105-1", + "Patent Number": "", + "Application SN": "13/197214", + "Title": "Molecular Adsorber Coating", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16109-1", + "Patent Number": "", + "Application SN": "13/240180", + "Title": "HEXPANDO expanding head for fastener retention hexagonal wrench", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16122-1", + "Patent Number": "", + "Application SN": "13/474053", + "Title": "Apparatuses and Methods to Enable Sub-MHz Precision in Fast Laser Frequency Tuning", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16135-1", + "Patent Number": "", + "Application SN": "13/534427", + "Title": "A cryptographic approach to microRNA target binding analysis", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16146-1", + "Patent Number": "", + "Application SN": "13/601194", + "Title": "Wafer Level Microchannel Fabrication Process for Lap-on-a-Chip Devices", + "Patent Expiration Date": "08/31/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16182-1", + "Patent Number": "", + "Application SN": "13/595604", + "Title": "A High Event Rate, Zero Dead Time, Multi-Stop Time-to-digital Converter Application Specific Integrated Circuit", + "Patent Expiration Date": "08/27/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16193-1", + "Patent Number": "", + "Application SN": "13/720175", + "Title": "Fine Control and Maintenance Algorithm for Visible Nulling Coronagraphy", + "Patent Expiration Date": "12/19/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16223-1", + "Patent Number": "", + "Application SN": "13/551649", + "Title": "SpaceCube Mini", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16247-1", + "Patent Number": "", + "Application SN": "13/570100", + "Title": "Enhanced adhesion multiwalled carbon nanotubes on titanium substrates for stray light control", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16250-1", + "Patent Number": "", + "Application SN": "13/150316", + "Title": "Further Refinement of the Computationally Efficient HSEG Algorithm", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16259-1", + "Patent Number": "", + "Application SN": "13/050617", + "Title": "Spaceflight Refuiling Tools", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16299-1", + "Patent Number": "", + "Application SN": "13/622465", + "Title": "V-Assembly Dual Head Efficiency Resonator (VADER) Laser Transmitter", + "Patent Expiration Date": "09/19/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16301-1", + "Patent Number": "", + "Application SN": "13/771815", + "Title": "Impedance matched to vacuum, invisible-edge diffraction suppressed mirror", + "Patent Expiration Date": "02/20/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16327-1", + "Patent Number": "", + "Application SN": "13/545173", + "Title": "Miniaturized laser heterodyne radiometer for carbon dioxide (CO2), methane (CH4), and carbon monoxide (CO) measurements in the atmospheric column.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16328-1", + "Patent Number": "", + "Application SN": "13/474367", + "Title": "Development of the Hilbert-Huang Transform Real-Time Data Processing System with 2-D Capabilities", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16438-1", + "Patent Number": "", + "Application SN": "13/606174", + "Title": "Power provision based on self-sacrificing spacecraft", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16460-1", + "Patent Number": "", + "Application SN": "13/592409", + "Title": "Autonomic Autopoiesis", + "Patent Expiration Date": "08/23/2032" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16461-1", + "Patent Number": "", + "Application SN": "13/592412", + "Title": "Autonomic and Apoptotic Cloud, Autonomic and Apoptotic Grid, Autonomic and Apoptotic Highly Distributed System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16485-1", + "Patent Number": "", + "Application SN": "14/038381", + "Title": "Broadband planar impedance transformer", + "Patent Expiration Date": "09/26/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16516-1", + "Patent Number": "", + "Application SN": "14/021812", + "Title": "Muti-function microposters inside of microfluidic channel for Lab-On-A-Chip device", + "Patent Expiration Date": "09/09/2033" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12866", + "Patent Number": 0, + "Application SN": "12/843,353", + "Title": "In-Situ Wire Damage Detection System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16545-1", + "Patent Number": "", + "Application SN": "13/534442", + "Title": "INTEGRATED GENOMIC AND PROTEOMIC INFORMATION SECURITY PROTOCOL", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16555-1", + "Patent Number": "", + "Application SN": "14/023847", + "Title": "Green Precision Cleaning System", + "Patent Expiration Date": "09/11/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16569-1", + "Patent Number": "", + "Application SN": "14/041,720", + "Title": "Mirrorlet array for Integral Field Spectrometers (IFS)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16674-1", + "Patent Number": "", + "Application SN": "14/041224", + "Title": "MISSE-7 Control Center", + "Patent Expiration Date": "09/30/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16795-1", + "Patent Number": "", + "Application SN": "13/781,121", + "Title": "Wallops Flight Facility 6U Advanced CubeSat Ejector (ACE)", + "Patent Expiration Date": "01/04/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16805-1", + "Patent Number": "", + "Application SN": "14/040924", + "Title": "SpaceCube v2.0 Micro", + "Patent Expiration Date": "09/30/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16808-1", + "Patent Number": "", + "Application SN": "14/040848", + "Title": "SpaceCube v. 2.0 Flight Power Card", + "Patent Expiration Date": "09/30/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16859-1", + "Patent Number": "", + "Application SN": "14/037484", + "Title": "Chemical sensors based on 2-dimensional materials", + "Patent Expiration Date": "09/26/2033" + }, + { + "Center": "NASA Goddard Space Flight Center", + "Status": "Application", + "Case Number": "GSC-16887-1", + "Patent Number": "", + "Application SN": "14/037458", + "Title": "Propellant Transfer Assembly Design and Development", + "Patent Expiration Date": "09/26/2033" + }, + { + "Center": "NASA Headquarters", + "Status": "Issued", + "Case Number": "HQN-11248-1", + "Patent Number": 6223143, + "Application SN": "09/143,969", + "Title": "Quantitative Risk Assessment Software (QRAS) System", + "Patent Expiration Date": "08/31/2018" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11641", + "Patent Number": 5730806, + "Application SN": "08/437,859", + "Title": "Gas-Liquid Supersonic Cleaning And Cleaning Verification Spray System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11751", + "Patent Number": 5710377, + "Application SN": "08/540,616", + "Title": "Improved Portable Ultrasonic Leak Detector (Combined With KSC-11751-2)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11804", + "Patent Number": 5693871, + "Application SN": "08/695,071", + "Title": "Low-Differential Pressure Generator For Evaluating Low Differential Pressure Transducers", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11866-1", + "Patent Number": 5977773, + "Application SN": "08/912,035", + "Title": "Non-Intrusive Impedance-Based Cable Tester - Standing Wave Reflectometer", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11884", + "Patent Number": 6039783, + "Application SN": "08/772,057", + "Title": "A New Process And Equipment For Conversion Of NOx Scrubber Liquor To Fertilizer (related To KSC-11994)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11884-2", + "Patent Number": 6641638, + "Application SN": "09/511,634", + "Title": "Process And Equipment For Nitrogen Oxide Waste Conversion To Fertilizer - Continuation-In-Part Filed 2/17/00", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-11937-2", + "Patent Number": 7209567, + "Application SN": "10/390,259", + "Title": "Communication System With Adaptive Noise Suppression", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12035-1", + "Patent Number": 6552521, + "Application SN": "09/906,014", + "Title": "Improved Single-Station Accurate Location Of Lightning Strikes (Combined With KSC-12276 & KSC-12173)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12049", + "Patent Number": 6627065, + "Application SN": "09/977,531", + "Title": "Liquid Galvanic Coatings For Protection Of Imbedded Metals", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12056", + "Patent Number": 6676912, + "Application SN": "09/698,607", + "Title": "New Air Pollution Control Technology For Removal Of Nitrogen Oxides From Stationary Combustion Sources", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12092-2", + "Patent Number": 6967051, + "Application SN": "09/939,286", + "Title": "Thermal Insulation System And Method (Continuing Patent Application) (Combined With KSC-12092)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12107", + "Patent Number": 6742926, + "Application SN": "09/906,018", + "Title": "Thermal Insulation Test Apparatus With Sleeve (Related To KSC-12108)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12108", + "Patent Number": 6487866, + "Application SN": "09/906,011", + "Title": "Multipurpose Thermal Insulation Test Apparatus (Related To 12107)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12168", + "Patent Number": 6452510, + "Application SN": "09/802,535", + "Title": "Personal Cabin Pressure Monitor And Altitude Warning System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12190", + "Patent Number": 6764617, + "Application SN": "09/994,996", + "Title": "A Novel Ferromagnetic Conducting Lignosulfonic Acid-Doped Polyaniline (Related To KSC-11940, KSC-11940-1, KSC-11940-2, KSC-12154, KSC-12191)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12191-2", + "Patent Number": 7179404, + "Application SN": "11/215,205", + "Title": "Corrosion Prevention Of Cold Rolled Steel Using Water Dispersible Lignosulfonic Acid Doped Polyaniline", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12205", + "Patent Number": 6715914, + "Application SN": "10/185,378", + "Title": "Apparatus And Method For Thermal Performance Testing Of Pipelines And Piping Systems", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12220", + "Patent Number": 6917203, + "Application SN": "10/235,020", + "Title": "Current Signature Sensor (Combined With KSC-12152)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12221", + "Patent Number": 6757641, + "Application SN": "10/185,830", + "Title": "Multisensor Transducer And Weight Factor (Combined With KSC-12359 and KSC-13139)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12235", + "Patent Number": 6793903, + "Application SN": "10/014,140", + "Title": "High-Temperature Decomposition Of Hydrogen Peroxide", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12235-2", + "Patent Number": 6955799, + "Application SN": "10/923,152", + "Title": "Temperature Decomposition Of Hydrogen Peroxide", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12235-3", + "Patent Number": 8029736, + "Application SN": "10/923,163", + "Title": "High Temperature Decomposition Of Hydrogen Peroxide", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12236", + "Patent Number": 8511396, + "Application SN": "10/476,175", + "Title": "Non-Toxic Environmentally Safe Halon Replacement (HABx)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12236-2-PCT", + "Patent Number": 0, + "Application SN": "/0", + "Title": "Flame Suppression Agent, System And Users", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12236-CIP", + "Patent Number": "", + "Application SN": "13/428,736", + "Title": "Non-Toxic Environmentally Safe Halon Replacement (HABx)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12246", + "Patent Number": 6664298, + "Application SN": "09/972,296", + "Title": "Zero-Valent Metal Emulsion For Reductive Dehalogenation Of DNAPLs", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12246-2", + "Patent Number": 7037946, + "Application SN": "10/701,412", + "Title": "Zero-Valent Metal Emulsion For Reductive Dehalogenation Of DNAPLs", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12278", + "Patent Number": 7400766, + "Application SN": "10/783,295", + "Title": "Image Edge Extraction Via Fuzzy Reasoning (FRED) (combined With KSC-12272)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12386", + "Patent Number": 7274907, + "Application SN": "10/748,915", + "Title": "Modular Wireless Data Acquisition System (combined With KSC-12479, KSC-12486)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12390", + "Patent Number": 6824306, + "Application SN": "10/318,665", + "Title": "Thermal Insulation Test Apparatus For Flat Specimens", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12394", + "Patent Number": 7239751, + "Application SN": "10/750,629", + "Title": "Hypothesis Support Mechanism For Mid-Level Visual Pattern Recognition (PIPR)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12458", + "Patent Number": 7156957, + "Application SN": "10/440,543", + "Title": "UV Induced Oxidation Of Nitric Oxide", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12490", + "Patent Number": 7298897, + "Application SN": "10/779,551", + "Title": "Noniterative Optimal Binarization Of Gray-Scaled Digital Images Via Fuzzy Reasoning (FRAT) (combined With KSC-12272)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12518", + "Patent Number": 7790128, + "Application SN": "10/641,581", + "Title": "Hydrogen Peroxide Catalytic Decomposition", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12539", + "Patent Number": 7285306, + "Application SN": "10/684,064", + "Title": "Self-Healing Wire Insulation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12539-2", + "Patent Number": 8119238, + "Application SN": "11/856,218", + "Title": "Self-Healing Wire Insulation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12539-3", + "Patent Number": 0, + "Application SN": "13/348,861", + "Title": "Self-Healing Wire Insulation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12540", + "Patent Number": 6958085, + "Application SN": "10/666,821", + "Title": "High Performance Immobilized Liquid Membranes For Carbon Dioxide Separations", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12630", + "Patent Number": 7496237, + "Application SN": "11/010,698", + "Title": "Image Processing For Binarization Enhancement Via Fuzzy Reasoning", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12631", + "Patent Number": 7582147, + "Application SN": "11/208,122", + "Title": "Metallic Pigment Powder Particle For Use In A Liquid Coating System To Protect Reinforcing Steel In Concrete Structures", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12637", + "Patent Number": 7271199, + "Application SN": "10/977,622", + "Title": "Micro-scale Particle Emulsion And Their Application For Removal Of PCBs And Metals Found In Ex Situ Structures", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12664", + "Patent Number": 7404938, + "Application SN": "10/845,418", + "Title": "Emission Control System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12664-3-CIP", + "Patent Number": 7582271, + "Application SN": "11/40,294", + "Title": "Emission Control System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12666", + "Patent Number": 7122166, + "Application SN": "10/845,607", + "Title": "Hydrogen Peroxide Concentrator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12669", + "Patent Number": 7302364, + "Application SN": "11/83,420", + "Title": "Integrated Spaceport Automated Data Management Architecture (Combine With KSC-12581, KSC-12583, KSC-12671and KSC-12582)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12697", + "Patent Number": 7309738, + "Application SN": "10/962,827", + "Title": "A New Approach For Achieving Fire Retardancy While Retaining Physical Properties In A Compatible Polymer Matrix", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12697-3", + "Patent Number": 7968648, + "Application SN": "11/935,093", + "Title": "A New Approach For Achieving Flame Retardancy While Retaining Physical Properties In A Compatible Polymer Matrix", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12703", + "Patent Number": 8031449, + "Application SN": "12/485,979", + "Title": "Integral Battery Power Limiting Circuit For Intrinsically Safe Applications", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12723", + "Patent Number": 7790225, + "Application SN": "11/239,445", + "Title": "Coating For Corrosion Detection And Prevention", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12723-DIV", + "Patent Number": "", + "Application SN": "12/792,238", + "Title": "Coating For Corrosion Detection And Prevention", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12848", + "Patent Number": 7781492, + "Application SN": "11/759,672", + "Title": "New Organic/inorganic Polymeric Thermal Insulators", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12848-DIV", + "Patent Number": 7977411, + "Application SN": "12/835,233", + "Title": "New Organic/inorganic Polymeric Thermal Insulators", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12871-CIP", + "Patent Number": 0, + "Application SN": "13/915,407", + "Title": "Polyimide Wire Insulation Repair System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12871-DIV1", + "Patent Number": 0, + "Application SN": "14/093,701", + "Title": "Polyimide Wire Insulation Repair System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12871-DIV2", + "Patent Number": 0, + "Application SN": "14/093,680", + "Title": "Polyimide Wire Insulation Repair System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12875", + "Patent Number": 7841771, + "Application SN": "11/777,711", + "Title": "Self Validating Thermocouple (Combined With KSC-12865)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12878-2-CIP", + "Patent Number": 8163972, + "Application SN": "12/465,457", + "Title": "Bimetallic Treatment System and it's application for Removal of PCBs Found in Ex Situ Structures without the Use of a Catalized Agent", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12890", + "Patent Number": 7790787, + "Application SN": "11/740,357", + "Title": "New Organic/Inorganic Polymeric Materials", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-12890-2-DIV", + "Patent Number": 0, + "Application SN": "12/834,416", + "Title": "New Organic/Inorganic Polymeric Materials", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12899", + "Patent Number": 8425866, + "Application SN": "11/466,624", + "Title": "Gas Phase Oxidation Of NO To NO2", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12978", + "Patent Number": 7842639, + "Application SN": "11/749,767", + "Title": "Preparation of a Bimetal Using Mechanical Alloying for the Dehalogenation of Compounds", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12978-DIV", + "Patent Number": 8288307, + "Application SN": "12/909,219", + "Title": "Preparation of a Bimetal Using Mechanical Alloying for the Dehalogenation of Compounds", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-12983", + "Patent Number": 8409534, + "Application SN": "11/692,557", + "Title": "Mercury Emission Control System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13047", + "Patent Number": 0, + "Application SN": "12/813,864", + "Title": "Insulation Test Cryostat with Lift Mechanism (Combined with KSC-13048)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13047-DIV", + "Patent Number": 0, + "Application SN": "14/090,193", + "Title": "Insulation Test Cryostat with Lift Mechanism (Combined with KSC-13048)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-13088", + "Patent Number": 8293178, + "Application SN": "11/935,545", + "Title": "Improved Thermal Reactivity Of Hydrogen Sensing Pigments In Manufactured Polymer Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13088-CON", + "Patent Number": 0, + "Application SN": "13/611,856", + "Title": "Improved Thermal Reactivity Of Hydrogen Sensing Pigments In Manufactured Polymer Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13088-DIV", + "Patent Number": 0, + "Application SN": "13/615,850", + "Title": "Improved Thermal Reactivity Of Hydrogen Sensing Pigments In Manufactured Polymer Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13161", + "Patent Number": 0, + "Application SN": "12/855,791", + "Title": "PH Sensitive Microcapsule With Corrosion Indicator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13167", + "Patent Number": 0, + "Application SN": "12/856,849", + "Title": "Watercore PH Sensitive Microcapsule", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13265-CIP2", + "Patent Number": 0, + "Application SN": "14/150,502", + "Title": "An Inductive Non-Contact Position Sensor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13278", + "Patent Number": 0, + "Application SN": "13/354,576", + "Title": "A Method for Making Elongated Microcapsules Under Simple Shear Conditions", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-13285", + "Patent Number": 8593153, + "Application SN": "12/843,382", + "Title": "An improved Online Diagnostic Device (ODD) for Wiring Evaluation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Issued", + "Case Number": "KSC-13331", + "Patent Number": 8577639, + "Application SN": "13/031,182", + "Title": "A Method for Accurately Calibrating a Spectrometer Using Broadband Light", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13336", + "Patent Number": 0, + "Application SN": "12/843,487", + "Title": "Sputter Coated wire for in-situ wire damage detection", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13343", + "Patent Number": 0, + "Application SN": "13/278,710", + "Title": "Conductive Carbon Nanotube for use with Desktop Inkjet Printing", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13366", + "Patent Number": 0, + "Application SN": "13/523,806", + "Title": "High Performance Self Healing Film", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13579", + "Patent Number": "", + "Application SN": "13/895,717", + "Title": "Green PCB Removal From Sediment Systems (GPRSS)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13588", + "Patent Number": "", + "Application SN": "13/495,862", + "Title": "Multi-Dimensional Damage Detection For Flat Surfaces", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13592", + "Patent Number": "", + "Application SN": "13/542,155", + "Title": "pH sensitive microparticles", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13595", + "Patent Number": "", + "Application SN": "14/192,784", + "Title": "Aerogel insulation and composites integrated into unique lay-ups (Incorporates Embodiments from KSC-13702)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13636", + "Patent Number": "", + "Application SN": "13/546,880", + "Title": "Incorporation of Chemochromic Indicator for the Presence of Hypergolic Fuels into a Variety of Manufactured Parts", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13638", + "Patent Number": "", + "Application SN": "14/176,824", + "Title": "A Two Dimensional Inductive Position Sensor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13664", + "Patent Number": "", + "Application SN": "13/896,896", + "Title": "Regolith Advanced Surface Systems Operations Robot (RASSOR) Excavator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Kennedy Space Center", + "Status": "Application", + "Case Number": "KSC-13689", + "Patent Number": "", + "Application SN": "13/961,521", + "Title": "Coherence Multiplexing of Wireless Surface Acoustic Wave Sensors", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-14673-1", + "Patent Number": 5736642, + "Application SN": "08/778,066", + "Title": "Nonlinear Ultrasonic Scanning To Detect Material Defects", + "Patent Expiration Date": "01/08/2017" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-14840-1", + "Patent Number": 5841032, + "Application SN": "08/792,909", + "Title": "Variable And Fixed Frequency Pulsed Phase-Locked Loop", + "Patent Expiration Date": "01/24/2017" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15205-1", + "Patent Number": 5741883, + "Application SN": "08/359,752", + "Title": "Tough, Soluble, Aromatic, Thermoplastic Copolyimides", + "Patent Expiration Date": "04/21/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15282-1", + "Patent Number": 5755571, + "Application SN": "08/712,984", + "Title": "Ultrasonic Periodontal Structures Mapping Device", + "Patent Expiration Date": "09/09/2016" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15318-1", + "Patent Number": 5798521, + "Application SN": "08/806,732", + "Title": "Distributed Fiber-optic Strain Sensor", + "Patent Expiration Date": "02/27/2017" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15348-1", + "Patent Number": 5632841, + "Application SN": "08/416,598", + "Title": "Thin Layer Composite Unimorph Ferroelectric Driver And Sensor, THUNDER", + "Patent Expiration Date": "04/04/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15348-2", + "Patent Number": 6734603, + "Application SN": "08/797,553", + "Title": "Thin Layer Composite Unimorph Ferroelectric Driver And Sensor", + "Patent Expiration Date": "04/04/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15351-1-CU", + "Patent Number": 5585083, + "Application SN": "08/414,661", + "Title": "Catalyst For Formaldehyde Oxidation", + "Patent Expiration Date": "03/30/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15370-1-SB", + "Patent Number": 5640408, + "Application SN": "08/593,438", + "Title": "Quasi Four-Level TM:LuAG Laser (Tm:LuAG Laser)", + "Patent Expiration Date": "01/27/2016" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15376-1", + "Patent Number": 5771204, + "Application SN": "08/754,642", + "Title": "Relative Phase Measurement Instrument For Multiple-Echo Systems", + "Patent Expiration Date": "11/21/2016" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15406-1", + "Patent Number": 5617873, + "Application SN": "08/449,473", + "Title": "Noninvasive Meth/Apparatus For Monitoring Intracranial Pressure & Pressure Vols Index In Humans", + "Patent Expiration Date": "05/23/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15412-1", + "Patent Number": 5606014, + "Application SN": "08/511,422", + "Title": "Imide Oligomers And Co-Oligomers Containing Pendent Phenylethynyl Groups And Polymers Therefrom", + "Patent Expiration Date": "08/04/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15412-2", + "Patent Number": 5689004, + "Application SN": "08/747,472", + "Title": "Imide Oligomers And Co-Oligomers Containing Pendent Phenylethynyl Groups And Polymers Therefrom", + "Patent Expiration Date": "08/04/2015" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15449-1", + "Patent Number": 6133401, + "Application SN": "09/342,462", + "Title": "A Method To Prepare Processable Polyimides With Reactive Endgroups Using 1,3 Bis (3-Aminophenoxyl) Benzene", + "Patent Expiration Date": "06/29/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15449-2", + "Patent Number": 6288209, + "Application SN": "09/667,426", + "Title": "Method To Prepare Processable Polyimides With Reactive Endgroups Using 1,3-Bix(3-Aminophenoxyl)Benzene", + "Patent Expiration Date": "06/29/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15507-1", + "Patent Number": 6475147, + "Application SN": "09/493,044", + "Title": "Ultrasonic Technique To Measure Intracranial Pressure", + "Patent Expiration Date": "01/27/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15508-1", + "Patent Number": 6545760, + "Application SN": "09/535,659", + "Title": "Distributed Rayleigh Scatter Fiber Optic Strain Sensor", + "Patent Expiration Date": "03/24/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15514-1-SB", + "Patent Number": 5991456, + "Application SN": "08/654,840", + "Title": "Method Of Improving A Digital Image", + "Patent Expiration Date": "05/29/2016" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15524-1", + "Patent Number": 6000844, + "Application SN": "08/810,058", + "Title": "A Method And Apparatus For The Portable Identification Of Material Thickness Of Layers Using A Scanning Linear Heat Source And Infrared Detectorcramer", + "Patent Expiration Date": "03/04/2017" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15525-1-CU", + "Patent Number": 5948965, + "Application SN": "08/845,899", + "Title": "Solid State Carbon Monoxide Sensor", + "Patent Expiration Date": "04/28/2017" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15637-1", + "Patent Number": 6015272, + "Application SN": "08/673,627", + "Title": "Magnetically Suspended Miniature Fluid Pump And Method Of Making Same", + "Patent Expiration Date": "06/26/2016" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15637-2", + "Patent Number": 6447265, + "Application SN": "09/398,878", + "Title": "Magnetically Suspended Miniature Fluid Pump And Method Of Designing The Same", + "Patent Expiration Date": "06/26/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15652-1-CU", + "Patent Number": 6132694, + "Application SN": "08/991,075", + "Title": "Catalyst For Oxidation Of Hydro-Carbons And Volatile Organic Compounds", + "Patent Expiration Date": "12/16/2017" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-15665-1-CU", + "Patent Number": 0, + "Application SN": "08/838,596", + "Title": "Catalyst For Carbon Monoxide Oxidation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15745-1", + "Patent Number": 6222007, + "Application SN": "09/093,826", + "Title": "Prepreg And Composites Made From Polyimide Salt-Like Solution", + "Patent Expiration Date": "05/29/2018" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15747-1-CU", + "Patent Number": 6200539, + "Application SN": "09/357,403", + "Title": "One-Atmosphere Uniform Glow Discharge Plasma Gas Flow Acceleration", + "Patent Expiration Date": "07/20/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15767-1", + "Patent Number": 6180746, + "Application SN": "09/316,428", + "Title": "Polyimide Foam From Ether-Containing Monomeric Solutions", + "Patent Expiration Date": "05/21/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15816-1", + "Patent Number": 6629341, + "Application SN": "09/430,677", + "Title": "Macro-Fiber Composite Actuator With Interdigitated Electrodes", + "Patent Expiration Date": "10/29/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15816-2", + "Patent Number": 7197798, + "Application SN": "10/653,824", + "Title": "A Method For Fabricating A Piezoelectric Composite Apparatus", + "Patent Expiration Date": "06/30/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15817-1", + "Patent Number": 6450820, + "Application SN": "09/612,412", + "Title": "A Method Of Encouraging Physiological Self-Regulation Through Modulation Of An Operator's Control Input To A Video Game Or Training Simulator", + "Patent Expiration Date": "07/12/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15818-3", + "Patent Number": 6922242, + "Application SN": "10/465,386", + "Title": "Optical Path Switching Based Differential Absorption Radiometry For Substance Detection", + "Patent Expiration Date": "06/21/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15831-1", + "Patent Number": 5994418, + "Application SN": "09/316,865", + "Title": "Hollow Polyimide Microspheres", + "Patent Expiration Date": "05/21/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15831-2", + "Patent Number": 6235803, + "Application SN": "09/408,652", + "Title": "Hollow Polyimide Microspheres", + "Patent Expiration Date": "05/21/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15831-3", + "Patent Number": 6084000, + "Application SN": "09/394,534", + "Title": "Hollow Polyimide Microsphere", + "Patent Expiration Date": "05/21/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15834-1", + "Patent Number": 6359107, + "Application SN": "09/575,826", + "Title": "High Performance / High Temperature Resins For Infusion And Transfer Molding Processes", + "Patent Expiration Date": "05/18/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15851-1-CU", + "Patent Number": 6753293, + "Application SN": "09/607,211", + "Title": "Process For Coating Substrates With Catalyst Materials", + "Patent Expiration Date": "05/11/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15854-1", + "Patent Number": 6761695, + "Application SN": "10/94,023", + "Title": "Technique For Non-Invasive Absolute Measurement Of Intra-Cranial Pressure In Humans", + "Patent Expiration Date": "07/28/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15927-1", + "Patent Number": 6584848, + "Application SN": "10/263,292", + "Title": "Dielectric Electrostatic Ultrasonic Transducer (DEUT)", + "Patent Expiration Date": "09/30/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15934-1", + "Patent Number": 6566648, + "Application SN": "09/535,661", + "Title": "Edge Triggered Apparatus And Method For Measuring Strain In Bragg Gratings", + "Patent Expiration Date": "03/24/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15943-1", + "Patent Number": 6746410, + "Application SN": "10/121,932", + "Title": "Transducer Assembly To Measure Changes In Circumferential Expansion Of The Human Skull Due To Changes In Intracranial Pressure", + "Patent Expiration Date": "11/16/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15954-1", + "Patent Number": 6376830, + "Application SN": "09/606,120", + "Title": "Single Laser Sweep Full S-Parameter Characterization Of Fiber Bragg Gratings", + "Patent Expiration Date": "06/15/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15959-1", + "Patent Number": 7019621, + "Application SN": "09/753,370", + "Title": "Structural Tailored High Displacement Ferro-Electric Sensors And Actuators", + "Patent Expiration Date": "01/02/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15977-1", + "Patent Number": 6133330, + "Application SN": "09/337,475", + "Title": "Polyimide Foam From Monomeric Solutions", + "Patent Expiration Date": "05/21/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-15990-1", + "Patent Number": 6551251, + "Application SN": "09/784,413", + "Title": "Dual Transmission Interface For Passive Fetal Heart Monitoring", + "Patent Expiration Date": "02/13/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16001-1", + "Patent Number": 7371358, + "Application SN": "10/975,117", + "Title": "Catalyst For Treatment And Control Of Post-Combustion Emissions", + "Patent Expiration Date": "10/25/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16005-1", + "Patent Number": 6426496, + "Application SN": "09/648,529", + "Title": "High Precision Solid State Wavelength Monitor", + "Patent Expiration Date": "11/26/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16012-1-CU", + "Patent Number": 6834125, + "Application SN": "09/888,701", + "Title": "Improvement To The Multiscale Retinex With Color Restoration", + "Patent Expiration Date": "06/25/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16020-1", + "Patent Number": 6629446, + "Application SN": "09/758,115", + "Title": "Single Vector Force Balance Calibration System", + "Patent Expiration Date": "01/26/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16079-1", + "Patent Number": 6939940, + "Application SN": "09/757,398", + "Title": "Liquid Crystalline Thermosets From Oligo-Esters, Ester-Imides And Ester-Amides", + "Patent Expiration Date": "01/05/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16083-1", + "Patent Number": 8062129, + "Application SN": "11/536,811", + "Title": "A Method And System For Multi-Player Game Playing Where Physiological Characteristics Of The Players Modulate Their Relative Advantage Over Opponents Or Competitors", + "Patent Expiration Date": "05/22/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16116-1", + "Patent Number": 6888346, + "Application SN": "10/21,683", + "Title": "Giant Magnetoresistive Based Self-Nulling Probe For Deep Flaw Detection", + "Patent Expiration Date": "11/28/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16176-2", + "Patent Number": 7109287, + "Application SN": "10/988,407", + "Title": "Space Environmentally Durable Polyimides And Copolyimides", + "Patent Expiration Date": "03/03/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16220-1", + "Patent Number": 6867533, + "Application SN": "09/696,527", + "Title": "Shaping, Tuning, And Positioning Membrane Structures Using Electroactive Polymer Actuators", + "Patent Expiration Date": "10/23/2020" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16231-1-CU", + "Patent Number": 7092539, + "Application SN": "09/997,113", + "Title": "MEMS Based Acoustic Array", + "Patent Expiration Date": "11/28/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16256-1", + "Patent Number": 8628333, + "Application SN": "11/129,756", + "Title": "Method And System For Training Psychophysiological Skills Conducive To Optimal Performance Through Perturbation Of Training Tasks, Environments And Devices", + "Patent Expiration Date": "08/27/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-16256-1-CON", + "Patent Number": 0, + "Application SN": "14/153,434", + "Title": "Method And System For Training Psychophysiological Skills Conducive To Optimal Performance Through Perturbation Of Training Tasks, Environments And Devices", + "Patent Expiration Date": "05/13/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16299-1", + "Patent Number": 7871682, + "Application SN": "10/956,520", + "Title": "Composite Roll Press And Processes", + "Patent Expiration Date": "12/07/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16307-1-SB", + "Patent Number": 7390768, + "Application SN": "10/056,845", + "Title": "Methodology For The Effective Stabilization Of Tin-Oxide-Based Oxidation/Reduction Catalysts", + "Patent Expiration Date": "01/22/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16307-2", + "Patent Number": 7985709, + "Application SN": "10/956,515", + "Title": "Methodology For The Effective Stabilization Of Tin-Oxide-Based Oxidation/Reduction Catalysts", + "Patent Expiration Date": "04/16/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-16308-2", + "Patent Number": 0, + "Application SN": "12/726,403", + "Title": "Catalyst For Decomposition Of Nitrogen Oxides (Divisional of LAR 16308-1-CU)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16311-1", + "Patent Number": 6777525, + "Application SN": "10/115,812", + "Title": "Heat, Moisture, Chemical Resistant Polyimide Compositions And Methods For Making And Using The Same", + "Patent Expiration Date": "04/01/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16323-1", + "Patent Number": 7253903, + "Application SN": "11/27,930", + "Title": "Method To Linearize Non-Linear Physical Measurements", + "Patent Expiration Date": "06/24/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16324-1", + "Patent Number": 6714132, + "Application SN": "10/011,229", + "Title": "Proximity Sensor", + "Patent Expiration Date": "11/27/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16324-2", + "Patent Number": 7106203, + "Application SN": "10/783,486", + "Title": "Self-Activating System And Method For Alerting When An Object Or Person Is Left Unattended", + "Patent Expiration Date": "11/27/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16326-1", + "Patent Number": 7060991, + "Application SN": "10/410,605", + "Title": "Method For Measuring Thickness Of Small Radius Of Curvature Structures Using A Thermal Line Scanner", + "Patent Expiration Date": "04/10/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16332-1-CU", + "Patent Number": 6842543, + "Application SN": "09/888,816", + "Title": "Method Of Improving A Digital Image Having White Zones", + "Patent Expiration Date": "06/25/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16363-1", + "Patent Number": 6856073, + "Application SN": "10/390,675", + "Title": "Radial Electric Field Piezo-Diaphragm Fluidic Control Systems", + "Patent Expiration Date": "03/13/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16383-1-NP", + "Patent Number": 7588699, + "Application SN": "10/288,797", + "Title": "Electrically Conductive, Optically Transparent Polymer/Carbon Nanotube Composites And Process For Preparation Thereof", + "Patent Expiration Date": "07/02/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16383-2", + "Patent Number": 7972536, + "Application SN": "12/546,724", + "Title": "Electrically Conductive, Optically Transparent Polymer/Carbon Nanotube Composites And Process For Preparation Thereof", + "Patent Expiration Date": "10/12/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16390-1-SB", + "Patent Number": 7318915, + "Application SN": "10/342,660", + "Title": "Ruthenium Stabilization Mechanism For Next Generation Oxidation And Reduction Catalyst Systems", + "Patent Expiration Date": "01/13/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16393-1", + "Patent Number": 6919669, + "Application SN": "10/392,491", + "Title": "Sonic Transducers And Sensors Using Radial Field Diaphragms", + "Patent Expiration Date": "05/31/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16406-1-CU", + "Patent Number": 7491169, + "Application SN": "10/805,816", + "Title": "Ultrasonic Method And Means To Assess Compartment Syndrome (Hyper Pressure States In Arm, Leg Muscle/Tendon Compartments)", + "Patent Expiration Date": "09/20/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16409-1", + "Patent Number": 8015819, + "Application SN": "11/536,790", + "Title": "Wet Active Chevron Nozzle For Controllable Jet Noise Reduction", + "Patent Expiration Date": "09/17/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16432-1", + "Patent Number": 7692116, + "Application SN": "10/188,525", + "Title": "Synthesis Of Carbon Nanotubes Using High Average Power Ultrafast Laser Ablation", + "Patent Expiration Date": "07/03/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16437-1-NP", + "Patent Number": 7169374, + "Application SN": "11/129,751", + "Title": "Templated Growth Of Carbon Nanotubes", + "Patent Expiration Date": "05/11/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16440-1", + "Patent Number": 6740048, + "Application SN": "10/263,285", + "Title": "Method Of Determining Intracranial Pressure From Skull Expansion Measurements", + "Patent Expiration Date": "09/25/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16475-1", + "Patent Number": 7194912, + "Application SN": "10/890,843", + "Title": "Carbon Nanotube-Based Structural Health Monitoring Sensor", + "Patent Expiration Date": "08/07/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16496-1", + "Patent Number": 7104498, + "Application SN": "10/867,114", + "Title": "Blown Channel-Wing System For Thrust Deflection And Force/Moment Generation", + "Patent Expiration Date": "10/03/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16499-1", + "Patent Number": 7491428, + "Application SN": "10/730,188", + "Title": "Method for the controlled deposition and alignment of single walled carbon nanotubes", + "Patent Expiration Date": "11/15/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16510-1", + "Patent Number": 6773407, + "Application SN": "10/263,286", + "Title": "Non-Invasive Method Of Determining Absolute Intracranial Pressure", + "Patent Expiration Date": "12/25/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16516-1", + "Patent Number": 6879893, + "Application SN": "10/675,502", + "Title": "Autonomous Health Monitoring Architecture Hardware", + "Patent Expiration Date": "09/30/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16517-1", + "Patent Number": 7048228, + "Application SN": "10/678,474", + "Title": "Partial-Span Slotted Wing For Transonic Aircraft", + "Patent Expiration Date": "10/03/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16532-1", + "Patent Number": 7334998, + "Application SN": "11/5,624", + "Title": "Low-Noise Fan Exit Guide Vanes", + "Patent Expiration Date": "12/06/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16538-1", + "Patent Number": 7675619, + "Application SN": "12/129,967", + "Title": "Micro-LiDAR For In-Flight Flow Velocimetry And Boundary Layer Control", + "Patent Expiration Date": "11/11/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16549-1", + "Patent Number": 7262543, + "Application SN": "10/943,655", + "Title": "Inductor (L)-Capacitor ( C ) (aka, LC) Sensor Circuit For Piezo Material Monitoring", + "Patent Expiration Date": "04/17/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-16565-1", + "Patent Number": 0, + "Application SN": "13/020,025", + "Title": "e-Sensor: Quantitative Imaging of Electric Fields and Electric Potentials", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16566-1", + "Patent Number": 7285932, + "Application SN": "10/975,119", + "Title": "Method And Apparatus For Loss Of Control Inhibitor Systems", + "Patent Expiration Date": "10/27/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16571-1", + "Patent Number": 7075295, + "Application SN": "10/839,448", + "Title": "LC Sensing Element For Closed Cavities Having Low Radio Frequency Transmissivity", + "Patent Expiration Date": "04/30/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16571-2", + "Patent Number": 7589525, + "Application SN": "11/421,886", + "Title": "Magnetic Field Response Sensor For Conductive Media", + "Patent Expiration Date": "09/26/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16571-3", + "Patent Number": 7759932, + "Application SN": "12/533,520", + "Title": "Magnetic Field Response Sensor For Conductive Media", + "Patent Expiration Date": "07/31/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16573-1", + "Patent Number": 7129467, + "Application SN": "10/943,831", + "Title": "Carbon Nanotube Based Light Sensor", + "Patent Expiration Date": "09/29/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16575-1", + "Patent Number": 7181942, + "Application SN": "10/943,649", + "Title": "Instrumented Crimping Tool For Critical Wiring Applications", + "Patent Expiration Date": "11/24/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16605-1", + "Patent Number": 7623993, + "Application SN": "10/731,742", + "Title": "Energy-extraction-based active noise control system", + "Patent Expiration Date": "11/27/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16615-1", + "Patent Number": 6956066, + "Application SN": "10/779,552", + "Title": "Polyimide Foams", + "Patent Expiration Date": "02/11/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16615-2", + "Patent Number": 7541388, + "Application SN": "11/124,640", + "Title": "Polyimide Foams", + "Patent Expiration Date": "05/05/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16616-1", + "Patent Number": 7758927, + "Application SN": "10/956,704", + "Title": "Laser-Induced Fabrication Of Metallic Interlayers And Patterns In Polyimide Films", + "Patent Expiration Date": "09/30/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16640-1", + "Patent Number": 8089677, + "Application SN": "12/135,180", + "Title": "Programmable Smart Grating Device With Quantum Aperture Array", + "Patent Expiration Date": "08/05/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16696-1", + "Patent Number": 7048235, + "Application SN": "10/678,397", + "Title": "Slotted Aircraft Wing (a.k.a. Full Span Slotted Wing)", + "Patent Expiration Date": "10/03/2023" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16698-1", + "Patent Number": 7394181, + "Application SN": "11/76,824", + "Title": "High Performance High Efficiency Hybrid Actuator Systems (HYBAS)", + "Patent Expiration Date": "03/04/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16736-1", + "Patent Number": 7962252, + "Application SN": "11/422,984", + "Title": "Semi Autonomous Flight System With Avionics Sensor Board, Processing Board, And Flight Control Board", + "Patent Expiration Date": "04/07/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16845-1", + "Patent Number": 8083986, + "Application SN": "12/315,520", + "Title": "Advanced Thermo-Electric Materials with Nano-Voids", + "Patent Expiration Date": "12/04/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16854-1", + "Patent Number": 7381186, + "Application SN": "10/911,755", + "Title": "Ultrasonic Method And Means To Assess Compartment Syndrome Part B", + "Patent Expiration Date": "08/02/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16858-1", + "Patent Number": 7667847, + "Application SN": "11/533,921", + "Title": "Thin, High-Contrast Targets for Ultralightweight Structures", + "Patent Expiration Date": "12/15/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16867-1", + "Patent Number": 7402264, + "Application SN": "11/076,460", + "Title": "Electroactive polymer-carbon nanotube-ceramic nanocomposites", + "Patent Expiration Date": "02/27/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17548-1", + "Patent Number": 8236413, + "Application SN": "12/166,852", + "Title": "Fail Safe High-Temperature Composite Structure", + "Patent Expiration Date": "07/07/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16867-2", + "Patent Number": 7527751, + "Application SN": "12/109,490", + "Title": "Sensing/Actuating Materials Made From Carbon Nanotube Polymer Composites And Methods For Making Same", + "Patent Expiration Date": "04/25/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16868-1", + "Patent Number": 7341883, + "Application SN": "11/242,415", + "Title": "Lattice Matched SiGe Layer On Single Crystalline Sapphire Substrate", + "Patent Expiration Date": "09/27/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16871-1", + "Patent Number": 6413227, + "Application SN": "09/459,384", + "Title": "Optimization Of Ultrasonic Method For Assessment Of Changes In Intracranial Pressure Through Measurement Of Skull Expansion", + "Patent Expiration Date": "12/02/2019" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16872-1", + "Patent Number": 7514726, + "Application SN": "11/387,086", + "Title": "Graded Indexed SiGe Layers on Lattice Matched SiGe Layers on Sapphire", + "Patent Expiration Date": "06/10/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16874-1", + "Patent Number": 7723464, + "Application SN": "11/674,321", + "Title": "Novel Aromatic/Aliphatic Diamine Derivatives For Advanced Compositions And Polymers", + "Patent Expiration Date": "02/13/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16877-1", + "Patent Number": 7186367, + "Application SN": "11/110,996", + "Title": "Double-Vacuum Bag (DVB) Process For Volatile Management In Resin Matrix Composite Manufacturing", + "Patent Expiration Date": "07/08/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16885-1", + "Patent Number": 7890311, + "Application SN": "11/177,664", + "Title": "Method Of Simulating Flow-Through Area Of A Pressure Regulator", + "Patent Expiration Date": "12/15/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16886-1", + "Patent Number": 7375808, + "Application SN": "11/536,120", + "Title": "Dual Sensing Capable Germ Or Toxic Chemical (GTC) Sensor Using Quantum Aperture Array With Surface Plasmon Polariton (SPP)", + "Patent Expiration Date": "09/28/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16900-1", + "Patent Number": 7278324, + "Application SN": "11/155,923", + "Title": "CNT based crack growth detector and strain field monitor", + "Patent Expiration Date": "08/07/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16906-1", + "Patent Number": 8529825, + "Application SN": "12/928,128", + "Title": "Fabrication of Nanovoid-imbedded Bismuth Telluride with Low Dimensional System", + "Patent Expiration Date": "02/01/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16907-1", + "Patent Number": 7783060, + "Application SN": "11/126,518", + "Title": "A Deconvolution Approach For The Mapping Of Acoustic Sources (DAMAS) Determined From Phased Microphone Arrays", + "Patent Expiration Date": "03/27/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16908-1", + "Patent Number": 7086593, + "Application SN": "10/839,445", + "Title": "Magnetic Field Response Measurement Acquisition System (Includes LAR-16138-1, LAR-16554-1, LAR-16591-1, LAR-16614-1, LAR-16617-1, & LAR-16908-1)", + "Patent Expiration Date": "05/04/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16946-1", + "Patent Number": 7484930, + "Application SN": "11/169,256", + "Title": "Blowing Flap Side Edge", + "Patent Expiration Date": "07/01/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16950-1", + "Patent Number": 7379231, + "Application SN": "11/470,771", + "Title": "Ferroelectric Light Control Device", + "Patent Expiration Date": "09/07/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16958-1", + "Patent Number": 7510802, + "Application SN": "11/371,575", + "Title": "Fabrication of Multilayer Ferritin Array for Bionanobattery", + "Patent Expiration Date": "08/24/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16970-1", + "Patent Number": 7231832, + "Application SN": "11/229,439", + "Title": "Method For Determining Cracks On And Within Composite Panels", + "Patent Expiration Date": "12/02/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-16974-1", + "Patent Number": 7047807, + "Application SN": "11/203,583", + "Title": "Methods Of Mounting Erectable, Flexible And Fixed Magnetic Field Response Sensors", + "Patent Expiration Date": "08/08/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17003-1", + "Patent Number": 7467921, + "Application SN": "11/239,436", + "Title": "Rotor Blade Vortex Management Via Boundary Layer Separation Control", + "Patent Expiration Date": "09/22/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17013-1", + "Patent Number": 7647771, + "Application SN": "11/374,480", + "Title": "Thermally Driven Miniature Piston Actuator", + "Patent Expiration Date": "11/12/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17017-1", + "Patent Number": 7537182, + "Application SN": "11/250,700", + "Title": "Enhanced Separation Control Via Simultaneous Multiple-Location Forcing", + "Patent Expiration Date": "06/18/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17032-1", + "Patent Number": 7321185, + "Application SN": "11/370,377", + "Title": "A New Concept For Active Bistable Twisting Structures", + "Patent Expiration Date": "03/06/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17044-1", + "Patent Number": 7558371, + "Application SN": "12/254,150", + "Title": "Applications Of Twin-Detection XRD Methods On SiGe (111) Layers On Sapphire (0001) Substrate", + "Patent Expiration Date": "10/20/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17073-1", + "Patent Number": 7580323, + "Application SN": "11/419,818", + "Title": "Interdigitated Electrode Actuators For Straining Optical Fibers (IDEAS)", + "Patent Expiration Date": "05/27/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17088-1", + "Patent Number": 0, + "Application SN": "13/032,045", + "Title": "Nanotubular Toughening Inclusions For Improved Mechanical Reinforcement", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17112-1", + "Patent Number": 7507472, + "Application SN": "11/81,888", + "Title": "Multi-Layer Electroactive Devices", + "Patent Expiration Date": "09/08/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17116-1", + "Patent Number": 7506541, + "Application SN": "11/328,468", + "Title": "Wireless Fuel Volume Measurement Techniques", + "Patent Expiration Date": "10/18/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17126-1", + "Patent Number": 7666939, + "Application SN": "11/432,201", + "Title": "A Method For Producing Stable Dispersions Of Single Walled Carbon Nanotubes In Polymer Matrices Using Noncovalent Interactions", + "Patent Expiration Date": "05/11/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17128-1", + "Patent Number": 7285933, + "Application SN": "11/188,227", + "Title": "Method And Apparatus For Loss Of Control Inhibitor Systems", + "Patent Expiration Date": "07/20/2025" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17135-1", + "Patent Number": 8217143, + "Application SN": "11/827,567", + "Title": "Fabrication of Metal Nanoshells Derived by a Biotemplate", + "Patent Expiration Date": "11/17/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17149-2", + "Patent Number": 8608993, + "Application SN": "13/053,633", + "Title": "A Method For Producing Multifunctional Structural Thermally Stable Nanocomposites With Aligned Carbon Nanotubes", + "Patent Expiration Date": "05/20/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17154-1", + "Patent Number": 7655595, + "Application SN": "11/421,924", + "Title": "Sprayable Low Temperature Oxidation Catalyst Coating Based on Sol-Gel Technology", + "Patent Expiration Date": "08/11/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17154-2", + "Patent Number": 7781366, + "Application SN": "12/369,932", + "Title": "Sol-Gel Based Oxidation Catalyst And Coating System Using Same (Divisional of -1)", + "Patent Expiration Date": "02/12/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17155-1", + "Patent Number": 7255004, + "Application SN": "11/229,438", + "Title": "Wireless Fluid-Lead Measuring Dipstick Assembly (Broken Out Of LAR-16974-1)", + "Patent Expiration Date": "03/22/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17157-1", + "Patent Number": 7507784, + "Application SN": "11/124,508", + "Title": "Liquid Crystalline Thermosets From Ester, Ester-Imide, And Ester-Amide Oligomers", + "Patent Expiration Date": "01/05/2021" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17163-1", + "Patent Number": 7467536, + "Application SN": "11/428,017", + "Title": "Multi-axis Accelerometer Calibration System Using a Cuboidal Attitude Positioning Device", + "Patent Expiration Date": "08/18/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17165-1", + "Patent Number": 7595112, + "Application SN": "11/461,150", + "Title": "Method To Prepare Hybrid Metal/Composite Laminates By Resin Infusion", + "Patent Expiration Date": "02/01/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17168-1", + "Patent Number": 7732998, + "Application SN": "11/462,114", + "Title": "Cylindrical Shaped Micro Fiber Composite (CMFC) Actuators", + "Patent Expiration Date": "09/24/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17169-1", + "Patent Number": 7446459, + "Application SN": "11/486,200", + "Title": "Hybrid Force/Stress Amplified Piezoelectric Energy Harvesting Transducer System", + "Patent Expiration Date": "07/13/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17211-1", + "Patent Number": 0, + "Application SN": "13/557,250", + "Title": "Floating Ultrasonic Transducer Inspection System For Nondestructive Evaluation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17213-1", + "Patent Number": 8020805, + "Application SN": "11/831,233", + "Title": "New Configuration and Power Technology for Application-Specific Scenarios of High Altitude Airships", + "Patent Expiration Date": "03/25/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17224-1", + "Patent Number": 7998368, + "Application SN": "12/272,826", + "Title": "Effective Dispersion of Carbon Nanotubes in an Aqueous Solution and Their Application on Bionanotechnology", + "Patent Expiration Date": "06/04/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17229-1", + "Patent Number": 7760778, + "Application SN": "11/670,044", + "Title": "Thin-film evaporative cooling concept for a solid-state laser diode crystal", + "Patent Expiration Date": "02/01/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17235-1", + "Patent Number": 7414708, + "Application SN": "11/461,569", + "Title": "Multi-Point, Multi-Component Interferometric Rayleigh/Mie Doppler Velocimeter", + "Patent Expiration Date": "08/01/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17237-1", + "Patent Number": 8294989, + "Application SN": "12/512,344", + "Title": "Photonic DART (Densely Accumulated Ray-point by micro-zone-plaTe)", + "Patent Expiration Date": "04/25/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17240-1", + "Patent Number": 8111943, + "Application SN": "12/423,907", + "Title": "Computational Visual Servo:Automatic Measurement and Control for Smart Image Enhancement", + "Patent Expiration Date": "09/14/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17241-1", + "Patent Number": 8018815, + "Application SN": "12/490,747", + "Title": "Optical Data Storage System with Micro Zone Plate", + "Patent Expiration Date": "12/05/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17242-1", + "Patent Number": 8174695, + "Application SN": "12/508,018", + "Title": "MICRO-RING THIN-FILM SPECTROMETER ARRAY", + "Patent Expiration Date": "09/03/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17243-1", + "Patent Number": 8411214, + "Application SN": "12/144,937", + "Title": "Variable Visibility Glasses for Flight Training", + "Patent Expiration Date": "02/01/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17245-1", + "Patent Number": 8344281, + "Application SN": "12/751,075", + "Title": "Use of Beam Deflection to Control Electron Beam Wire Deposition Processes", + "Patent Expiration Date": "04/26/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17257-1", + "Patent Number": 7590904, + "Application SN": "11/531,703", + "Title": "Detecting the loss of configuration access of reprogrammable Field Programmable Gate Array (FPGA) without external circuitry", + "Patent Expiration Date": "10/07/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17267-1", + "Patent Number": 7704553, + "Application SN": "11/710,386", + "Title": "Method of Depositing Metals onto Carbon Allotropes and Compositions Therefrom", + "Patent Expiration Date": "06/26/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17268-1", + "Patent Number": 7647543, + "Application SN": "11/535,574", + "Title": "Integrated mitigation for single event upset (SEU) of reprogrammable field programmable gate arrays (FPGA) operating in radiation environments", + "Patent Expiration Date": "09/27/2026" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17280-1", + "Patent Number": 7159774, + "Application SN": "11/305,854", + "Title": "Magnetic Field Response Measurement Acquisition System", + "Patent Expiration Date": "04/30/2024" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17286-1", + "Patent Number": 8081734, + "Application SN": "12/628,446", + "Title": "Miniature, Low-Power X-Ray Tube Using A Microchannel Electron Generator Electron Source", + "Patent Expiration Date": "02/26/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17290-1", + "Patent Number": 7737867, + "Application SN": "11/696,333", + "Title": "Advance Display Media for Improved Airport Surface Operations", + "Patent Expiration Date": "06/11/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17293-1", + "Patent Number": 7991491, + "Application SN": "11/559,420", + "Title": "Control Device And Method For Generating Control Signals For Technical Devices", + "Patent Expiration Date": "03/04/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17294-1", + "Patent Number": 8430327, + "Application SN": "11/671,089", + "Title": "Low Profile Sensors Using Self-Resonating Inductors", + "Patent Expiration Date": "08/22/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17295-1", + "Patent Number": 7683797, + "Application SN": "11/671,131", + "Title": "System For Providing Damage Detection And Thermal Protection", + "Patent Expiration Date": "02/15/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17300-1", + "Patent Number": 7538860, + "Application SN": "11/840,363", + "Title": "A Method and Apparatus for Determination of the Reflection Wavelength of Multiple Low-Reflectivity Bragg Gratings in a Single Fiber", + "Patent Expiration Date": "12/31/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17307-1", + "Patent Number": 0, + "Application SN": "11/466,569", + "Title": "Low Mass Free Piston Space Radiator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17317-1", + "Patent Number": 8401217, + "Application SN": "11/780,500", + "Title": "Extreme Low Frequency Acoustic Measurement Portable System", + "Patent Expiration Date": "11/29/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17317-2", + "Patent Number": "", + "Application SN": "13/771,735", + "Title": "Extreme Low Frequency Acoustic Measurement System", + "Patent Expiration Date": "07/20/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17318-1", + "Patent Number": 0, + "Application SN": "13/082,734", + "Title": "Preparation of Metal Nanowire Decorated Carbon Allotropes", + "Patent Expiration Date": "08/29/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17321-1", + "Patent Number": 8545986, + "Application SN": "12/043,276", + "Title": "Ultra High-Temperature, Lightweight Insulation Material Compositions And Methods For Making And Using Them", + "Patent Expiration Date": "06/27/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17323-1", + "Patent Number": 0, + "Application SN": "11/757,780", + "Title": "Concept And Design Of Oxygen Band Radar For Surface Air Pressure Remote Sensing", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17325-1", + "Patent Number": 8060350, + "Application SN": "12/56,686", + "Title": "Unsteady aerodynamic reduced-order models (ROMs) for efficient aeroelastic analysis", + "Patent Expiration Date": "03/04/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17327-1", + "Patent Number": 8117013, + "Application SN": "12/002,857", + "Title": "Standardized Radiation Shield Design Method: 2005 HZETRN", + "Patent Expiration Date": "07/05/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17330-1", + "Patent Number": 0, + "Application SN": "11/946,207", + "Title": "Multi Functional Composite And Honeycomb Panels", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17332-1", + "Patent Number": 7958733, + "Application SN": "11/762,827", + "Title": "Active Flow Effectors by Embedded Shape Memory Alloy Actuation", + "Patent Expiration Date": "11/04/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17332-2", + "Patent Number": "", + "Application SN": "13/096,305", + "Title": "Jet Engine Exhaust Nozzle Flow Effector", + "Patent Expiration Date": "07/05/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17335-1", + "Patent Number": 8170234, + "Application SN": "12/108,562", + "Title": "Extension Of DAMAS Phased Array Processing For Spatial Coherence Determination (DAMAS-C)", + "Patent Expiration Date": "03/02/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17346-1", + "Patent Number": 7649439, + "Application SN": "11/465,503", + "Title": "Thermoelectric Devices From Thin Metal System To Include Flexible Substrate And Method Of Making Same", + "Patent Expiration Date": "04/28/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17355-1", + "Patent Number": 8164485, + "Application SN": "11/863,964", + "Title": "A Method of Providing a Synthetic Vision System Flight Management Visualization Display for Aiding Pilot Preview, Rehearsal and/or Review and Real-Time Visual Acquisition of Flight Mission Progress", + "Patent Expiration Date": "06/24/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17361-1", + "Patent Number": 0, + "Application SN": "12/138,709", + "Title": "Airfoil/ Wing Flow Control Using Flexible Extended Trailing Edge", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17365-1", + "Patent Number": 7784732, + "Application SN": "11/958,673", + "Title": "Boundary-Layer-Ingesting S-Duct Diffusing Inlet Flow Control Using Hybrid Vane/Jet Approach at Transonic Flow Conditions", + "Patent Expiration Date": "04/26/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17381-1", + "Patent Number": 8044294, + "Application SN": "12/254,016", + "Title": "Thermoelectric material made with highly oriented twinned alloy of Si, Ge, C, and Sn on the basal plane of trigonal substrate and thermoelectric device made with the same material", + "Patent Expiration Date": "10/11/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17382-1", + "Patent Number": 8052069, + "Application SN": "12/393,238", + "Title": "Advanced High Performance Vertical Hybrid Electroactive Synthetic Jet Actuator (ASJA-V)", + "Patent Expiration Date": "10/18/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17384-1", + "Patent Number": 8662412, + "Application SN": "12/354,808", + "Title": "Advanced Modified High Performance Synthetic Jet Actuator With Optimized Curvature Shape Chamber (ASJA-M)", + "Patent Expiration Date": "10/27/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17385-1", + "Patent Number": 7671306, + "Application SN": "11/589,011", + "Title": "Apparatus For Free Electron Laser Ablative Synthesis Of Carbon Nanotubes", + "Patent Expiration Date": "03/10/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17386-1", + "Patent Number": 0, + "Application SN": "12/851,584", + "Title": "Fine-Grained Targets For Free Electron Laser Synthesis Of Carbon Nanotubes", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17387-1", + "Patent Number": 7663077, + "Application SN": "11/589,010", + "Title": "Process For Optimizing The Yield And Production Rate Of Single-Walled Carbon Nanotubes Using Free Electron Laser Synthesis", + "Patent Expiration Date": "01/23/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17390-1", + "Patent Number": 8235309, + "Application SN": "12/355,782", + "Title": "Advanced High Performance Horizontal Piezoelectric Hybrid Synthetic Jet Actuator (ASJA-H)", + "Patent Expiration Date": "04/02/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17391-1", + "Patent Number": 7792015, + "Application SN": "12/187,458", + "Title": "A Byzantine-Fault Tolerant Self-Stabilizing Protocol for Distributed Clock Synchronization Systems", + "Patent Expiration Date": "08/14/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17402-1", + "Patent Number": 7964698, + "Application SN": "11/935,036", + "Title": "Wholly Aromatic Liquid Crystalline Polyetherimide (LC-PEI) Resin for manufacturing high modulus fibers, films, injection molded articles and foams", + "Patent Expiration Date": "09/27/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17405-1", + "Patent Number": 8226767, + "Application SN": "12/254,134", + "Title": "Hybrid Bandgap Engineering for Rhombohedral Super-Hetero-Epitaxy", + "Patent Expiration Date": "05/11/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17413-2", + "Patent Number": 0, + "Application SN": "12/641,603", + "Title": "Nanoparticle-Containing Thermoplastic Composites and Methods of Preparing Same", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17425-1", + "Patent Number": 8059273, + "Application SN": "12/496,788", + "Title": "Micro Spectrometer for Parallel Light", + "Patent Expiration Date": "08/19/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17427-1", + "Patent Number": 0, + "Application SN": "12/174,360", + "Title": "Tailorable Dielectric Materials with Complex Permittivity Characteristics providing High Dielectric Constants and Low Loss Factors", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17432-1", + "Patent Number": 8112243, + "Application SN": "12/118,172", + "Title": "Forward Voltage Short Pulse (FVSP) Technique for Measuring High Power Laser Diode Array (LDA) Junction Temperature", + "Patent Expiration Date": "11/27/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17433-1", + "Patent Number": 7902815, + "Application SN": "11/856,807", + "Title": "A Multi-Measurement Wheel Sensor", + "Patent Expiration Date": "06/19/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17440-1", + "Patent Number": 7845215, + "Application SN": "11/844,571", + "Title": "Resonant Difference-Frequency Atomic Force Ultrasonic Microscope", + "Patent Expiration Date": "02/03/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17444-1", + "Patent Number": 8042739, + "Application SN": "11/864,012", + "Title": "Wireless Tamper Detection Sensor Requiring No Electrical Connection", + "Patent Expiration Date": "11/08/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17447-1", + "Patent Number": 8002219, + "Application SN": "11/941,119", + "Title": "Multifunctional Boost Protective Cover (MBPC) For A Launch Abort System (LAS)", + "Patent Expiration Date": "01/16/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17455-3", + "Patent Number": "", + "Application SN": "13/938,622", + "Title": "A Nanotube Film Electrode and an Electroactive Device Fabricated with the Nanotube Film Electrode and Methods for Making Same", + "Patent Expiration Date": "10/28/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17469-1", + "Patent Number": 8094306, + "Application SN": "12/487,735", + "Title": "Micro Ring Grating Spectrometer with Moveable Aperture Slit", + "Patent Expiration Date": "08/27/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17477-1", + "Patent Number": 7993567, + "Application SN": "12/131,420", + "Title": "Auxiliary Electrode For Electrospinning Process", + "Patent Expiration Date": "10/02/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17478-1", + "Patent Number": 7883052, + "Application SN": "11/954,452", + "Title": "Integration Of A Turbo-Fan Engine Above An Aircraft's Wing Which Reduces Drag And Community Noise", + "Patent Expiration Date": "09/24/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17480-1", + "Patent Number": 7711509, + "Application SN": "11/930,222", + "Title": "A Method To Calibrate Magnetic Response Fluid-Level Sensors Using Complete Sensor Immersion In Fluid", + "Patent Expiration Date": "03/18/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17485-1", + "Patent Number": 7851062, + "Application SN": "12/124,273", + "Title": "Composition of and Method to Prepare Hybrid Laminates from Metal Plasma Coated Fibers and Polymer Matrix Resins", + "Patent Expiration Date": "09/09/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17485-2", + "Patent Number": 8017190, + "Application SN": "12/906,633", + "Title": "Metal/Fiber Laminate and Fabrication Using A Porous Metal/Fiber Preform", + "Patent Expiration Date": "05/21/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17487-1", + "Patent Number": 8157207, + "Application SN": "11/836,517", + "Title": "Jet Engine Nozzle Exit Configurations And Associated Systems And Methods", + "Patent Expiration Date": "04/15/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17488-1", + "Patent Number": 7814786, + "Application SN": "12/015,626", + "Title": "Thin-Film Sensor For Measuring Liquid-Level And Temperature Having No Electrical Connections", + "Patent Expiration Date": "08/26/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17493-1", + "Patent Number": 8424200, + "Application SN": "12/098,000", + "Title": "Conducting Nanotubes Or Nanostructures Based Composites, Method Of Making Them And Applications", + "Patent Expiration Date": "05/16/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17502-1", + "Patent Number": 8529249, + "Application SN": "11/860,703", + "Title": "Quick Change Ceramic Flame Holder for High Output Torch", + "Patent Expiration Date": "03/14/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17502-1-CON", + "Patent Number": "", + "Application SN": "14/021,325", + "Title": "Flame Holder System", + "Patent Expiration Date": "09/25/2027" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17514-1", + "Patent Number": 8196858, + "Application SN": "12/721,833", + "Title": "Mars Airplane", + "Patent Expiration Date": "02/15/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17526-1", + "Patent Number": 7991595, + "Application SN": "12/138,768", + "Title": "Adaptive Refinement Tools (ARTs) for Tetrahedral Unstructured Grids", + "Patent Expiration Date": "06/07/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17528-1", + "Patent Number": 7878348, + "Application SN": "12/248,339", + "Title": "Lightweight Lunar Surface Remote Manipulator System (LSRMS)", + "Patent Expiration Date": "10/09/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17535-1", + "Patent Number": 8206674, + "Application SN": "12/152,414", + "Title": "High Pressure Boron Vaporization Synthesis Of Few-Walled Boron Nitride Nanotube Fibers", + "Patent Expiration Date": "04/13/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17539-1", + "Patent Number": 8164328, + "Application SN": "12/493,573", + "Title": "Development Of Eddy Current Techniques For The Detection Of Stress Corrosion Cracking In Space Shuttle Primary Reaction Control Thrusters", + "Patent Expiration Date": "01/08/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17547-1", + "Patent Number": 7848381, + "Application SN": "12/366,722", + "Title": "Line Tunable Visible and Ultraviolet Laser", + "Patent Expiration Date": "07/05/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17553-1", + "Patent Number": 8257491, + "Application SN": "12/288,379", + "Title": "NEW RHOMBOHEDRAL ALIGNMENT OF CUBIC SEMICONDUCTOR ON TRIGONAL SUBSTRATE AT A HIGH TEMPERATURE", + "Patent Expiration Date": "07/06/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17554-1", + "Patent Number": 7769135, + "Application SN": "12/288,380", + "Title": "X-ray Diffraction Wafer Mapping Method for Rhombohedral Super-Hetero-Epitaxy", + "Patent Expiration Date": "10/20/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17555-1", + "Patent Number": 0, + "Application SN": "13/020,194", + "Title": "Front-Flight-Path Turbulence & Vortex Detection System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17573-1", + "Patent Number": 7855368, + "Application SN": "12/178,173", + "Title": "Air Coupled Acoustic Thermography Nondestructive Evaluation System And Method", + "Patent Expiration Date": "10/09/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17576-1", + "Patent Number": 7742663, + "Application SN": "12/261,376", + "Title": "Innovative Structural Design And Materials For Transmission To And Protection Of Ultraviolet And Infrared Radiation Sensors", + "Patent Expiration Date": "10/30/2028" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17579-1", + "Patent Number": 8673649, + "Application SN": "12/463,475", + "Title": "Wireless Chemical Sensing Using Changes To An Electrically Conductive Reactant Within Sensor's Magnetic Field", + "Patent Expiration Date": "01/04/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17593-1", + "Patent Number": 8167204, + "Application SN": "12/253,422", + "Title": "Open Circuit Damage Location Sensor Having No Electrical Connections", + "Patent Expiration Date": "10/30/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17608-1", + "Patent Number": 7901611, + "Application SN": "12/274,652", + "Title": "Methodology for calculating fiber distribution during electrospinning", + "Patent Expiration Date": "01/12/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17609-1", + "Patent Number": 8255732, + "Application SN": "12/429,603", + "Title": "A Self-Stabilizing Byzantine-Fault-Tolerant Clock Synchronization Protocol", + "Patent Expiration Date": "12/30/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17629-1", + "Patent Number": 7813599, + "Application SN": "12/390,606", + "Title": "A Method for Shape Determination of Multi-Core Optical Fiber", + "Patent Expiration Date": "02/23/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17634-1", + "Patent Number": 7893602, + "Application SN": "12/328,162", + "Title": "Distributed transducer capable of generating or sensing a transverse point load", + "Patent Expiration Date": "03/14/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17636-1", + "Patent Number": 0, + "Application SN": "13/752,495", + "Title": "PICA on Edge: Edgewise strips of PICA ablator to eliminate gaps in capsule heat shield", + "Patent Expiration Date": "01/29/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17638-1", + "Patent Number": 8508413, + "Application SN": "13/082,839", + "Title": "Fractal Dielectric Microstrip Antenna using Patterned Substrate Material Geometries", + "Patent Expiration Date": "03/02/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17651-1", + "Patent Number": 8259104, + "Application SN": "12/493,666", + "Title": "Domain Decomposition By the Advancing-Partition Method for Parallel Unstructured Grid Generation", + "Patent Expiration Date": "03/09/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17655-1", + "Patent Number": 8111832, + "Application SN": "12/424,793", + "Title": "Local Intelligence Based Impedance Optimization Scheme for Adaptive Noise Reduction", + "Patent Expiration Date": "06/25/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17656-1", + "Patent Number": 8108178, + "Application SN": "12/467,475", + "Title": "DIRECTED DESIGN OF EXPERIMENTS FOR VALIDATING PROBABILITY OF DETECTION CAPABILITY OF NDE SYSTEMS (DOEPOD)", + "Patent Expiration Date": "05/05/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17668-1", + "Patent Number": 0, + "Application SN": "12/322,591", + "Title": "Device for the Large-Scale synthesis of High-Quality Boron Nitride Nanotubes", + "Patent Expiration Date": "02/04/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17681-1", + "Patent Number": 8347479, + "Application SN": "12/849,906", + "Title": "Thermally-Activated Crack Healing Mechanism for Metallic Materials", + "Patent Expiration Date": "04/30/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17681-2", + "Patent Number": "", + "Application SN": "13/719,740", + "Title": "System for Repairing Cracks in Structures", + "Patent Expiration Date": "08/04/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17681-3", + "Patent Number": 8679642, + "Application SN": "14/037,850", + "Title": "System for Repairing Cracks in Structures", + "Patent Expiration Date": "08/04/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17689-1", + "Patent Number": 0, + "Application SN": "12/393,289", + "Title": "Negative Dielectric Constant Material Based on Ion Conducting Materials", + "Patent Expiration Date": "08/20/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17694-1", + "Patent Number": 0, + "Application SN": "12/974,359", + "Title": "A Synthetic Quadrature Phase Detector/Demodulator for Fourier Transform Spectrometers", + "Patent Expiration Date": "03/09/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17695-1", + "Patent Number": 8658004, + "Application SN": "12/470,689", + "Title": "Vapor-Barrier Vacuum Isolation System", + "Patent Expiration Date": "08/01/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17696-1", + "Patent Number": 0, + "Application SN": "12/543,686", + "Title": "Asymmetric Dielectric Elastomer Composite Material", + "Patent Expiration Date": "03/16/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17705-1", + "Patent Number": 8672107, + "Application SN": "13/042,655", + "Title": "Tunable damper capable of tailoring the structural damping for individual modes of vibration using minimal space and minimal impact on the system frequencies and mode shapes.", + "Patent Expiration Date": "11/28/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17709-1", + "Patent Number": 7912101, + "Application SN": "12/628,423", + "Title": "Increased Efficiency Nonlinear Optical Interactions", + "Patent Expiration Date": "12/01/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17711-1", + "Patent Number": 8179203, + "Application SN": "12/569,984", + "Title": "Wireless Electrical Applications/Devices Using floating Electrodes Electromagnetically Coupled to Open-Circuit Devices", + "Patent Expiration Date": "07/09/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17723-1", + "Patent Number": 0, + "Application SN": "12/699,334", + "Title": "Novel material for wound healing applications.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17724-1", + "Patent Number": 8378659, + "Application SN": "12/703,221", + "Title": "Electroactive polymer fibers for structural health monitoring.", + "Patent Expiration Date": "01/22/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17735-1", + "Patent Number": 8490463, + "Application SN": "12/881,431", + "Title": "Assessment and Calibration of Crimp Tool Equipped with Ultrasonic Analysis, including Phantom Construction", + "Patent Expiration Date": "10/22/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17736-1", + "Patent Number": 8147920, + "Application SN": "12/370,755", + "Title": "Controlled Deposition And Alignment Of Carbon Nanotubes (Continuation of LAR 16499-1)", + "Patent Expiration Date": "02/13/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17738-1", + "Patent Number": 0, + "Application SN": "12/685,280", + "Title": "Sensory Metallic Materials", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17743-1", + "Patent Number": 8473663, + "Application SN": "13/011,198", + "Title": "Reconfigurable Peripheral Component Interconnect local bus controller and target design.", + "Patent Expiration Date": "10/07/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17745-1", + "Patent Number": 7906043, + "Application SN": "12/550,431", + "Title": "Electrically Conductive, Optically Transparent Polymer/Carbon Nanotube Composites And Process For Preparation Thereof", + "Patent Expiration Date": "11/01/2022" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17877-1", + "Patent Number": "", + "Application SN": "13/277,859", + "Title": "Autonomous Leading-Edge Slat Device for Reduction of Aeroacoustic Noise Associated with Aircraft Wings", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17747-1", + "Patent Number": 0, + "Application SN": "13/029,471", + "Title": "Temperature Sensing Using Temperature Sensitive Dielectric Material in Proximity to Open-Circuit Sensors Having No Electrical Connections", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18090-1", + "Patent Number": "", + "Application SN": "13/786,608", + "Title": "No Moving Part - Variable Frequency Fluidic Oscillator", + "Patent Expiration Date": "03/06/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17747-1-CON", + "Patent Number": "", + "Application SN": "14/193,861", + "Title": "Wireless Temperature Sensor Having No Electrical Connections and Sensing Method for Use Therewith", + "Patent Expiration Date": "02/17/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17748-1", + "Patent Number": 8303922, + "Application SN": "12/546,185", + "Title": "Exfoliation of Hexagonal Boron Nitride", + "Patent Expiration Date": "11/19/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17759-1", + "Patent Number": 7935414, + "Application SN": "12/406,315", + "Title": "Multilayer Electroactive Polymer Composite Material (Continuation of LAR 17112-1)", + "Patent Expiration Date": "03/18/2029" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17766-1", + "Patent Number": 8452073, + "Application SN": "12/750,991", + "Title": "Method for Closed Loop Process Control for Electron Beam Freeform Fabrication and Deposition Processes", + "Patent Expiration Date": "10/02/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17769-1", + "Patent Number": 0, + "Application SN": "12/894,279", + "Title": "Modifying Surface Energy via Laser Ablative Surface Patterning", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17777-1", + "Patent Number": "", + "Application SN": "13/443,940", + "Title": "Process to Fabricate Specific Sized Monodisperse Polystryene Microparticles", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17780-1", + "Patent Number": 0, + "Application SN": "12/387,703", + "Title": "Boron Nitride Nanotube Fibrils and Yarns (Filed by JLabs, their ref: ID 1248/Docket 2025(JSA)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17786-1", + "Patent Number": 0, + "Application SN": "12/964,381", + "Title": "Smart Optics Material Characterization System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17789-1", + "Patent Number": 0, + "Application SN": "12/969,076", + "Title": "Electroactive scaffold", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17791-1", + "Patent Number": 0, + "Application SN": "13/070,552", + "Title": "Apparatus and Method for Selective Enhancement of Surface Plasmon Polaritons to Initiate and Sustain Low Energy Nuclear Reactions in Metal Hydride Systems", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17799-1", + "Patent Number": 8655513, + "Application SN": "13/046,030", + "Title": "Realtime 3-D Image Processing and Enhancement", + "Patent Expiration Date": "05/25/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17800-1", + "Patent Number": 0, + "Application SN": "13/527,638", + "Title": "Method for generating laser linear frequency modulation waveform", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17801-1", + "Patent Number": 0, + "Application SN": "13/566,077", + "Title": "Coherent Doppler lidar for measuring altitude, ground velocity, and air velocity of aircraft and spaceborne vehicles", + "Patent Expiration Date": "08/03/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17813-1", + "Patent Number": 0, + "Application SN": "13/198,817", + "Title": "Durable Joining Technology for Uniformly-Curved Composite Sandwich Structures", + "Patent Expiration Date": "08/17/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17813-1-CON", + "Patent Number": "", + "Application SN": "14/200,708", + "Title": "Systems, Apparatuses, and Methods for Using Durable Adhesively Bonded Joints for Sandwich Structures", + "Patent Expiration Date": "08/05/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17830-1", + "Patent Number": 0, + "Application SN": "12/925,047", + "Title": "Actuators and Sensors Fabricated with Boron Nitride Nanotubes (BNNTs) and BNNT Polymer Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17831-1", + "Patent Number": 8651429, + "Application SN": "13/214,453", + "Title": "Blended Cutout Flap Design for the Reduction of Jet-Flap Interaction Noise", + "Patent Expiration Date": "08/22/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17832-1", + "Patent Number": 0, + "Application SN": "13/214,469", + "Title": "Aircraft Engine Nozzle Systems for Jet Noise Reduction by Acoustic Shielding", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17833-1", + "Patent Number": 0, + "Application SN": "13/214,481", + "Title": "Active Aircraft Pylon Noise Control System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17836-1", + "Patent Number": 8671763, + "Application SN": "12/850,708", + "Title": "Sub-Surface Windscreen for Outdoor Measurement of Infrasound", + "Patent Expiration Date": "02/18/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17841-1", + "Patent Number": 0, + "Application SN": "14/202,699", + "Title": "High Mobility Transport Layer Structures for Rhombohedral Si/Ge/SiGe Devices", + "Patent Expiration Date": "03/10/2034" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17848-1", + "Patent Number": 0, + "Application SN": "13/796,626", + "Title": "Spectroscopy using Electric Permittivity, Magnetic Permeability and Electrical Conductivity Spatial Profiles", + "Patent Expiration Date": "03/12/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17856-1", + "Patent Number": 8198976, + "Application SN": "12/688,309", + "Title": "Flexible Thin Metal Film Thermal Sensing System (CIP of LAR 17346-1)", + "Patent Expiration Date": "09/20/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17857-1", + "Patent Number": 0, + "Application SN": "12/967,690", + "Title": "A GPS-Based Pitot-Static Calibration Method Using Global Output-Error Optimization", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17869-1", + "Patent Number": "", + "Application SN": "13/166,226", + "Title": "Team Electronic Gameplay Combining Different Means of Control", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17886-1", + "Patent Number": "", + "Application SN": "13/324,527", + "Title": "Method and Apparatus to Detect Wire Pathologies Near Crimped Connector", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17887-1", + "Patent Number": "", + "Application SN": "13/743,750", + "Title": "Interrogations Leading to Recertification of Wire Crimps and Other Joining Technologies.", + "Patent Expiration Date": "01/17/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17888-1", + "Patent Number": 8605262, + "Application SN": "13/167,093", + "Title": "Time Shifted PN Codes for CW LIDAR, RADAR, and SONAR", + "Patent Expiration Date": "12/28/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17894-1", + "Patent Number": 8494687, + "Application SN": "13/166,121", + "Title": "3-D Super Resolution Algorithm for Flash LIDAR Image Enhancement", + "Patent Expiration Date": "12/11/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17895-1", + "Patent Number": "", + "Application SN": "13/166,166", + "Title": "Method and System for Physiologically Modulating Videogames or Simulations Which Use Motion-Sensing Input Devices", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17902-1", + "Patent Number": "", + "Application SN": "13/068,329", + "Title": "Neutron and Ultraviolet Radiation Shielding Films Fabricated Using Boron Nitride Nanotubes and Boron Nitride Nanotube Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17906-1", + "Patent Number": "", + "Application SN": "13/272,027", + "Title": "Abnormal Grain Growth Suppression in Aluminum Alloys", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17908-1", + "Patent Number": 8655094, + "Application SN": "13/105,004", + "Title": "New Photogrammetry System to Measure Relative 6-Degree-of-Freedom Motion Between Two Bodies Using Heterogeneous Cameras Having Arbitrary Wide-Angle Lenses with Non-Overlapping Fields of View", + "Patent Expiration Date": "04/23/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17918-1", + "Patent Number": "", + "Application SN": "13/136,216", + "Title": "High Kinetic Energy Penetrator Shielding and High Wear Resistance Materials Fabricated with Boron Nitride Nanotubes (BNNTs) and BNNT Polymer Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17919-1", + "Patent Number": 8661653, + "Application SN": "13/191,882", + "Title": "Z-Shields from Fiber Metal Laminate", + "Patent Expiration Date": "07/27/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17919-2", + "Patent Number": "", + "Application SN": "13/963,484", + "Title": "Z-Shields from Fiber Metal Laminate", + "Patent Expiration Date": "07/27/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18097-1", + "Patent Number": "", + "Application SN": "13/591,320", + "Title": "Arbitrary Shape Initialization of Fiber Optic Shape Sensing Systems", + "Patent Expiration Date": "08/22/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17923-1", + "Patent Number": "", + "Application SN": "13/411,793", + "Title": "A Method of Creating Micro-scale Silver Telluride Grains Covered with Bismuth Nanospheres as Nano-bridges for Thermoelectric Application", + "Patent Expiration Date": "11/14/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17947-1", + "Patent Number": "", + "Application SN": "13/775,809", + "Title": "Linear Fresnel Spectrometer Chip with Gradient Line Grating", + "Patent Expiration Date": "02/25/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17952-1", + "Patent Number": "", + "Application SN": "13/411,891", + "Title": "Multi-Point Interferometric Phase Change Detection Algorithm", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17958-1", + "Patent Number": "", + "Application SN": "13/195,251", + "Title": "Wireless Open-Circuit In-Plane Strain and Displacement Sensors Having No Electrical Connections", + "Patent Expiration Date": "07/16/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17959-1", + "Patent Number": 8087494, + "Application SN": "12/894,326", + "Title": "Method of Making a Composite Panel Having Subsonic Transverse Wave Speed Characteristics (Continuation of LAR 16535-1)", + "Patent Expiration Date": "09/30/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17966-1", + "Patent Number": "", + "Application SN": "13/457,687", + "Title": "Wide Bandwidth Magneto-Resistive Sensor Based Eddy Current Probe", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17967-1", + "Patent Number": "", + "Application SN": "13/293,846", + "Title": "Relaxor Piezoelectric Single Crystal Multilayer Stacks for Energy Harvesting Transducers (RPSEHT)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17972-1", + "Patent Number": "", + "Application SN": "13/200,314", + "Title": "BxCyNz Nanotube Formation via the Pressurized Vapor/Condenser", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17973-1", + "Patent Number": "", + "Application SN": "13/200,316", + "Title": "Efficient Boron Nitride Nanotube (BNNT) and BxCyNz Nanotube Formation via Combined Laser-Gas Flow Levitation (JLab's ref: 2010-09-13-RRW)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17977-1", + "Patent Number": "", + "Application SN": "13/447,513", + "Title": "Variable Stiffness Shape Adaptive Multi-Layered Polymer Composite", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17980-1", + "Patent Number": "", + "Application SN": "13/457,540", + "Title": "Space Utilization Optimization Tools", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17984-1", + "Patent Number": "", + "Application SN": "13/326,779", + "Title": "FLEXible Side Edge Link (FLEXSEL) for Trailing-Edge Flap Aeroacoustic Noise Reduction", + "Patent Expiration Date": "12/15/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17985-1", + "Patent Number": "", + "Application SN": "13/231,386", + "Title": "An Acoustic Beamforming Array Using Feedback-Controlled Microphones for Tuning and Self-Matching of Frequency Response (Michigan State University's ref: TEC2011-0045)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17987-1", + "Patent Number": "", + "Application SN": "13/364,814", + "Title": "A Self-Stabilizing Distributed Clock Synchronization Protocol For Arbitrary Digraphs", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17991-1", + "Patent Number": "", + "Application SN": "13/200,315", + "Title": "Production Rig for the Synthesis of BNNTs via the PVC Method", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-17993-1", + "Patent Number": 8662213, + "Application SN": "13/342,264", + "Title": "Locomotion of Amorphous Surface Robots", + "Patent Expiration Date": "05/06/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17993-2", + "Patent Number": "", + "Application SN": "14/189,019", + "Title": "Locomotion of Amorphous Surface Robots", + "Patent Expiration Date": "01/03/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17994-1", + "Patent Number": "", + "Application SN": "13/273,516", + "Title": "Manufacturing of Low Mass, Large-Scale Hierarchical Thin Film Structural Systems", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-17996-1", + "Patent Number": "", + "Application SN": "14/202,289", + "Title": "Nanostructure Neutron Converter Layer Development", + "Patent Expiration Date": "03/10/2034" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-18006-1", + "Patent Number": 8671551, + "Application SN": "13/363,413", + "Title": "Crimp Quality Assessment from Jaw Position-Ultrasonic Transmission Analysis", + "Patent Expiration Date": "02/01/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18006-2", + "Patent Number": "", + "Application SN": "14/193,086", + "Title": "Crimp Quality Assessment from Jaw Position-Ultrasonic Transmission Analysis", + "Patent Expiration Date": "02/01/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-18016-1", + "Patent Number": 8636407, + "Application SN": "13/029,426", + "Title": "Wireless Temperature Sensor Having No Electrical Connections and Sensing Method For Use Therewith", + "Patent Expiration Date": "11/23/2031" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18021-1", + "Patent Number": "", + "Application SN": "13/417,347", + "Title": "Flap Side Edge Liners for Airframe Noise Reduction", + "Patent Expiration Date": "07/31/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18023-1", + "Patent Number": "", + "Application SN": "13/417,349", + "Title": "Landing Gear Door Liners for Airframe Noise Reduction", + "Patent Expiration Date": "03/12/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18024-1", + "Patent Number": "", + "Application SN": "13/417,351", + "Title": "External Acoustic Liners for Multi-Functional Aircraft Noise Reduction", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18026-1", + "Patent Number": "", + "Application SN": "13/286,715", + "Title": "Synthesis of Novel Copoly(imide oxetane)s with Unique Surface Properties", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18257-1", + "Patent Number": "", + "Application SN": "14/105,757", + "Title": "A Structural Joint With Multi-Axis Load Carrying Capacity", + "Patent Expiration Date": "12/13/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Issued", + "Case Number": "LAR-18032-1", + "Patent Number": 8229716, + "Application SN": "12/981,432", + "Title": "Fast Tracking Methods and Systems for Air Traffic Modeling Using a Monotonic Lagrangian Grid (US Naval Research Laboratory ref: 100148-US2)", + "Patent Expiration Date": "12/29/2030" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18034-1", + "Patent Number": "", + "Application SN": "13/291,372", + "Title": "Compact Active Vibration Control System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18037-1", + "Patent Number": "", + "Application SN": "13/453,717", + "Title": "A Multifunctional Lightning Protection and Detection System for Aerospace Vehicles", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18040-1", + "Patent Number": "", + "Application SN": "13/986,089", + "Title": "Multi-Functional BN-BN Composite", + "Patent Expiration Date": "03/29/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18065-1", + "Patent Number": "", + "Application SN": "13/860,697", + "Title": "Variable Acceleration Force Calibration System", + "Patent Expiration Date": "04/11/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18070-1", + "Patent Number": "", + "Application SN": "13/923,307", + "Title": "Transparent and Ubiquitous Sensing Technology", + "Patent Expiration Date": "06/20/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18071-1", + "Patent Number": "", + "Application SN": "13/923,312", + "Title": "Using Ubiquitous Conductor to Power and Interrogate Wireless Passive Sensors and Construct Sensor Network", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18073-1", + "Patent Number": "", + "Application SN": "13/941,441", + "Title": "Doped Chiral Polymer Negative Index Materials (DCPNIM)", + "Patent Expiration Date": "07/12/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18077-1", + "Patent Number": "", + "Application SN": "13/630,459", + "Title": "Flight Deck Technology and Procedure for Pilots to Generate Flight-Optimizing Trajectory Requests that Avoid Nearby Traffic", + "Patent Expiration Date": "09/28/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18089-1", + "Patent Number": "", + "Application SN": "13/786,713", + "Title": "Synchronized Sweeping Jet Actuators", + "Patent Expiration Date": "03/06/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18127-1", + "Patent Number": "", + "Application SN": "13/913,782", + "Title": "Synergistic Chemical and Topographical Surface Modifications and Articles of Manufacture for Dynamic Insect Adhesion Mitigation", + "Patent Expiration Date": "06/10/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18131-1", + "Patent Number": "", + "Application SN": "13/774,422", + "Title": "Puncture- healing Thermoplastic Resin Carbon Fiber Reinforced Composites towards More Damage/Impact Tolerant Systems", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18132-1", + "Patent Number": "", + "Application SN": "13/673,360", + "Title": "Modeling of Laser Ablation and Plume Chemistry in a Boron Nitride Nanotube Production Rig", + "Patent Expiration Date": "11/09/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18143-1", + "Patent Number": "", + "Application SN": "13/694,286", + "Title": "In-situ Mechanical Property Measurements of Amorphous Carbon-boron Nitride Nanotube", + "Patent Expiration Date": "11/15/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18144-1", + "Patent Number": "", + "Application SN": "13/836,609", + "Title": "Method and System for Physiologically Modulating Videogames and Simulations Which Use Gesture and Body Image Sensing Control Input Devices", + "Patent Expiration Date": "03/15/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18160-1", + "Patent Number": "", + "Application SN": "13/864,396", + "Title": "Tension Stiffened and Tendon Actuated Space Manipulators", + "Patent Expiration Date": "04/17/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18166-1", + "Patent Number": "", + "Application SN": "13/764,062", + "Title": "Reactive Orthotropic Lattice Diffuser (ROLD) for Reducing Aerodynamic Noise from Aircraft Flap Tips", + "Patent Expiration Date": "03/12/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18179-1", + "Patent Number": "", + "Application SN": "13/792,489", + "Title": "Extreme Reduced Instruction Set Computing (xRISC) for High Speed Execution of Computing Algorithms", + "Patent Expiration Date": "03/11/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18183-1", + "Patent Number": "", + "Application SN": "13/834,294", + "Title": "Height Control and Deposition Measurement for the Electron Beam Free Form Fabrication (EBF3) Process", + "Patent Expiration Date": "03/15/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18184-1", + "Patent Number": "", + "Application SN": "13/987,706", + "Title": "Conductive Polymer/Carbon Nanotube Structural Materials and Methods for Making Same", + "Patent Expiration Date": "08/23/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18186-1", + "Patent Number": "", + "Application SN": "12/482,503", + "Title": "Flexible Volumetric Structure", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18202-1", + "Patent Number": "", + "Application SN": "13/713,033", + "Title": "Ground-to-Space Laser Calibration System", + "Patent Expiration Date": "12/13/2032" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18204-1", + "Patent Number": "", + "Application SN": "13/800,379", + "Title": "Quasi-Static Electric Field Generator", + "Patent Expiration Date": "03/13/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18211-1", + "Patent Number": "", + "Application SN": "13/781,918", + "Title": "A Statistically Based Approach to Broadband Liner Design and Assessment", + "Patent Expiration Date": "03/01/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18217-1", + "Patent Number": "", + "Application SN": "13/771,116", + "Title": "A Graphical Acoustic Liner Design and Analysis Tool", + "Patent Expiration Date": "02/20/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18246-1", + "Patent Number": "", + "Application SN": "13/765,714", + "Title": "Tethered Vehicle Control and Tracking System", + "Patent Expiration Date": "02/13/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18266-1", + "Patent Number": "", + "Application SN": "14/079,914", + "Title": "Airborne Wind Profiling Algorithm for Doppler Wind Lidar (APOLO)", + "Patent Expiration Date": "11/14/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18267-1", + "Patent Number": "", + "Application SN": "13/838,260", + "Title": "Method and System for Physiologically Modulating Action Role-playing Open World Video Games and Simulations Which Use Gesture and Body Image Sensing Control Input Devices", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18270-1", + "Patent Number": "", + "Application SN": "14/079,965", + "Title": "Airborne Doppler Wind Lidar Post Data Processing Software DAPS-LV", + "Patent Expiration Date": "11/14/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18301-1", + "Patent Number": "", + "Application SN": "13/838,163", + "Title": "Flap Edge Noise Reduction Fins (FENoRFins)", + "Patent Expiration Date": "03/15/2033" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18318-1", + "Patent Number": "", + "Application SN": "14/191,898", + "Title": "In-Situ Load System (ILS) for Calibrating and Validating Aerodynamic Properties of Scaled Aircraft in Ground-based Aerospace Testing Applications", + "Patent Expiration Date": "02/27/2034" + }, + { + "Center": "NASA Langley Research Center", + "Status": "Application", + "Case Number": "LAR-18374-1", + "Patent Number": "", + "Application SN": "14/072,019", + "Title": "Modulated Sine Waves for Differential Absorption Measurements Using a CW Laser System", + "Patent Expiration Date": "06/23/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-16183-1", + "Patent Number": 5866518, + "Application SN": "08/786,360", + "Title": "PS300 - Self Lubricating Readily Polished High Temperature Composite", + "Patent Expiration Date": "01/16/2017" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-16519-2", + "Patent Number": 6291838, + "Application SN": "09/448,406", + "Title": "Gas Sensing Diode", + "Patent Expiration Date": "11/15/2019" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-16901-1", + "Patent Number": 7190741, + "Application SN": "10/274,756", + "Title": "A Real-Time Signal-To-Noise Ratio Estimation Technique For BPSK And QPSK Modulation Using The Active Communications Channel", + "Patent Expiration Date": "10/21/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17153-1", + "Patent Number": 6550696, + "Application SN": "09/794,794", + "Title": "Lean Direct Injection Combustor/Multi Point Integrate Module Fuel-Air Mixer", + "Patent Expiration Date": "02/27/2021" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17157-1", + "Patent Number": 6869480, + "Application SN": "10/198,668", + "Title": "Method For Production Of Atomic Scale Step Height Reference Specimens With Atomically Flat Surfaces", + "Patent Expiration Date": "07/17/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17166-1", + "Patent Number": 7497443, + "Application SN": "11/121,850", + "Title": "Resilient, Flexible, Pressure-Activated Seal", + "Patent Expiration Date": "05/03/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17167-1", + "Patent Number": 6667725, + "Application SN": "10/196,391", + "Title": "Radio Frequency (RF) Telemetry System For Sensors And Actuators", + "Patent Expiration Date": "07/11/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17170-1", + "Patent Number": 6706549, + "Application SN": "10/124,689", + "Title": "Common-Layered Architecture For Semiconductor Silicon Carbide (CLASSiC) Bulk Fabrication", + "Patent Expiration Date": "04/12/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17182-1", + "Patent Number": 7086648, + "Application SN": "10/652,088", + "Title": "Acoustic Seal", + "Patent Expiration Date": "08/22/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17240-1", + "Patent Number": 7427428, + "Application SN": "10/601,657", + "Title": "Mechanically Improved Interphase Coating For Silicon-Carbide Fiber-Reinforced Silicon-Carbide Matrix Composites", + "Patent Expiration Date": "06/24/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17256-1", + "Patent Number": 6845664, + "Application SN": "10/263,980", + "Title": "MEMS Direct Chip Attach (MEMS-DCA) Packaging Methodologies For Harsh Environments", + "Patent Expiration Date": "10/03/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17256-2", + "Patent Number": 7518234, + "Application SN": "10/926,206", + "Title": "MEMS Direct Chip Attach Packaging Methodologies And Apparatus For Harsh Environments", + "Patent Expiration Date": "08/25/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17269-2", + "Patent Number": 8212138, + "Application SN": "11/696,441", + "Title": "Reverse-Bias Protected Solar Array With Integrated ByPass Battery", + "Patent Expiration Date": "04/04/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17269-3", + "Patent Number": 0, + "Application SN": "13/482,493", + "Title": "Reverse-Bias Protected Solar Array With Integrated ByPass Battery", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17291-1", + "Patent Number": 6784276, + "Application SN": "10/202,643", + "Title": "Improved Processing For Polyimdes Via Concentrated Solid Monomer Reactants Approach", + "Patent Expiration Date": "07/25/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17293-1", + "Patent Number": 7023118, + "Application SN": "10/390,256", + "Title": "A Comprehensive C++ Controller For A Magnetically Supported Vertical Rotor: Version 1.0", + "Patent Expiration Date": "03/12/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17293-2", + "Patent Number": 6809450, + "Application SN": "10/729,580", + "Title": "Software For System For Controlling A Magnetically Levitated Rotor", + "Patent Expiration Date": "12/04/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17299-1", + "Patent Number": 6881820, + "Application SN": "10/147,477", + "Title": "Polyimide Rod-Coil Block Copolymers As Membrane Materials For Ion Conduction", + "Patent Expiration Date": "05/13/2022" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17317-1", + "Patent Number": 7687016, + "Application SN": "10/777,630", + "Title": "Process For Improving Properties Of Silicon Carbide (SiC) Fibers And SiC Fiber-Reinforced Ceramic Matrix Composites", + "Patent Expiration Date": "02/13/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17317-2", + "Patent Number": 0, + "Application SN": "12/709,086", + "Title": "Process For Improving Properties Of Silicon Carbide (SiC) Fibers And SiC Fiber-Reinforced Ceramic Matrix Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17345-2", + "Patent Number": 7813406, + "Application SN": "11/402,997", + "Title": "Temporal Laser Pulse Manipulation Using Multiple Optical Ring Cavities", + "Patent Expiration Date": "04/13/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17383-1", + "Patent Number": 6967462, + "Application SN": "10/455,139", + "Title": "Wireless Consumer Power", + "Patent Expiration Date": "06/05/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17458-2", + "Patent Number": 0, + "Application SN": "13/113,458", + "Title": "Compact Solid-state Entangled Photon Source", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17483-1", + "Patent Number": 7191013, + "Application SN": "10/983,230", + "Title": "Hand Held Device For Wireless Powering And Interrogation Of BioMEMS Sensors And Actuators", + "Patent Expiration Date": "11/08/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17484-5", + "Patent Number": 7268939, + "Application SN": "11/363,300", + "Title": "Tracking Of Cells With A Compact Microscope Imaging System Using Intelligent Controls", + "Patent Expiration Date": "02/24/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17494-1", + "Patent Number": 7458221, + "Application SN": "10/693,850", + "Title": "Self-Sealing, Smart, Variable Area Nozzle (S3VAN) For Dynamic Flow Control In Gas Turbine Engines", + "Patent Expiration Date": "10/23/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17498-1", + "Patent Number": 7187835, + "Application SN": "11/44,063", + "Title": "Selective Wavelength Filtering", + "Patent Expiration Date": "01/28/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17510-1", + "Patent Number": 7416062, + "Application SN": "10/693,853", + "Title": "Torsional Magnetorheological Fluid Resistant Device (TMRFRD)", + "Patent Expiration Date": "10/23/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17517-1", + "Patent Number": 7326027, + "Application SN": "10/856,361", + "Title": "Flow-Field Control-Rods To Stabilize Flow In A Centrifugal Compressor", + "Patent Expiration Date": "05/25/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17520-1", + "Patent Number": 7259692, + "Application SN": "10/931,205", + "Title": "Hybrid Power Management (HPM) Upgrade", + "Patent Expiration Date": "09/01/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17551-1", + "Patent Number": 7410714, + "Application SN": "10/891,599", + "Title": "Unitized Regenerative Fuel Cell System", + "Patent Expiration Date": "07/15/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17561-1", + "Patent Number": 7400096, + "Application SN": "10/894,225", + "Title": "Large Area Permanent Magnet ECR Plasma Source", + "Patent Expiration Date": "07/19/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17589-1", + "Patent Number": 7305935, + "Application SN": "10/925,499", + "Title": "Slotted Antenna Rectangular Waveguide Plasma Source For Ion Beam And Electron Beam Production", + "Patent Expiration Date": "08/25/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17592-1", + "Patent Number": 7704622, + "Application SN": "10/926,457", + "Title": "New Ion Conducting Organic/Inorganic Hybrid Polymers", + "Patent Expiration Date": "08/26/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17595-1", + "Patent Number": 0, + "Application SN": "13/018,611", + "Title": "A Method Of Improving The Thermo-Mechanical Properties Of Fiber-Reinforced Silicon Carbide Matrix Composites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17605-1", + "Patent Number": 8394492, + "Application SN": "10/974,991", + "Title": "Skin Modified Aerogel Monoliths For Improved Ruggedness And Lower Hydrophylicity", + "Patent Expiration Date": "10/28/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17618-1", + "Patent Number": 7015304, + "Application SN": "10/897,279", + "Title": "High Tg Polyimides For Resin Transfer Molding (RTM)", + "Patent Expiration Date": "07/23/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17618-1-REIS", + "Patent Number": "RE43,880", + "Application SN": "11/429,639", + "Title": "Solvent-Free Low Melt Viscosity Imide Oligomers and Thermosetting Polyimide Composites", + "Patent Expiration Date": "05/08/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17618-3", + "Patent Number": "", + "Application SN": "13/952,872", + "Title": "High Tg Polyimides For Resin Transfer Molding (RTM)", + "Patent Expiration Date": "07/29/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17630-1", + "Patent Number": 7534519, + "Application SN": "11/228,185", + "Title": "Bi-Electrode Supported Cell For High Power Density Solid Oxide Fuel Cells", + "Patent Expiration Date": "09/16/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17634-1", + "Patent Number": 0, + "Application SN": "11/228,184", + "Title": "Solid Oxide Fuel Cell Stack Design With Bi-Electrode Supported Cells", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17634-2", + "Patent Number": 0, + "Application SN": "12/860,210", + "Title": "Solid Oxide Fuel Cell Stack Design With Bi-Electrode Supported Cells", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17642-2", + "Patent Number": 7308164, + "Application SN": "11/398,734", + "Title": "Energetic Atomic And Ionic Oxygen Textured Optical Surfaces For Blood Glucose Monitoring", + "Patent Expiration Date": "03/23/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17642-4", + "Patent Number": 7305154, + "Application SN": "11/483,887", + "Title": "Energetic Atomic And Ionic Oxygen Textured Optical Surfaces For Blood Glucose Monitoring", + "Patent Expiration Date": "07/11/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17661-1 with LEW-17765-1", + "Patent Number": 7438030, + "Application SN": "11/213,604", + "Title": "Method of Fabricating Silicon Carbide Corrugated Diaphragms and Modular Actuator", + "Patent Expiration Date": "08/26/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17664-1", + "Patent Number": 7500350, + "Application SN": "11/44,471", + "Title": "Elimination Of Lifetime Limiting Mechanism Of Hall Thrusters", + "Patent Expiration Date": "01/28/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17671-1", + "Patent Number": 7493869, + "Application SN": "11/311,183", + "Title": "Very Large Area/Volume Microwave ECR Plasma And Ion Source", + "Patent Expiration Date": "12/16/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17672-1", + "Patent Number": 7261783, + "Application SN": "10/946,286", + "Title": "Low Density High Creep Resistant Single Crystal Superalloy For Turbine Airfoils", + "Patent Expiration Date": "09/22/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17678-1", + "Patent Number": 7624566, + "Application SN": "11/40,304", + "Title": "Magnetic Circuit For Hall Effect Plasma Accelerator", + "Patent Expiration Date": "01/18/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17694-1", + "Patent Number": 7397978, + "Application SN": "11/180,990", + "Title": "Carrier Structure For Packaging Microphotonic Millimeter-Wave Receiver Based On Lithium Niobate Electro-Optic Resonator Disk Technology", + "Patent Expiration Date": "07/13/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17704-1", + "Patent Number": 7250723, + "Application SN": "11/16,735", + "Title": "Cathode Luminescence Light Source For Broad Band Application In The Visible", + "Patent Expiration Date": "12/21/2024" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17765-1 with LEW-17661-1", + "Patent Number": 7438030, + "Application SN": "11/213,604", + "Title": "Side Sliding Microactuator", + "Patent Expiration Date": "10/21/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17786-1", + "Patent Number": 8197249, + "Application SN": "11/412,935", + "Title": "Fully-Premixed Low-Emissions High-Pressure Multi-fuel Burner", + "Patent Expiration Date": "04/28/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17814-1", + "Patent Number": 7574137, + "Application SN": "11/418,304", + "Title": "Multi-wavelength Time-coincident Optical Communications System", + "Patent Expiration Date": "05/05/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17820-1", + "Patent Number": 7755292, + "Application SN": "11/625,545", + "Title": "Method For Ultraminiature Fiber Light Source", + "Patent Expiration Date": "01/22/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17820-2", + "Patent Number": 8264134, + "Application SN": "12/795,356", + "Title": "Method For Ultraminiature Fiber Light Source", + "Patent Expiration Date": "09/11/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17825-1", + "Patent Number": 8163243, + "Application SN": "11/517,555", + "Title": "Zero G Condensing Heat Exchanger With Integral Disinfection", + "Patent Expiration Date": "09/07/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17826-1", + "Patent Number": 7385692, + "Application SN": "11/412,924", + "Title": "Method And System For Fiber Optic Determination Of Nitrogen And Oxygen Concentrations In Ullage Of Liquid Fuel Tanks", + "Patent Expiration Date": "04/28/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17859-1", + "Patent Number": 7389675, + "Application SN": "11/434,578", + "Title": "Miniaturized Metal (Metal Alloy)/PdOx/SiC Schottky Diode Gas Sensors For Hydrogen And Hydrocarbons Detection At High Temperatures", + "Patent Expiration Date": "05/12/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17859-2", + "Patent Number": 8001828, + "Application SN": "12/143,139", + "Title": "Miniaturized Metal (Metal Alloy) PdOx/Sic Hydrogen And Hydrocarbon Gas Sensors", + "Patent Expiration Date": "06/20/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17877-1", + "Patent Number": 7876276, + "Application SN": "11/499,982", + "Title": "Antenna Near-Field Probe Station Scanner", + "Patent Expiration Date": "08/02/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17877-2", + "Patent Number": "", + "Application SN": "12/857,004", + "Title": "Antenna Near-Field Probe Station Scanner", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17904-1", + "Patent Number": 7425650, + "Application SN": "11/378,553", + "Title": "Syntheis Of Asymmetric Dianhydrides", + "Patent Expiration Date": "03/15/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17904-2", + "Patent Number": 7381849, + "Application SN": "11/890,104", + "Title": "Synthesis Of Asymmetrical Benzophenone Dianhydride And Asymmetrical 6F-Dianhydride And Polyimides Therefrom (ALSO See LEW 18236-1)", + "Patent Expiration Date": "07/19/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17915-1", + "Patent Number": 0, + "Application SN": "12/536,969", + "Title": "Secure Optical Communications Using Quantum Two-Photon Transparency Modulation Spectroscopy", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17916-1", + "Patent Number": 8052854, + "Application SN": "11/754,255", + "Title": "Miniature Amperometric Solid Electrolyte Carbon Dioxide Sensor", + "Patent Expiration Date": "05/25/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17916-2", + "Patent Number": "", + "Application SN": "13/267,978", + "Title": "Miniature Amperometric Solid Electrolyte Carbon Dioxide Sensor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17945-1", + "Patent Number": 0, + "Application SN": "11/677,654", + "Title": "Portable Unit For Metabolic Analysis PUMA", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17951-1", + "Patent Number": 8545786, + "Application SN": "10/621,752", + "Title": "Manufacture Of Porous Net-Shaped Materials Comprising Alpha Or Beta Tricalcium Phosphate Or Mixtures Thereof", + "Patent Expiration Date": "07/16/2023" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17954-1", + "Patent Number": 8016543, + "Application SN": "11/695,435", + "Title": "Composite Case Armor", + "Patent Expiration Date": "04/02/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-17963-1", + "Patent Number": 0, + "Application SN": "11/860,661", + "Title": "Passive Gas/Liquid Separation Within a Fuel Cell or Electrolysis Cell Using A Conductive Porous Separator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17975-1", + "Patent Number": 7382944, + "Application SN": "11/489,813", + "Title": "Aluminization And Hyperthermal Atomic Oxygen Texturing Of Polymethylmethacralate Optical Fibers For Blood Glucose Monitoring", + "Patent Expiration Date": "07/14/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-17991-1", + "Patent Number": 7390161, + "Application SN": "/0", + "Title": "Toughened Composite Structures", + "Patent Expiration Date": "06/24/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18003-1", + "Patent Number": 7583169, + "Application SN": "11/689,770", + "Title": "RF MEMS Switches Utilizing Non-Metallic Thin Film Cantilevers/Bridges With Controlled Stress And Conductivity", + "Patent Expiration Date": "03/22/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18042-1", + "Patent Number": 8067478, + "Application SN": "11/582,693", + "Title": "A Method of Crosslinking Aerogels Using a One-pot Reaction Scheme", + "Patent Expiration Date": "10/16/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18042-2", + "Patent Number": 0, + "Application SN": "13/242,425", + "Title": "A Method of Crosslinking Aerogels Using a One-pot Reaction Scheme", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18043-1", + "Patent Number": 7341040, + "Application SN": "11/486,460", + "Title": "Supercharged Two-Cycle Engines Employing Novel Single Element Reciprocating Shuttle Inlet Valve Mechanisms And With A Variable Compression Ratio", + "Patent Expiration Date": "07/14/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18048-1", + "Patent Number": 0, + "Application SN": "12/285,157", + "Title": "Two And Three Dimensional Near Infrared Subcutaneous Structure Imager Using Adaptive Nonlinear Video Processing", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18049-1", + "Patent Number": 7909897, + "Application SN": "11/946,079", + "Title": "Direct Fuel Impingement Planar-Array-Microreactor", + "Patent Expiration Date": "11/28/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18054-1", + "Patent Number": 7501032, + "Application SN": "11/364,283", + "Title": "High Work Output Ni-Ti-Pt High Temperature Shape Memory Alloys And Associated Processing Methods", + "Patent Expiration Date": "02/28/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18059-1", + "Patent Number": 8242162, + "Application SN": "11/956,848", + "Title": "Fluorescent On-Off Chemical Sensors", + "Patent Expiration Date": "11/30/2019" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18076-1", + "Patent Number": 7999173, + "Application SN": "11/689,431", + "Title": "Dust removal from solar cells", + "Patent Expiration Date": "03/21/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18076-2", + "Patent Number": "", + "Application SN": "13/198,896", + "Title": "Dust Removal from Solar Cells", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18089-1", + "Patent Number": 8077103, + "Application SN": "11/774,574", + "Title": "Cup Cylindrical Waveguide Antenna", + "Patent Expiration Date": "07/06/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18138-1", + "Patent Number": 7904282, + "Application SN": "11/689,874", + "Title": "In-Flight Fault Accommodation Through Automated Control Parameter Changes", + "Patent Expiration Date": "03/22/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18205-1", + "Patent Number": 0, + "Application SN": "12/317,232", + "Title": "Branched Rod-Coil Polyimide-poly(ethylene Oxide) (PEO) Copolymers That Are Cured In The Solid State At Ambient Temperatures", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18207-1", + "Patent Number": 0, + "Application SN": "11/759,570", + "Title": "Circuit For Communication Over DC Power Line Using High Temperature Electronics", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18221-1", + "Patent Number": 7763325, + "Application SN": "11/864,607", + "Title": "A Method For Thermal Spraying Of Coatings Using Resonant Pulsed Combustion", + "Patent Expiration Date": "09/28/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18221-2", + "Patent Number": "", + "Application SN": "12/835,345", + "Title": "A Method For Thermal Spraying Of Coatings Using Resonant Pulsed Combustion", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18236-1", + "Patent Number": 8093348, + "Application SN": "11/894,290", + "Title": "Synthesis Of Asymmetrical Benzophenone Dianhydride And Asymmetrical 6F-Dianhydride And Polyimides Therefrom", + "Patent Expiration Date": "08/22/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18236-2", + "Patent Number": 0, + "Application SN": "13/325,626", + "Title": "Synthesis Of Asymmetrical Benzophenone Dianhydride And Asymmetrical 6F-Dianhydride And Polyimides Therefrom", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18248-1", + "Patent Number": 7791552, + "Application SN": "11/871,237", + "Title": "Cellular Reflectarray Antenna", + "Patent Expiration Date": "10/12/2027" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18248-2", + "Patent Number": 7990327, + "Application SN": "12/874,370", + "Title": "Cellular Reflectarray Antenna", + "Patent Expiration Date": "09/02/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18253-1", + "Patent Number": 8191426, + "Application SN": "12/133,743", + "Title": "Low TCR Nanocomposite Strain Gages", + "Patent Expiration Date": "06/05/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18254-1", + "Patent Number": 7876423, + "Application SN": "12/163,382", + "Title": "Simultaneous Non-Contact Precision Measurement Of Microstructual And Thickness Variation In Dielectric Materials Using Terahertz Energy", + "Patent Expiration Date": "06/27/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18255-1", + "Patent Number": 7630736, + "Application SN": "11/541,102", + "Title": "Autonomous Wireless Sensor Transceiver", + "Patent Expiration Date": "05/09/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18256-1", + "Patent Number": 7688117, + "Application SN": "12/081,762", + "Title": "An N Channel JFET Based Digital Logic Gate Structure Using Resistive Level Shifters And Having Direct Application To High Temperature Silicon Carbide Electronics", + "Patent Expiration Date": "04/21/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18261-1", + "Patent Number": 7933027, + "Application SN": "12/326,436", + "Title": "A Software Platform For Post-Processing Waveform-Based NDE", + "Patent Expiration Date": "12/02/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18291-1", + "Patent Number": 0, + "Application SN": "12/214,114", + "Title": "Adaptive Morphological Feature-Based Object Classifier For A Color Imaging System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18296-1", + "Patent Number": 0, + "Application SN": "13/193,160", + "Title": "Modular Battery Charge Controller", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18313-1", + "Patent Number": 7923715, + "Application SN": "12/336,503", + "Title": "A Novel Nanoionics-based Switch For Radiofrequency (RF) Applications", + "Patent Expiration Date": "12/06/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18313-2", + "Patent Number": 8410469, + "Application SN": "13/050,229", + "Title": "A Novel Nanoionics-based Switch For Radiofrequency (RF) Applications", + "Patent Expiration Date": "03/17/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18324-1", + "Patent Number": 0, + "Application SN": "12/195,358", + "Title": "Semiconductor Metal Oxide Modified Solid Electrolyte Carbon Dioxide Microsensors With Reduced Operation Temperature", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18325-1", + "Patent Number": 8415839, + "Application SN": "12/319,617", + "Title": "External Magnetic Field Reduction Techniquie For Advanced Stirling Radioisotope Generator", + "Patent Expiration Date": "01/09/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18325-2", + "Patent Number": "", + "Application SN": "13/859,179", + "Title": "External Magnetic Field Reduction Techniquie For Advanced Stirling Radioisotope Generator", + "Patent Expiration Date": "01/09/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18338-1", + "Patent Number": 8506787, + "Application SN": "12/533/258", + "Title": "Advancd Lightweight, High-Strength Electrochemical Cell Design and Structures", + "Patent Expiration Date": "07/31/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18340-1", + "Patent Number": 8091445, + "Application SN": "12/431,456", + "Title": "Offset Compound Gear Inline Two-Speed Drive", + "Patent Expiration Date": "04/28/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18340-2", + "Patent Number": 8668613, + "Application SN": "13/346,959", + "Title": "Offset Compound Gear Inline Two-Speed Drive", + "Patent Expiration Date": "01/10/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18356-1", + "Patent Number": 8220989, + "Application SN": "12/571,215", + "Title": "Device for Measuring the Thermal Conductivity of Small, Highly Insulating Materials", + "Patent Expiration Date": "09/30/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18356-2", + "Patent Number": 8573835, + "Application SN": "13/492,181", + "Title": "Device for Measuring the Thermal Conductivity of Small, Highly Insulating Materials", + "Patent Expiration Date": "06/08/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18362-1", + "Patent Number": 7872750, + "Application SN": "12/285,173", + "Title": "Space Radiation Detector with Spherical Geometry", + "Patent Expiration Date": "09/30/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18362-2", + "Patent Number": 8159669, + "Application SN": "12/972,624", + "Title": "Space Radiation Detector with Spherical Geometry", + "Patent Expiration Date": "12/20/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18373-1", + "Patent Number": 8353209, + "Application SN": "12/570,841", + "Title": "A Radio Frequency Tank Eigenmode Sensor For Propellant Quantity Gauging", + "Patent Expiration Date": "02/04/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18426-1", + "Patent Number": 8484980, + "Application SN": "12/894,346", + "Title": "A Free-Jet Dual-Mode Combustor Concept for Wide Operating Range Ramjet Propulsion", + "Patent Expiration Date": "09/30/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18426-2", + "Patent Number": 0, + "Application SN": "13/941,987", + "Title": "A Free-Jet Dual-Mode Combustor Concept for Wide Operating Range Ramjet Propulsion", + "Patent Expiration Date": "07/15/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18432-1", + "Patent Number": 7935601, + "Application SN": "12/584,497", + "Title": "Addendum of Self-Aligned Ion Implant to Design and Processing of SiC High Temperature Transistors for Durable Operation Above 400 C", + "Patent Expiration Date": "09/04/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18432-2", + "Patent Number": 0, + "Application SN": "13/078,510", + "Title": "Addendum of Self-Aligned Ion Implant to Design and Processing of SiC High Temperature Transistors for Durable Operation Above 400 C", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18458-1", + "Patent Number": 8386121, + "Application SN": "12/791,907", + "Title": "Optimal Tuner Selection For Kalman Filter-Based Aircraft Engine Performance Estimation", + "Patent Expiration Date": "06/02/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18461-1", + "Patent Number": 8159238, + "Application SN": "12/570,742", + "Title": "Method and Circuit for In-Situ Health Monitoring of Solar Cells in Space", + "Patent Expiration Date": "09/30/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18461-2", + "Patent Number": "", + "Application SN": "13/448,801", + "Title": "Method and Circuit for In-Situ Health Monitoring of Solar Cells in Space", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18466-1", + "Patent Number": 0, + "Application SN": "12/616,952", + "Title": "Spring Tire", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18473-1", + "Patent Number": 0, + "Application SN": "12/879,713", + "Title": "Ka-Band Waveguide 2-Way Hybrid Combiner for MMIC Amplifiers With Unequal and Arbitrary Power Output Ratio", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18474-1", + "Patent Number": 8609750, + "Application SN": "12/792,380", + "Title": "Selective Clay Placement Within A Silicate Clay-Epoxy Blend Nanocomposite", + "Patent Expiration Date": "06/02/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18476-1", + "Patent Number": 8182741, + "Application SN": "12/544,742", + "Title": "Ball Bearings Comprising Nickel-Titanium And Methods Of Manufacture Thereof", + "Patent Expiration Date": "08/20/2029" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18476-2", + "Patent Number": 0, + "Application SN": "12/544,674", + "Title": "Ball Bearings Comprising Nickel-Titanium And Methods Of Manufacture Thereof", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18477-1", + "Patent Number": 0, + "Application SN": "13/242,300", + "Title": "Graphene Based Reversible Nano-Switch/Sensor Schottky Diode (nanoSSSD) Device", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18483-1", + "Patent Number": 8310671, + "Application SN": "12/893,627", + "Title": "Frame-Transfer Gating (FTG) Raman Spectroscopy for Time-Resolved Multiscalar Combustion Diagnostics", + "Patent Expiration Date": "09/29/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18486-2", + "Patent Number": 0, + "Application SN": "14/168,830", + "Title": "Polyimide Aerogels With Three Dimensional Cross-Linked Structure", + "Patent Expiration Date": "01/30/2034" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18491-1", + "Patent Number": 8209976, + "Application SN": "12/323,091", + "Title": "Shape Memory Based Actuators and Release Mechanisms", + "Patent Expiration Date": "11/25/2028" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18492-1", + "Patent Number": 0, + "Application SN": "13/036,887", + "Title": "Synthesis Methods, Microscopy Characterization and Device Integration of Nanoscale Metal Oxide Semiconductors for Gas Sensing in Aerospace Applications", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18496-1", + "Patent Number": 8283172, + "Application SN": "12/711,465", + "Title": "Process to Produce Iron Nanoparticles - Lunar Dust Simulant Composite", + "Patent Expiration Date": "02/24/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18500-1", + "Patent Number": 0, + "Application SN": "12/848,903", + "Title": "Precision Time Protocol Base Trilateration for Planetary Navigation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18516-1", + "Patent Number": 0, + "Application SN": "13/542,163", + "Title": "Hybrid Gear", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18538-1", + "Patent Number": 8373175, + "Application SN": "12/791,276", + "Title": "Ohmic Contact to N- and P-type Silicon Carbide", + "Patent Expiration Date": "06/01/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18542-1", + "Patent Number": 0, + "Application SN": "12/870,475", + "Title": "Functionalization of Single Wall Carbon Nanotubes (SWCNTs) by Photooxidation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18554-1", + "Patent Number": 0, + "Application SN": "12/845,998", + "Title": "Internal Limit Sensor (ILS)", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18561-1", + "Patent Number": 0, + "Application SN": "12/726,926", + "Title": "NASA PS400: A New High Temperature Solid Lubricant Coating for High Temperature Wear Applications", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18565-1", + "Patent Number": 0, + "Application SN": "13/646,100", + "Title": "Catalytic Microtube Rocket Igniter", + "Patent Expiration Date": "10/05/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18566-1", + "Patent Number": 0, + "Application SN": "12/829,663", + "Title": "Low Density, High Creep Resistant Single Crystal Superalloy with Lower Manufacturing Cost", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18586-1", + "Patent Number": "", + "Application SN": "13/030,342", + "Title": "Shock Sensing Apparatus", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18593-1", + "Patent Number": 8653693, + "Application SN": "13/014,849", + "Title": "Integrated Exciter/Igniter", + "Patent Expiration Date": "01/27/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18594-1", + "Patent Number": 8409372, + "Application SN": "12/874,523", + "Title": "Thermomechanical Methodology for Stabilizing Shape Memory Alloy (SMA) Response", + "Patent Expiration Date": "09/02/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18594-2", + "Patent Number": "", + "Application SN": "13/845,526", + "Title": "Thermomechanical Methodology for Stabilizing Shape Memory Alloy (SMA) Response", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18601-1", + "Patent Number": 8577504, + "Application SN": "12/954,009", + "Title": "Inductive Power Device (IDP)", + "Patent Expiration Date": "11/24/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18604-1", + "Patent Number": "", + "Application SN": "12/894,444", + "Title": "Shock Resistant, Debris Tolerant, Lightweight, Corrosion Proof Bearings, Mechanical Components and Mechanisms Made From Hard, Highly Elastic Materials", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18605-1", + "Patent Number": 8468794, + "Application SN": "12/894,565", + "Title": "Dual-Mode Hybrid-Engine (DMH-Engine): A Next-Generation Electric Propulsion Thruster", + "Patent Expiration Date": "09/30/2030" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18605-2", + "Patent Number": "", + "Application SN": "13/713,907", + "Title": "Dual-Mode Hybrid-Engine (DMH-Engine): A Next-Generation Electric Propulsion Thruster", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18605-3", + "Patent Number": "", + "Application SN": "14/152,125", + "Title": "Dual-Mode Hybrid-Engine (DMH-Engine): A Next-Generation Electric Propulsion Thruster", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18608-1", + "Patent Number": "", + "Application SN": "12/892,339", + "Title": "Liquid Tin Electrodes for Directo Conversion of JP-8 Fuel using the NASA BSC Solid Oxide Fuel Cell", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18614-1", + "Patent Number": "", + "Application SN": "13/303,292", + "Title": "High-Temperature Thermometer Using Cr-Doped GdAlO3 Broadband Luminescence", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18615-1", + "Patent Number": "", + "Application SN": "12/892,278", + "Title": "Purify Nanomaterials By Dissolving Excess Reactants And Catalysts In Ferric Chloride", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18629-1", + "Patent Number": "", + "Application SN": "13/731,314", + "Title": "Electrospray Collection of Lunar Dust", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18631-1", + "Patent Number": "", + "Application SN": "13/218,847", + "Title": "Circuit for Communication Over Power Lines", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18632-1", + "Patent Number": "", + "Application SN": "13/311,987", + "Title": "Method For Fabricating Diamond-Dispersed Fiber-Reinforced Composite Coating On Low Temperature Sliding Thrust Bearing Interfaces", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18634-1", + "Patent Number": "", + "Application SN": "13/134,959", + "Title": "Multi-Parameter Aerosol Scattering Sensor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18636-1", + "Patent Number": 8416007, + "Application SN": "13/098,918", + "Title": "A Source Coupled N Channel JFET Based Digital Logic Gate Structure Using Resistive Level Shifters and Having Direct Application to High Temperature Silicon Carbide Electronics", + "Patent Expiration Date": "05/02/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18639-1", + "Patent Number": "", + "Application SN": "13/112,293", + "Title": "Atomic Oxygen Fluence Monitor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18649-1", + "Patent Number": "", + "Application SN": "12/870,443", + "Title": "Ultracapacitor Based Uninterruptible Power Supply (UPS) System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18652-1", + "Patent Number": "", + "Application SN": "13/476,470", + "Title": "Polarization Dependent Whispering Gallery Modes in Microspheres", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18658-1", + "Patent Number": "", + "Application SN": "13/250,300", + "Title": "Levitated Ducted Fan (LDF) Aircraft Auxiliary Generator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18674-1", + "Patent Number": "", + "Application SN": "13/552,760", + "Title": "Polymer Electrolyte Based Ambient Temperature Oxygen Microsensors with Extremely Low Power Consumption for Enviromental Monitoring Applications", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25349-1", + "Patent Number": 0, + "Application SN": "13/922036", + "Title": "Robonaut Teleoperation System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18691-1", + "Patent Number": 7588746, + "Application SN": "11/431,815", + "Title": "Process and Apparatus for Hydrogen and Carbon Production via Carbon Aerosol-Catalyzed Dissociation of Hydrocarbons", + "Patent Expiration Date": "05/10/2026" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18692-1", + "Patent Number": 7332146, + "Application SN": "11/148,778", + "Title": "Method For Zero Emission Liquid Hydrogen Production From Methane & Landfill Gas", + "Patent Expiration Date": "06/08/2025" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18693-1", + "Patent Number": "", + "Application SN": "/", + "Title": "Process For Hydrogen Production via Integrated Processing of Landfill Gas and Biomass", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18694-1", + "Patent Number": "", + "Application SN": "13/075,879", + "Title": "Discrete Data Qualification System and Method Comprising Noise Series Fault Detection", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18704-1", + "Patent Number": "", + "Application SN": "13/531,763", + "Title": "A Hybrid Power Management (HPM) Based Vehicle Architecture", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18714-1", + "Patent Number": "", + "Application SN": "13/361,220", + "Title": "High Strength Nanocomposite Glass Fibers", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Issued", + "Case Number": "LEW-18717-1", + "Patent Number": 8476979, + "Application SN": "13/178,101", + "Title": "A Novel Wideband GaN MMIC Distributed Amplifier Based Microwave Power Module for Space Communications, Navigation, and Radar", + "Patent Expiration Date": "07/07/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18717-2", + "Patent Number": "", + "Application SN": "13/847,779", + "Title": "A Novel Wideband GaN MMIC Distributed Amplifier Based Microwave Power Module for Space Communications, Navigation, and Radar", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18724-1", + "Patent Number": "", + "Application SN": "13/339,521", + "Title": "VESGEN Software for Mapping and Quantification of Vascular Remodeling in Botanical Plant Leaves", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18732-1", + "Patent Number": "", + "Application SN": "13/514,582", + "Title": "Water Purification by High Voltage, Nanosecond, Non-Equilibrium Plasma: Applications to Human Spaceflight and Terrestrial Point-of-Use", + "Patent Expiration Date": "08/16/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18736-1", + "Patent Number": "", + "Application SN": "13/534,745", + "Title": "Iridium Interfacial Stack (IrIS) Final", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18738-1", + "Patent Number": "", + "Application SN": "13/474,948", + "Title": "Atmospheric Turbulence Modeling for Aero Vehicles", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18752-1", + "Patent Number": "", + "Application SN": "13/686,000", + "Title": "Large Strain Transparent Magneto-active Polymer Nanocomposites", + "Patent Expiration Date": "11/28/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18754-1", + "Patent Number": "", + "Application SN": "13/534,870", + "Title": "Method For Making Measurements Of The Post-Combustion Residence Time In A Gas Turbine Engine", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18761-1", + "Patent Number": "", + "Application SN": "13/247,601", + "Title": "Temperature Sensitive Coating Sensor Based On Hematite", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18762-1", + "Patent Number": "", + "Application SN": "13/364691", + "Title": "Selenium Interlayer for High-efficiency Multijunction Solar Cell", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18768-1", + "Patent Number": "", + "Application SN": "13/788,041", + "Title": "Processing of Nanosensors Using a Sacrificial Template Approach", + "Patent Expiration Date": "03/23/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18769-1", + "Patent Number": "", + "Application SN": "13/537,816", + "Title": "Compact, Lightweight, CMC (Ceramic Matrix Composite)-Based Acoustic Liner for Subsonic Jet Aircraft Engines--Offering High Temperature Capability, Weight Reduction, and Broadband Acoustic Treatment", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18771-1", + "Patent Number": "", + "Application SN": "13/301,249", + "Title": "Integrated Temperature and Capacitive Ablation Recession Rate Sensors", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18785-1", + "Patent Number": "", + "Application SN": "13/246,440", + "Title": "Method to Pre-Stress Shock Resistant Mechanical Components and Mechanisms made from Hard, Highly Elastic Materials", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18789-1", + "Patent Number": "", + "Application SN": "13/771,833", + "Title": "Method to Increase Performance of Foil Bearings Through Passive Thermal Management", + "Patent Expiration Date": "02/27/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18797-1", + "Patent Number": "", + "Application SN": "13/714,906", + "Title": "High Speed, Compliant, Planetary Flywheel Touchdown Bearing", + "Patent Expiration Date": "12/16/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18802-1", + "Patent Number": "", + "Application SN": "13/534,804", + "Title": "Alpha-STREAM Convertor - A Stirling Engine with no moving parts, eliminated streaming losses, high efficiency, low cost fabrication, and electronic wave modulation.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18809-1", + "Patent Number": "", + "Application SN": "13/410,663", + "Title": "Sampling and Control Circuit Board for an Inertial Measurement Unit", + "Patent Expiration Date": "08/03/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18816-1", + "Patent Number": "", + "Application SN": "13/749,773", + "Title": "High Speed Edge Detecting Circuit For Use With Linear Image Sensor", + "Patent Expiration Date": "06/01/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18821-1", + "Patent Number": "", + "Application SN": "13/561,359", + "Title": "Dopant Selective Reactive Ion Etching of Silicon Carbide", + "Patent Expiration Date": "07/30/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18822-1", + "Patent Number": "", + "Application SN": "13/524,327", + "Title": "Planar Modular Package", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18825-1", + "Patent Number": 0, + "Application SN": "13/804,546", + "Title": "Porous Cross-Linked Polyimide-UREA Networks", + "Patent Expiration Date": "03/14/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18837-1", + "Patent Number": "", + "Application SN": "13/527,181", + "Title": "In-Situ Solid Particle Generator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18844-1", + "Patent Number": "", + "Application SN": "13/918,333", + "Title": "Electrospun Nanofiber Coating Of Fiber Materials: A Composite Toughening Approach", + "Patent Expiration Date": "06/14/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18849-1", + "Patent Number": "", + "Application SN": "13/906,521", + "Title": "Paired Threaded Film Cooling Holes for Improved Turbine Film Cooling", + "Patent Expiration Date": "05/31/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18858-1", + "Patent Number": "", + "Application SN": "13/904,513", + "Title": "V-Cess: A Novel Flow Control Method Using A Shaped Recess", + "Patent Expiration Date": "05/29/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18862-1", + "Patent Number": "", + "Application SN": "13/474,972", + "Title": "Cascading TESLA oscillating flow diode for Stirling Engine Gas Bearings", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18864-1", + "Patent Number": "", + "Application SN": "13/756,855", + "Title": "Polyimide Aerogel Thin Films", + "Patent Expiration Date": "02/03/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18873-1", + "Patent Number": "", + "Application SN": "13/968,000", + "Title": "High Temperature Single Crystal Preloader", + "Patent Expiration Date": "08/15/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18887-1", + "Patent Number": "", + "Application SN": "13/756,604", + "Title": "Fuzzy Neuron: Method and Hardware Realization", + "Patent Expiration Date": "02/01/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18889-1", + "Patent Number": "", + "Application SN": "13/713,846", + "Title": "High Speed Idle Engine Control Mode", + "Patent Expiration Date": "12/13/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18890-1", + "Patent Number": "", + "Application SN": "13/871,114", + "Title": "Suppression Of Unwanted Noise And Howl In A Test Configuration Where A Jet Exhaust Is Discharged Into A Duct", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18891-1 with LEW-18611-1 and LEW-18895-1", + "Patent Number": "", + "Application SN": "13/723,598", + "Title": "G6 Flywheel Design", + "Patent Expiration Date": "12/23/2031" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18893-1", + "Patent Number": "", + "Application SN": "13/653,027", + "Title": "Novel Aerogel-Based Antennas (ABA) for Aerospace Applications", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18900-1", + "Patent Number": "", + "Application SN": "", + "Title": "High Efficiency, High Temperature Titanium Heat Pipe Radiator for Space Power and Propulsion Systems", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18902-1", + "Patent Number": "", + "Application SN": "14/094,006", + "Title": "Analog Correlator Based on One Bit Digital Correlator", + "Patent Expiration Date": "12/02/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18903-1", + "Patent Number": "", + "Application SN": "13/923,441", + "Title": "Modeling and Simulation of a Solar Electric Propulsion Vehicle in Near-Earth Vicinity Including Solar Array Degradation", + "Patent Expiration Date": "06/21/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18919-1", + "Patent Number": "", + "Application SN": "13/645,799", + "Title": "Wireless Controlled Chalcogenide Nanoionic Radio Frequency Switch", + "Patent Expiration Date": "04/04/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18923-1", + "Patent Number": "", + "Application SN": "13/963,060", + "Title": "New Power Source For Deep Space Missions- Utilizing The Doubly Exothermic Reaction Between Deuterium And Palladium To Produce Electrical Power", + "Patent Expiration Date": "08/09/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18928-1", + "Patent Number": "", + "Application SN": "", + "Title": "Pt-Ti-Si Simultaneous Ohmic Contacts to N- and P-Type Silicon Carbide", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18934-1", + "Patent Number": "", + "Application SN": "13/900,642", + "Title": "Conditionally Active Min-Max Limit Regulators", + "Patent Expiration Date": "05/23/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18939-1", + "Patent Number": "", + "Application SN": "13/916,797", + "Title": "Magnetostrictive Alternator - Low cost, No moving part, High Efficiency, Oscillating Acoustic Pressure Wave to Electric Power Transducer", + "Patent Expiration Date": "06/13/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18942-1", + "Patent Number": "", + "Application SN": "13/771,920", + "Title": "Adaptive Phase Delay Generator", + "Patent Expiration Date": "02/20/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18949-1", + "Patent Number": "", + "Application SN": "13/923,450", + "Title": "Advanced High Temperature and Fatigue Resistant Environmental Barrier Coating Bond Coat Systems for SiC/SiC Ceramic Matrix Composites", + "Patent Expiration Date": "06/21/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18952-1", + "Patent Number": "", + "Application SN": "", + "Title": "A Novel Real Time Adaptive Filter For The Reduction Of Artifacts In Functional Near Infrared Spectroscopy Signals", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18957-1", + "Patent Number": "", + "Application SN": "14/048,895", + "Title": "Dynamic Range Enhancement Of High-Speed Data Acquisition Systems By Reversible Non-Linear Amplitude Compression", + "Patent Expiration Date": "10/08/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18960-1", + "Patent Number": "", + "Application SN": "13/891,461", + "Title": "Dry Snorkel Cold Immersion Suit for Hypothermia Prevention", + "Patent Expiration Date": "05/11/2032" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18963-1", + "Patent Number": "", + "Application SN": "13/853,308", + "Title": "Flywheel Pulse & Glide System for Vehicles", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18964-1", + "Patent Number": "", + "Application SN": "13/905,333", + "Title": "High Temperature Lightweight Self-Healing Ceramic Composites for Aircraft Engine Applications", + "Patent Expiration Date": "05/30/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18970-1", + "Patent Number": "", + "Application SN": "14/158,080", + "Title": "Methods for Intercalating and Exfoliating Hexagonal Boron Nitride", + "Patent Expiration Date": "01/17/2034" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-18986-1", + "Patent Number": "", + "Application SN": "", + "Title": "Generation Of High Pressure Oxygen Via Electrochemical Pumping In A Multi-Stage Electrolysis Stack", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19013-1", + "Patent Number": "", + "Application SN": "14/095,442", + "Title": "Spoked Wheel Assembly With Two Rotational Modes", + "Patent Expiration Date": "12/03/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19029-1", + "Patent Number": "", + "Application SN": "14/191,708", + "Title": "Superelastic Ternary Ordered Intermetallic Compounds", + "Patent Expiration Date": "02/27/2034" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19040-1", + "Patent Number": "", + "Application SN": "14/193,024", + "Title": "Fast, Large Area, Wide Band Gap UV Photodetector for Cherenkov Light Detection", + "Patent Expiration Date": "02/28/2034" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19045-1", + "Patent Number": "", + "Application SN": "13/968,531", + "Title": "Multimode Directional Coupler for Measurement and Utilization of Harmonic Frequencies from Traveling Wave Tube Amplifiers", + "Patent Expiration Date": "08/16/2033" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19053-1", + "Patent Number": "", + "Application SN": "14/193,719", + "Title": "Process for Preparing Aerogels from Polyamides", + "Patent Expiration Date": "02/28/2034" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19067-1", + "Patent Number": "", + "Application SN": "", + "Title": "Plasma Spray-Physical Vapor Deposition (PS-PVD) of Advanced Environmental Barrier Coatings", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19077-1", + "Patent Number": "", + "Application SN": "", + "Title": "Improved Composite Damage Tolerance and Through Thickness Conductivity By Interleaving Carbon Fiber Veil Nanocomposites", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19080-1", + "Patent Number": "", + "Application SN": "", + "Title": "Crosslinked Polyethylene Aerogels from Low Density Polyethylene, Linear Low Density Polyethylene, and Repurposed Polyethylene", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19098-1", + "Patent Number": "", + "Application SN": "61/866,585", + "Title": "High Temperature, Flexible Composite Seals for Aeronautics and Space Environments Incorporating Aerogel Insulation", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Glenn Research Center", + "Status": "Application", + "Case Number": "LEW-19171-1", + "Patent Number": "", + "Application SN": "61/931,189", + "Title": "Low Power Charged Particle Counter for Space Radiation Monitoring", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-28402-2", + "Patent Number": 5780594, + "Application SN": "08/448,196", + "Title": "Biologically Active Protein Fragments Containing Specific Binding Regions Of Serum Albumin Or Related Proteins", + "Patent Expiration Date": "07/14/2015" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-28985-1", + "Patent Number": 5641681, + "Application SN": "08/422,963", + "Title": "Device And Method For Screening Crystallization Conditions In Solution Crystal Growth", + "Patent Expiration Date": "04/17/2015" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31175-2-CIP", + "Patent Number": 6578851, + "Application SN": "09/693,098", + "Title": "Gasket Assembly For Sealing Mating Surfaces", + "Patent Expiration Date": "10/16/2020" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31243-1", + "Patent Number": 6459822, + "Application SN": "09/364,919", + "Title": "Video Image Stabilization And Registration (VISAR)", + "Patent Expiration Date": "07/26/2019" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31243-2-CON", + "Patent Number": 6560375, + "Application SN": "10/143,539", + "Title": "Video Image Stabilization And Registration", + "Patent Expiration Date": "05/10/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31258-1", + "Patent Number": 6135255, + "Application SN": "09/207,710", + "Title": "Releasable Conical Roller Clutch", + "Patent Expiration Date": "12/09/2018" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31294-2-CIP2", + "Patent Number": 6592687, + "Application SN": "10/196,389", + "Title": "Aluminum Alloy And Article Cast Therefrom", + "Patent Expiration Date": "07/11/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31294-5-CIP", + "Patent Number": 6399020, + "Application SN": "09/688,729", + "Title": "Aluminum-Silicon Alloy Having Improved Properties At Elevated Temperatures And Articles Cast Therefrom", + "Patent Expiration Date": "10/11/2020" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31294-6-CIP", + "Patent Number": 6419769, + "Application SN": "09/749,503", + "Title": "Aluminum-Silicon Alloy Having Improved Properties At Elevated Temperatures And Process For Producing Cast Articles Therefrom", + "Patent Expiration Date": "12/22/2020" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31294-7-CIP", + "Patent Number": 6669792, + "Application SN": "09/800,312", + "Title": "Process For Producing A Cast Article From A Hypereutectic Aluminum-Silicon Alloy", + "Patent Expiration Date": "03/02/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31303-1", + "Patent Number": 6748349, + "Application SN": "09/313,576", + "Title": "Generalized Fluid System Simulation Program (GFSSP) Version 2.01c", + "Patent Expiration Date": "05/07/2019" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31387-1", + "Patent Number": 6361961, + "Application SN": "09/560,532", + "Title": "GRAVITY RESPONSIVE NADH OXIDASE OF THE PLASMA MEMBRANE", + "Patent Expiration Date": "04/25/2020" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31399-1", + "Patent Number": 6658329, + "Application SN": "10/138,887", + "Title": "Addition Of Rangefinder To The Video Guidance Sensor", + "Patent Expiration Date": "06/05/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31413-1", + "Patent Number": 6497355, + "Application SN": "09/690,035", + "Title": "Precision Penetration Control System For The Friction Stir Welding (FSW) Retractable Pin Tool", + "Patent Expiration Date": "10/19/2020" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31475-1", + "Patent Number": 6424470, + "Application SN": "09/616,624", + "Title": "Panoramic Refracting Optic (PRO)", + "Patent Expiration Date": "07/28/2020" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31475-2-DIV", + "Patent Number": 6580567, + "Application SN": "10/173,410", + "Title": "Panoramic Refracting Conical Optic", + "Patent Expiration Date": "06/17/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31488-1", + "Patent Number": 6028693, + "Application SN": "09/7,124", + "Title": "Microresonator And Associated Method For Producing And Controlling Photonic Signals With A Photonic Bandgap Delay Apparatus", + "Patent Expiration Date": "01/14/2018" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31490-1", + "Patent Number": 7118074, + "Application SN": "10/690,161", + "Title": "Electrodynamic Tether System Design For Spacecraft Deorbit", + "Patent Expiration Date": "10/17/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31529-1", + "Patent Number": 7081730, + "Application SN": "10/857,375", + "Title": "Micro-Commanding Servo Motor Controller With Greater Than Fifty Million To One Dynamic Rate Range", + "Patent Expiration Date": "06/19/2024" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31559-1-CON", + "Patent Number": 8127977, + "Application SN": "13/157,895", + "Title": "Phase/Matrix Transformation Weld Process And Apparatus", + "Patent Expiration Date": "11/27/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31559-1-DIV", + "Patent Number": 7980449, + "Application SN": "10/385,168", + "Title": "Phase/Matrix Transformation Weld Process And Apparatus", + "Patent Expiration Date": "11/27/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31559-2-DIV", + "Patent Number": 8225984, + "Application SN": "13/157988", + "Title": "Phase/Matrix Transformation Weld Process And Apparatus", + "Patent Expiration Date": "11/27/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31565-1", + "Patent Number": 6885779, + "Application SN": "09/877,801", + "Title": "Full-Cycle, Low Loss, Low Distortion Phase Modulation From Multi-Layered Dielectric Stack With Terahertz Optical Bandwidth", + "Patent Expiration Date": "08/17/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31584-1", + "Patent Number": 6497091, + "Application SN": "09/877,800", + "Title": "Hypergolic Ignitor Assembly", + "Patent Expiration Date": "06/06/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31584-1-CIP", + "Patent Number": 6845605, + "Application SN": "10/288,800", + "Title": "Hypergolic Ignitor", + "Patent Expiration Date": "01/26/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31593-1", + "Patent Number": 6939610, + "Application SN": "10/212,564", + "Title": "Smart Thermal Management Coating", + "Patent Expiration Date": "09/20/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31596-1", + "Patent Number": 6873762, + "Application SN": "10/118,626", + "Title": "Fabrication Of Fiber-Optic Gratings Over A Wide Range Of Bragg Wavelength And Bandwidth Using A Single Phase Mask", + "Patent Expiration Date": "10/12/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31616-1", + "Patent Number": 6540426, + "Application SN": "09/949,408", + "Title": "Passive Ball Capture Latch Docking Mechanism", + "Patent Expiration Date": "09/04/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31646-1", + "Patent Number": 6860099, + "Application SN": "10/263,297", + "Title": "Liquid Propellant Tracing Impingement Injector", + "Patent Expiration Date": "05/24/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31649-1", + "Patent Number": 7446860, + "Application SN": "11/527,648", + "Title": "Nonintrusive, Remote, Micron Accuracy, Laser Fresnel Ranging System", + "Patent Expiration Date": "10/19/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31698-1", + "Patent Number": 6802999, + "Application SN": "10/173,536", + "Title": "Method Of Fabricating A Protective Crucible Wall Coating Incorporating Designed Multi-Use Channels", + "Patent Expiration Date": "05/02/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31706-1", + "Patent Number": 6886392, + "Application SN": "10/622,174", + "Title": "Single Ball Bearing Lubricant And Material Evaluator", + "Patent Expiration Date": "07/17/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31727-1", + "Patent Number": 6953129, + "Application SN": "10/231,428", + "Title": "Impact And Fire Resistant Coating For Pressure Vessels", + "Patent Expiration Date": "11/07/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31761-1", + "Patent Number": 6802488, + "Application SN": "10/232,974", + "Title": "Electro-Mechanically Actuated Propellant Valve", + "Patent Expiration Date": "01/29/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31768-1", + "Patent Number": 6745942, + "Application SN": "10/214,482", + "Title": "Magnetic Symbology Reader", + "Patent Expiration Date": "08/05/2022" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31776-1", + "Patent Number": 7735265, + "Application SN": "11/780,610", + "Title": "Foam-Rigidized Inflatable Tubular Space Booms", + "Patent Expiration Date": "07/20/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31785-1", + "Patent Number": 7006203, + "Application SN": "10/646,000", + "Title": "Integrated Rangefinding Measurement In Video Guidance Sensor", + "Patent Expiration Date": "08/21/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31789-1", + "Patent Number": 7265476, + "Application SN": "10/975,121", + "Title": "MEMS- Micro-Translation Stage With Indefinite Linear Travel Capability", + "Patent Expiration Date": "11/01/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31807-1", + "Patent Number": 7050161, + "Application SN": "10/637,085", + "Title": "Global Radius Of Curvature Estimation And Control System For Segmented Mirrors (GRoCECS)", + "Patent Expiration Date": "01/07/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31813-1", + "Patent Number": 7802799, + "Application SN": "11/527,653", + "Title": "Joining Metallic To Composite Components", + "Patent Expiration Date": "07/29/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31815-1", + "Patent Number": 7325749, + "Application SN": "10/738,352", + "Title": "Distributed Solid State Programmable Thermostat / Power Controller", + "Patent Expiration Date": "01/29/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31817-1", + "Patent Number": 7515257, + "Application SN": "11/14,455", + "Title": "Short-Range / Long-Range Integrated Target (SLIT) For Video Guidance Sensor Rendezvous And Docking", + "Patent Expiration Date": "06/07/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31823-1-DIV", + "Patent Number": 7095000, + "Application SN": "10/943,827", + "Title": "Radio-Frequency Driven Dielectric Heaters For Non-Nuclear Testing In Nuclear Core Development", + "Patent Expiration Date": "11/27/2024" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31828-1", + "Patent Number": 6918970, + "Application SN": "10/120,226", + "Title": "High Strength Aluminum Alloy For High Temperature Applications", + "Patent Expiration Date": "04/12/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31838-1", + "Patent Number": 7641949, + "Application SN": "10/857,379", + "Title": "Improved Pressure Vessel Impact Resistance Utilizing Filament Wound Hybrid Fibers", + "Patent Expiration Date": "10/15/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31842-1", + "Patent Number": 7347089, + "Application SN": "11/215,749", + "Title": "Gas Volume Contents Within A Container, Smart Volume Instrument", + "Patent Expiration Date": "11/26/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31843-1", + "Patent Number": 7174077, + "Application SN": "10/631,220", + "Title": "Fiber-Coupled Laser Diodes With Even Illumination Pattern", + "Patent Expiration Date": "07/30/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31852-1", + "Patent Number": 7106457, + "Application SN": "10/857,372", + "Title": "Achromatic Shearing Phase Sensor For Phase Alignment Of A Segmented Telescope", + "Patent Expiration Date": "01/21/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31865-1", + "Patent Number": 6888476, + "Application SN": "10/615,369", + "Title": "Advanced Video Guidance Sensor Software", + "Patent Expiration Date": "07/21/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31886-1", + "Patent Number": 6850592, + "Application SN": "10/321,873", + "Title": "Digital Equivalent System (DEDS) For X-Ray Flourescent Spectral Output", + "Patent Expiration Date": "01/08/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31891-1", + "Patent Number": 7375801, + "Application SN": "11/108,140", + "Title": "Video Sensor With Range Measurement Capability", + "Patent Expiration Date": "11/06/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31918-1", + "Patent Number": 7275675, + "Application SN": "10/928,876", + "Title": "Optimal Design Geometry For All Friction Stir Weld Tools", + "Patent Expiration Date": "01/15/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-31944-1", + "Patent Number": 7017812, + "Application SN": "10/730,191", + "Title": "Variable Distance Angular Symbology Reader", + "Patent Expiration Date": "11/26/2023" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32024-1", + "Patent Number": 8297468, + "Application SN": "10/857,380", + "Title": "Liquefied Natural Gas Fuel Tank", + "Patent Expiration Date": "07/13/2021" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32031-1", + "Patent Number": 7738084, + "Application SN": "11/543,284", + "Title": "Fiber Optic Liquid Mass Flow Sensor - Improved Prototype Design", + "Patent Expiration Date": "09/29/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32099-1-CON", + "Patent Number": 8561829, + "Application SN": "13/544,066", + "Title": "Composite Pressure Vessel Including Crack Arresting Barrier", + "Patent Expiration Date": "10/23/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32102-1", + "Patent Number": 7540143, + "Application SN": "11/172,665", + "Title": "Heated Pressure Balls Monopropellant Thermal Rocket Engine Cycle", + "Patent Expiration Date": "12/12/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32105-1-DIV", + "Patent Number": 7568608, + "Application SN": "11/700,972", + "Title": "Ultrasonic Stir Welding Process And Apparatus", + "Patent Expiration Date": "01/29/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32115-1", + "Patent Number": 7686202, + "Application SN": "11/543,287", + "Title": "Gimbling Shoulder For Friction Stir Welding", + "Patent Expiration Date": "06/18/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32136-1", + "Patent Number": 7595841, + "Application SN": "11/174,210", + "Title": "Video Image Stabilization And Registration - Plus (VISAR+)", + "Patent Expiration Date": "12/03/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32137-1", + "Patent Number": 7177164, + "Application SN": "11/376,632", + "Title": "Multi-loop High Voltage Power Supply with Fast Rise/Fall Time", + "Patent Expiration Date": "03/10/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32175-1", + "Patent Number": 7228241, + "Application SN": "11/152,810", + "Title": "An Extended Lee-Kesler Equation-of-State (ELK-EoS) For The Volumetric And Thermodynamic Properties Of Propellant Fluids, Including The Non-Polar Quantum And Polar Fluids", + "Patent Expiration Date": "06/13/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32192-1", + "Patent Number": 7116098, + "Application SN": "11/357,454", + "Title": "Absolute Limit Sensor (ALS)", + "Patent Expiration Date": "02/16/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32208-1", + "Patent Number": 7259981, + "Application SN": "11/296,719", + "Title": "Analog Nonvolatile Computer Memory", + "Patent Expiration Date": "12/14/2025" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32214-1", + "Patent Number": 7418814, + "Application SN": "11/172,666", + "Title": "Dual Expander Cycle Rocket Engine Cycle with an Intermediate Brayton Cycle Heat Exchanger", + "Patent Expiration Date": "12/19/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32228-1", + "Patent Number": 8290435, + "Application SN": "12/241,322", + "Title": "Short Range Antenna / Close Proximity Transmitter and Receiver", + "Patent Expiration Date": "08/17/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32253-1", + "Patent Number": 7469878, + "Application SN": "11/518,733", + "Title": "Magnetorestrictive Valves", + "Patent Expiration Date": "10/17/2026" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32307-1", + "Patent Number": 7908079, + "Application SN": "11/527,658", + "Title": "Portable Runway Intersection Display And Monitoring System", + "Patent Expiration Date": "01/13/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32311-1", + "Patent Number": 7623621, + "Application SN": "12/47,686", + "Title": "Identification And Authentication System Using Integrated Optical And X-ray Fluorescene Spectral Methods", + "Patent Expiration Date": "03/13/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32318-1", + "Patent Number": 8098060, + "Application SN": "12/173,318", + "Title": "SCAPS(Single Coil Absolute Position Sensor) GAPSYN (Inductive Gap Sensor) Digital Signal Conditioning Electronics", + "Patent Expiration Date": "09/29/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32323-1", + "Patent Number": 8169620, + "Application SN": "12/563,819", + "Title": "Sub-Pixel Spatial Resolution Interferometry With Interlaced Stitching", + "Patent Expiration Date": "10/15/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32324-1", + "Patent Number": 7594530, + "Application SN": "11/942,322", + "Title": "Orbital Foamed Metal Extruder", + "Patent Expiration Date": "06/09/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32341-1", + "Patent Number": 8550468, + "Application SN": "12/210,843", + "Title": "High Load Fully Retained Dynamic Cryogenic Seal", + "Patent Expiration Date": "01/09/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32364-1", + "Patent Number": 7808353, + "Application SN": "11/513,433", + "Title": "Plasmoid Thruster for Electrode-less, High Specific Impulse Propulsion", + "Patent Expiration Date": "07/22/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32390-1", + "Patent Number": 7867589, + "Application SN": "11/780,561", + "Title": "Hybrid composite cryogenic tank structure", + "Patent Expiration Date": "10/14/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32400-1", + "Patent Number": 7900436, + "Application SN": "11/780,626", + "Title": "Gas Generator Augmented Expander Cycle Rocket Engine", + "Patent Expiration Date": "01/04/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32402-1", + "Patent Number": 7911174, + "Application SN": "12/39,506", + "Title": "Inexpensive, Rate Insensitive, Linear, Load Compensating System for Hybrid Stepper Motors", + "Patent Expiration Date": "01/25/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32429-1", + "Patent Number": 7807097, + "Application SN": "12/123,170", + "Title": "Orbital Batch Process Foamed Aluminum Facility", + "Patent Expiration Date": "07/11/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32438-1", + "Patent Number": 8004364, + "Application SN": "11/828,563", + "Title": "16-Kilowatt (KW) 2-30MHz Solid State Power Amplifier using innovative combining methods", + "Patent Expiration Date": "11/03/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32439-1", + "Patent Number": 7831225, + "Application SN": "11/828,590", + "Title": "H2O-NaCl based radio frequency power load", + "Patent Expiration Date": "04/07/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32497-1", + "Patent Number": 7848606, + "Application SN": "12/047,805", + "Title": "Reprocessing Non-Oxide Optical Fiber Preforms Utilizing an Axial Magnetic Field", + "Patent Expiration Date": "05/26/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32518-1-CIP", + "Patent Number": "", + "Application SN": "13/452,303", + "Title": "Liquid Propellant Injection Elements with Self-Adjusted Inlet Area for Rocket and Other Combustor-Type Engines Applications", + "Patent Expiration Date": "10/03/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32521-1", + "Patent Number": 7804600, + "Application SN": "12/44,740", + "Title": "Dispersive Filter For Enhancement Of Laser Gyroscopes", + "Patent Expiration Date": "06/10/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32548-1", + "Patent Number": 7409875, + "Application SN": "11/862,793", + "Title": "Optical Hotspot Conductive Fluid Flow Sensor", + "Patent Expiration Date": "09/27/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32558-1", + "Patent Number": 8490470, + "Application SN": "12/569,555", + "Title": "True Shear Parallel Plate Viscometer", + "Patent Expiration Date": "12/04/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32584-1", + "Patent Number": 7929144, + "Application SN": "12/336,260", + "Title": "Local Leak Detection and Health Monitoring of Pressurized Tanks in a Space Environment", + "Patent Expiration Date": "11/17/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32588-1", + "Patent Number": 8052860, + "Application SN": "11/957,051", + "Title": "ELECTROCHEMICALLY-ENHANCED MECHANICAL POLISHING OF OPTICS", + "Patent Expiration Date": "09/06/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32605-1", + "Patent Number": 8309944, + "Application SN": "12/240,626", + "Title": "Grazing Incidence Optics for Neutron Analysis and Imaging", + "Patent Expiration Date": "12/07/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32605-1-CIP", + "Patent Number": 0, + "Application SN": "12/717,450", + "Title": "Novel Grazing Incidence Neutron Optics", + "Patent Expiration Date": "09/29/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32605-1-DIV", + "Patent Number": 8575577, + "Application SN": "13/534,951", + "Title": "Novel Grazing Incidence Neutron Optics", + "Patent Expiration Date": "09/29/2028" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32612-1-CIP", + "Patent Number": "", + "Application SN": "13/796,693", + "Title": "Protective Safety Cover for Pool and Spa Drains", + "Patent Expiration Date": "03/24/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32614-1", + "Patent Number": 464750, + "Application SN": "12/826,887", + "Title": "Magnetostrictive Regulator", + "Patent Expiration Date": "04/03/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32615-1", + "Patent Number": 8132772, + "Application SN": "12/567,451", + "Title": "Avionics/Electronics Box Rail Mount System", + "Patent Expiration Date": "11/27/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32638-1", + "Patent Number": 8291776, + "Application SN": "12/827,515", + "Title": "Magnetostrictive Force-to-Angle Sensor", + "Patent Expiration Date": "03/12/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32642-1", + "Patent Number": 0, + "Application SN": "12/827,598", + "Title": "Cryogenic and Non-Cryogenic Optical Liquid Level Instrument for Stratified Conditions", + "Patent Expiration Date": "04/05/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32651-1", + "Patent Number": 8090484, + "Application SN": "12/403,096", + "Title": "A Planar Translation Device for Solar Sail Spacecraft Attitude Control and Maneuvering", + "Patent Expiration Date": "07/03/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32655-1", + "Patent Number": 0, + "Application SN": "12/862,510", + "Title": "AEROSPACE LASER IGNITION/ABLATION VARIABLE, HIGH PRECISION THRUSTER", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32667-1", + "Patent Number": 8357884, + "Application SN": "12/839,848", + "Title": "Extraction of Water from the Soil of Space Bodies Using Microwave processes", + "Patent Expiration Date": "04/22/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32697-1", + "Patent Number": 8252734, + "Application SN": "12/634,502", + "Title": "Multi Layered or Mixed Element Aqueous Ionic Fluids As Fuel or Lubrication Friction Modifiers", + "Patent Expiration Date": "08/26/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32697-1-CIP", + "Patent Number": 8563487, + "Application SN": "13/525,623", + "Title": "Multi Layered or Mixed Element Aqueous Ionic Fluids As Fuel or Lubrication Friction Modifiers", + "Patent Expiration Date": "12/09/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32715-1", + "Patent Number": 8535440, + "Application SN": "12/758169", + "Title": "Improvement of Crystalline Quality during Melt Growth of Semiconductors by Mechanically Induced Nucleation", + "Patent Expiration Date": "07/18/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32719-1", + "Patent Number": 8564770, + "Application SN": "13/150832", + "Title": "Field-Deployable Spectral Estimator of Trichloroacetic Acid (TCAA) in Plants", + "Patent Expiration Date": "05/18/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32733-1", + "Patent Number": 7621670, + "Application SN": "12/392,867", + "Title": "Unbalanced Flow Distribution Mixer with Flow Metering Capability", + "Patent Expiration Date": "02/25/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32737-1", + "Patent Number": 8448498, + "Application SN": "12/870,468", + "Title": "Hermetic Seal Leak Detection Apparatus", + "Patent Expiration Date": "06/06/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32737-1-CIP", + "Patent Number": "", + "Application SN": "13/874182", + "Title": "Hermetic Seal Leak Detection Apparatus", + "Patent Expiration Date": "08/27/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32748-1", + "Patent Number": 8132961, + "Application SN": "12/397,973", + "Title": "Optimized Length-to-Diameter Ratio Flow Meter", + "Patent Expiration Date": "08/16/2030" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32757-1", + "Patent Number": 0, + "Application SN": "13/118086", + "Title": "Compliant Mechanical Motor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32761-1-CIP", + "Patent Number": "", + "Application SN": "13/673,309", + "Title": "Multi-Channel Flow Plug with Eddy Current Minimization for Metering, Mixing, and Conditioning", + "Patent Expiration Date": "07/23/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32761-1-CON", + "Patent Number": "", + "Application SN": "13/729,861", + "Title": "Multi-Channel Flow Plug with Eddy Current Minimization for Meeting, Mixing, and Conditioning", + "Patent Expiration Date": "07/23/2029" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32777-1", + "Patent Number": 8425751, + "Application SN": "13/020144", + "Title": "Electrodeposited Nickel-Cobalt Alloy Development", + "Patent Expiration Date": "05/31/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32797-1", + "Patent Number": 8330961, + "Application SN": "12/837,173", + "Title": "A compact sensor for in-situ measurements of gas leaks", + "Patent Expiration Date": "08/24/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32803-1", + "Patent Number": 8133768, + "Application SN": "12/560,371", + "Title": "Method of Manufacturing Light Emmitting, Photovoltaic or other Electronic Apparatus", + "Patent Expiration Date": "05/31/2027" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32809-1", + "Patent Number": 0, + "Application SN": "13/369,704", + "Title": "Telemetry encoder/decoder", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32817-1", + "Patent Number": 8290006, + "Application SN": "13/281,025", + "Title": "Variable Power Handheld Laser Torch for Joining Processes", + "Patent Expiration Date": "10/25/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32826-1", + "Patent Number": 8316884, + "Application SN": "12/846,429", + "Title": "Drain System for Pools, Spas, and Tanks. (Reference MFS 32612-1)", + "Patent Expiration Date": "03/23/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-33054-1", + "Patent Number": "", + "Application SN": "14/020,326", + "Title": "Multi-spacecraft Autonomous Positioning System / Network-Based Navigation", + "Patent Expiration Date": "09/06/2033" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32830-1", + "Patent Number": 8420582, + "Application SN": "13/027472", + "Title": "FRICTION MANAGEMENT USING SOLVENT PARTITIONING OF SINGLE ELEMENT AND MULTI-ELEMENT HYDROPHILIC SURFACE-INTERACTIVE CHEMICALS CONTAINED IN HYDROPHILIC TARGETED EMULSIONS", + "Patent Expiration Date": "02/15/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32830-1-CIP", + "Patent Number": "", + "Application SN": "13/900,452", + "Title": "Friction and Wear Management Using Solvent Partioning of Hydrophilic Surface-Interactive Chemicals contains in Boundary Layer-Targeted Emulsions", + "Patent Expiration Date": "03/07/2033" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32840-1", + "Patent Number": 8322685, + "Application SN": "12/842,218", + "Title": "Non-collinear Valve Actuator", + "Patent Expiration Date": "04/02/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32841-1", + "Patent Number": "", + "Application SN": "13/424,754", + "Title": "DUPLICATE of Telemetry encoder/decoder", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32853-1", + "Patent Number": "", + "Application SN": "14/196,203", + "Title": "Particle Damping for Vibration Mitigation of Circuit Cards", + "Patent Expiration Date": "03/04/2034" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32857-1", + "Patent Number": 8668168, + "Application SN": "13/326,513", + "Title": "Rocket Vent Design with Variable Flow Control and Rain Protection", + "Patent Expiration Date": "01/21/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32859-1", + "Patent Number": 8393520, + "Application SN": "13/240,075", + "Title": "Variably Pulsed High Power Ultrasonic (HPU) Energy for Ultrasonic Stir Welding (USW)", + "Patent Expiration Date": "11/07/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32859-1-DIV", + "Patent Number": 8393523, + "Application SN": "13/523,310", + "Title": "Pulsed Ultrasonic Stir Welding Method", + "Patent Expiration Date": "09/22/2031" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32865-1", + "Patent Number": "", + "Application SN": "13/302,734", + "Title": "Easily Installed, In-situ Adaptable Flow Measurement Device and Method.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32865-2", + "Patent Number": 8555731, + "Application SN": "13/302,773", + "Title": "Easily Installed, In-situ Adaptable Flow Measurement Device and Method.", + "Patent Expiration Date": "06/04/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32865-3", + "Patent Number": "", + "Application SN": "13/302,817", + "Title": "Easily Installed, In-situ Adaptable Flow Measurement Device and Method.", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32865-4", + "Patent Number": "", + "Application SN": "13/302,845", + "Title": "Easily Installed, In-situ Adaptable Flow Measurement Device and Method.", + "Patent Expiration Date": "08/23/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32871-1", + "Patent Number": 8577519, + "Application SN": "13/424,898", + "Title": "Low Cost Telemetry System for Small/micro satellites", + "Patent Expiration Date": "06/13/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32873-1", + "Patent Number": "", + "Application SN": "13/523210", + "Title": "High-current, high-voltage switch using non-hazardous liquid metals", + "Patent Expiration Date": "11/29/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32889-1", + "Patent Number": "", + "Application SN": "13/174,084", + "Title": "Pyrotechnic Pipe Plug and Variable Area Flow Meter", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32895-1", + "Patent Number": "", + "Application SN": "13/242,734", + "Title": "High Powered Ultrasonically Assisted Thermal Stir Welding", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32912-1", + "Patent Number": "", + "Application SN": "13/299,930", + "Title": "Salt Water Power Load - Part II", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32916-1", + "Patent Number": "", + "Application SN": "13/333283", + "Title": "Improved Impact Toughness and Heat Treatment for Cast Aluminum Wheels", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32924-1", + "Patent Number": "", + "Application SN": "13/312,481", + "Title": "Partial Automated Alignment & Integration System", + "Patent Expiration Date": "07/09/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32934-1", + "Patent Number": "", + "Application SN": "12/833,894", + "Title": "Methods, Devices, and Systems Relating to a Sensing Device", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Issued", + "Case Number": "MFS-32940-1", + "Patent Number": 8657179, + "Application SN": "13/430,268", + "Title": "Closed Loop Temperature Control for the Thermal Stir Welding Process", + "Patent Expiration Date": "03/26/2032" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32944-1", + "Patent Number": "", + "Application SN": "13/896,137", + "Title": "Mitigation of Sonic Boom from Supersonic Vehicles by means of Long Penetration Mode (LPM) Counter-Flowing Cold Gas Jets", + "Patent Expiration Date": "05/16/2033" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32945-1", + "Patent Number": "", + "Application SN": "14/082,956", + "Title": "Piezoelectric Gravity Gradient and Multiple Purpose Sensor Detection System", + "Patent Expiration Date": "11/18/2033" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-32986-1", + "Patent Number": "", + "Application SN": "13/961,573", + "Title": "Non-Explosively-Actuated Pressurization Start Valve", + "Patent Expiration Date": "08/07/2033" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-33007-1", + "Patent Number": "", + "Application SN": "14/192,350", + "Title": "Carbon Nanotube Tape Vibrating Gyroscope Update", + "Patent Expiration Date": "02/27/2034" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-33022-1", + "Patent Number": "", + "Application SN": "14/192,395", + "Title": "A Design Technology to Eliminate Dribble Volume in Rocket Engine Manifolds for Swirl-Coaxial Injectors", + "Patent Expiration Date": "02/27/2034" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-33031-1", + "Patent Number": "", + "Application SN": "13/949,361", + "Title": "An aerodynamic design concept for rocket nozzle side load reduction", + "Patent Expiration Date": "07/24/2033" + }, + { + "Center": "NASA Marshall Space Flight Center", + "Status": "Application", + "Case Number": "MFS-33060-1", + "Patent Number": "", + "Application SN": "14/104,881", + "Title": "Carbon Nanotube Tape Single Axis Accelerometer", + "Patent Expiration Date": "12/12/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-21715-2", + "Patent Number": 5869238, + "Application SN": "08/390,904", + "Title": "Quantitative Method Of Measuring Cancer Cell Urokinase And Metastatic Potential", + "Patent Expiration Date": "02/09/2016" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-21947-1", + "Patent Number": 7541159, + "Application SN": "10/828,531", + "Title": "MOLECULAR SPECIFIC ANTIBODIES AGAINST UROKINASE", + "Patent Expiration Date": "08/28/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22119-1", + "Patent Number": 5851816, + "Application SN": "08/172,962", + "Title": "A PROCESS FOR DEVELOPING HIGH-FIDELITY THREE-DIMENSIONAL TUMOR MODELS OF HUMAN PROSTATE CARCINOMA", + "Patent Expiration Date": "12/22/2015" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22122-1", + "Patent Number": 6117674, + "Application SN": "08/366,065", + "Title": "HORIZONTAL ROTATING-WALL VESSEL PROPAGATION IN IN VITRO HUMAN TISSUE MODELS", + "Patent Expiration Date": "09/12/2017" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22489-1", + "Patent Number": 5827531, + "Application SN": "08/349,169", + "Title": "Multi-Lamellar, Immiscible-Phase Microencapsulation of Drugs", + "Patent Expiration Date": "10/27/2015" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22616-2", + "Patent Number": 6133036, + "Application SN": "09/7,239", + "Title": "Preservation Of Liquid Biological Samples", + "Patent Expiration Date": "12/12/2015" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22616-3", + "Patent Number": 6716392, + "Application SN": "09/630,979", + "Title": "Preservation Of Liquid Biological Samples", + "Patent Expiration Date": "01/14/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22633-1", + "Patent Number": 6485963, + "Application SN": "09/587,028", + "Title": "Electrically Potentiated Growth Of Mammalian Neuronal Tissue Facilitated By Rotating Wall Vessel Culture", + "Patent Expiration Date": "06/02/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22633-2", + "Patent Number": 6673597, + "Application SN": "09/798,854", + "Title": "Growth Stimulation Of Biological Cells And Tissue By Electromagnetic Fields And Uses Thereof", + "Patent Expiration Date": "02/28/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22695-1", + "Patent Number": 6261844, + "Application SN": "09/213,988", + "Title": "A Unique Urine Preservative With Combined Antibacterial And Antioxidant Properties", + "Patent Expiration Date": "12/17/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22721-2", + "Patent Number": 6254359, + "Application SN": "09/354,915", + "Title": "Blood Pump Bearing System", + "Patent Expiration Date": "07/09/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22724-1", + "Patent Number": 6047216, + "Application SN": "09/129,832", + "Title": "Millimeter Wave/Microwave Ablation For Treatment Of Atherosclerotic Lesions", + "Patent Expiration Date": "08/05/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22724-2", + "Patent Number": 6226553, + "Application SN": "09/501,150", + "Title": "Endothelium Preserving Microwave Treatment For Atherosclerosis", + "Patent Expiration Date": "02/09/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22724-3", + "Patent Number": 6223086, + "Application SN": "09/504,768", + "Title": "Endothelium Preserving Microwave Treatment For Atherosclerosis", + "Patent Expiration Date": "02/09/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22724-5", + "Patent Number": 6496736, + "Application SN": "09/500,538", + "Title": "Endothelium Preserving Microwave Treatment For Atherosclerosis", + "Patent Expiration Date": "02/09/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22757-1", + "Patent Number": 5879079, + "Application SN": "08/917,581", + "Title": "Automated Propellant Blending Machine", + "Patent Expiration Date": "08/20/2017" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22797-1", + "Patent Number": 6312398, + "Application SN": "08/786,842", + "Title": "A Method Of Applying External Power To Assist In The Operation Of Joints In Pressure Suits And Inflatable Structures2283", + "Patent Expiration Date": "12/19/2016" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22839-1", + "Patent Number": 6501414, + "Application SN": "09/826,402", + "Title": "Locating Concealed Objects Using Spectral Signatures", + "Patent Expiration Date": "04/02/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22859-1", + "Patent Number": 6730498, + "Application SN": "09/56,363", + "Title": "Production Of 1-25diOH Vitamin D3, Erythropoietin And Other Products By Epithelial And Interstitial Cells In Response To Shear Stress", + "Patent Expiration Date": "04/08/2017" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22859-2", + "Patent Number": 6946246, + "Application SN": "09/532,001", + "Title": "Production Of Functional Proteins: Balance Of Shear Stress And Gravity", + "Patent Expiration Date": "03/21/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22859-3", + "Patent Number": 7198947, + "Application SN": "10/734,759", + "Title": "Production Of Functional Proteins: Balance Of Shear Stress And Gravity", + "Patent Expiration Date": "12/22/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22859-5", + "Patent Number": 7972821, + "Application SN": "12/174,221", + "Title": "Production of Functional Proteins: Balance of Shear Stress and Gravity", + "Patent Expiration Date": "02/11/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22863-1", + "Patent Number": 7122071, + "Application SN": "10/263,280", + "Title": "Centrifugal Adsorption Cartridge System (CACS)", + "Patent Expiration Date": "12/21/2022" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22866-1", + "Patent Number": 6099864, + "Application SN": "09/79,741", + "Title": "INSITU Activation Of Microcapsules", + "Patent Expiration Date": "05/15/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22900-1", + "Patent Number": 6231010, + "Application SN": "09/236,785", + "Title": "Advanced Structural/Inflatable Hybrid Spacecraft Habitation Module", + "Patent Expiration Date": "01/25/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23563-2", + "Patent Number": 8039099, + "Application SN": "11/848,332", + "Title": "Nanoencapsulated Aerogels Produced By Monomer Vapor Deposition And Polymerization", + "Patent Expiration Date": "08/13/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22931-1", + "Patent Number": 6354540, + "Application SN": "09/405,301", + "Title": "Electro-Mechanically Actuated Magnetic Ring With Load Sensing Feedback And Closed Loop Control Docking/Berthing System For Alignment And Mating Of Multiple Vehicles, Structures, And/or Assemblies", + "Patent Expiration Date": "09/20/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22936-1", + "Patent Number": 6387399, + "Application SN": "09/79,766", + "Title": "Protein Crystal Encapsulation Process", + "Patent Expiration Date": "05/15/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22936-2", + "Patent Number": 6558698, + "Application SN": "09/733,391", + "Title": "Microencapsulated Bioactive Agents And Method Of Making", + "Patent Expiration Date": "12/06/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22936-3", + "Patent Number": 6676964, + "Application SN": "09/774,168", + "Title": "Method For Determining The Three-Dimensional Structure Of A Protein", + "Patent Expiration Date": "01/26/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22936-4", + "Patent Number": 6599449, + "Application SN": "09/774,169", + "Title": "X-Ray Crystallography Reagent", + "Patent Expiration Date": "01/24/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22937-1", + "Patent Number": 6214300, + "Application SN": "09/79,833", + "Title": "Microencapsulation And Electrostatic Processing Device (MEPS)", + "Patent Expiration Date": "05/15/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22938-1", + "Patent Number": 6103271, + "Application SN": "09/79,770", + "Title": "Low-Shear Microencapsulation & Electrostatic Coating Process", + "Patent Expiration Date": "05/15/2018" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22939-4", + "Patent Number": 7968117, + "Application SN": "12/100,009", + "Title": "Externally Triggered Microcapsules", + "Patent Expiration Date": "07/09/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22970-1", + "Patent Number": 6253563, + "Application SN": "09/337,208", + "Title": "Solar-Powered Refrigeration System", + "Patent Expiration Date": "06/03/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22970-2", + "Patent Number": 6469487, + "Application SN": "09/838,679", + "Title": "Solar Powered Refrigeration System", + "Patent Expiration Date": "06/03/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-22970-3", + "Patent Number": 6453693, + "Application SN": "09/838,680", + "Title": "Solar Powered Refrigeration System", + "Patent Expiration Date": "06/03/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23029-1", + "Patent Number": 6651739, + "Application SN": "09/793,817", + "Title": "Medium Frequency Pseudo Noise Geological Radar", + "Patent Expiration Date": "07/20/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23037-1", + "Patent Number": 6864473, + "Application SN": "09/988,855", + "Title": "Variable Shadow Screen For Optical Devices", + "Patent Expiration Date": "11/14/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23041-1", + "Patent Number": 6334302, + "Application SN": "09/351,152", + "Title": "Variable Specific Impulse Magnetoplasma Rocket (VASIMR)", + "Patent Expiration Date": "06/28/2019" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23049-3", + "Patent Number": 6592579, + "Application SN": "09/746,542", + "Title": "Method For Selective Thermal Ablation", + "Patent Expiration Date": "06/28/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23049-4", + "Patent Number": 6675050, + "Application SN": "09/746,533", + "Title": "Computer Program For Microwave Antenna", + "Patent Expiration Date": "05/07/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23076-1", + "Patent Number": 6321746, + "Application SN": "09/574,758", + "Title": "Collapsable, Light, Portable Human Hyperbaric Chamber/Airlock System", + "Patent Expiration Date": "05/17/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23092-1", + "Patent Number": 6547189, + "Application SN": "09/826,403", + "Title": "Advanced, Large Volume, Highly Loaded, Hybrid Inflatable Pressure Vessel", + "Patent Expiration Date": "05/26/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23153-1", + "Patent Number": 6995572, + "Application SN": "09/803,613", + "Title": "Coplanar Waveguide Ice Detection Sensor", + "Patent Expiration Date": "11/04/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23154-1", + "Patent Number": 7113820, + "Application SN": "09/906,013", + "Title": "A Real-Time, High Frequency QRS Electrocardiograph.", + "Patent Expiration Date": "05/03/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23154-2", + "Patent Number": 7539535, + "Application SN": "11/345,687", + "Title": "A Real-Time, High Frequency QRS Electrocardiograph", + "Patent Expiration Date": "07/13/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23178-1", + "Patent Number": 6997637, + "Application SN": "10/5,820", + "Title": "Deceleration Limiting Safety Crash Wall", + "Patent Expiration Date": "05/19/2022" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23193-1", + "Patent Number": 6618010, + "Application SN": "09/994,989", + "Title": "Passive Noncoherent Tracking Of A Data-Modulated Signal", + "Patent Expiration Date": "11/14/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23277-1", + "Patent Number": 7295309, + "Application SN": "10/734,753", + "Title": "Microcapsule Flow Sensor", + "Patent Expiration Date": "11/12/2024" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23303-1", + "Patent Number": 7397774, + "Application SN": "10/446,283", + "Title": "Downlink Data Multiplexer", + "Patent Expiration Date": "01/16/2026" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23307-1", + "Patent Number": 6559645, + "Application SN": "10/28,962", + "Title": "Detection Of Subterranean Metal Objects Using Differential Spectral Processing", + "Patent Expiration Date": "11/17/2020" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23309-1", + "Patent Number": 7040319, + "Application SN": "10/87,866", + "Title": "Oxygen Partial Pressure Monitoring Device For Aircraft Oxygen Masks.", + "Patent Expiration Date": "04/27/2022" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23311-1", + "Patent Number": 6650280, + "Application SN": "09/953,612", + "Title": "Mass Measurement During Fluid Flow Using An Integrated Sonic/Microwave Detector.", + "Patent Expiration Date": "09/14/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23314-1", + "Patent Number": 6899009, + "Application SN": "09/892,355", + "Title": "Flexshield (Flexible Multi-Shock Shield Technology)", + "Patent Expiration Date": "06/26/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23349-1", + "Patent Number": 7415005, + "Application SN": "10/283,354", + "Title": "MCC Voice Over Internet Protocol (VOIP)", + "Patent Expiration Date": "08/08/2026" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-23349-2-SB", + "Patent Number": 0, + "Application SN": "12/170,614", + "Title": "Ad Hoc Selection of Voice Over Internet Streams", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23424-1", + "Patent Number": 6985606, + "Application SN": "10/212,579", + "Title": "Global Distribution Of Large Fluvial Fans/Potential Hydrocarbon Exploration Guide", + "Patent Expiration Date": "06/12/2024" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23427-1", + "Patent Number": 6944504, + "Application SN": "10/302,323", + "Title": "Microwave Ablation Of Prostatic Cells Using A Separated Antenna Array", + "Patent Expiration Date": "07/23/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23436-1", + "Patent Number": 7126553, + "Application SN": "10/679,688", + "Title": "Tri-Sector Deployable Array Antenna", + "Patent Expiration Date": "08/11/2024" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23443-1", + "Patent Number": 6647855, + "Application SN": "10/263,293", + "Title": "Method And Apparatus For Deploying A Hypervelocity Shield", + "Patent Expiration Date": "09/30/2022" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23444-1", + "Patent Number": 6932090, + "Application SN": "10/361,046", + "Title": "A Simple Countermeasure For Management Of Motion Sickness And Vestibular/Sensory-Motor Problems Associated With Space Flight And Terrestial Motion Sickness", + "Patent Expiration Date": "07/01/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23449-1", + "Patent Number": 7386340, + "Application SN": "10/402,866", + "Title": "Method For Diagnosis Of Coronary Artery Disease And Related Conditions Using 12-Lead High Frequency QRS Electrocardiography", + "Patent Expiration Date": "12/30/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23510-1", + "Patent Number": 6851647, + "Application SN": "10/417,377", + "Title": "Portable Catapult Launcher For Small Aircraft", + "Patent Expiration Date": "04/03/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23518-1", + "Patent Number": 7168935, + "Application SN": "10/637,086", + "Title": "Low Voltage Electron Beam Solid Freeform Fabrication System", + "Patent Expiration Date": "09/29/2024" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23538-1", + "Patent Number": 6943619, + "Application SN": "10/443,233", + "Title": "Practical Active Capacitor Filter", + "Patent Expiration Date": "05/21/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23539-1", + "Patent Number": 6943621, + "Application SN": "10/443,234", + "Title": "Auto-Routable, Configurable, Daisy Chainable Data Acquisition System", + "Patent Expiration Date": "08/16/2023" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23563-1", + "Patent Number": 7270851, + "Application SN": "10/985,081", + "Title": "Nano-Encapsulated Aerogel", + "Patent Expiration Date": "05/14/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23594-1", + "Patent Number": 7125370, + "Application SN": "10/845,608", + "Title": "Articulating Subject Support For Resistive Exercise In The Horizontal Position", + "Patent Expiration Date": "02/22/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23623-1", + "Patent Number": 7212934, + "Application SN": "11/370,379", + "Title": "String Resistance Detector Concept", + "Patent Expiration Date": "03/06/2026" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23659-1", + "Patent Number": 7094045, + "Application SN": "10/734,754", + "Title": "Pulse-Flow Microencapsulation System", + "Patent Expiration Date": "06/09/2024" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23659-2", + "Patent Number": 7588703, + "Application SN": "11/428,465", + "Title": "Microencapsulation System And Method", + "Patent Expiration Date": "03/14/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23668-1", + "Patent Number": 7250075, + "Application SN": "10/874,004", + "Title": "Water Outlet Control Mechanism For Fuel Cell System Operation In Variable Gravity Environments", + "Patent Expiration Date": "11/04/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23695-1", + "Patent Number": 7249540, + "Application SN": "11/177,652", + "Title": "Torquing Tool Attachment For Round Connectors With Attached Cables", + "Patent Expiration Date": "08/27/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23781-1", + "Patent Number": 7410485, + "Application SN": "11/40,613", + "Title": "Directional Microwave Applicator/Antenna", + "Patent Expiration Date": "10/16/2026" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23805-1", + "Patent Number": 7462141, + "Application SN": "11/31,942", + "Title": "Advanced Resistive Exercise Device (ARED)", + "Patent Expiration Date": "01/10/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23881-1", + "Patent Number": 7686529, + "Application SN": "11/958,908", + "Title": "Low Friction, Low Profile, High Moment Two-Axis Joint", + "Patent Expiration Date": "12/18/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-23882-1", + "Patent Number": 0, + "Application SN": "12/899654", + "Title": "Analog Strain Gage Conditioning System for Space Environment", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23906-1", + "Patent Number": 7295884, + "Application SN": "11/158,354", + "Title": "Method for the Design and Analysis of the Primary Load Bearing Layer of an Inflatable Vessel", + "Patent Expiration Date": "07/20/2026" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23933-1", + "Patent Number": 7543779, + "Application SN": "11/625,066", + "Title": "Low Impact Docking System (LIDS) A.k.a, International Berthing Docking Mechanism (IBDM)", + "Patent Expiration Date": "02/22/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23954-1", + "Patent Number": 7357606, + "Application SN": "11/357,461", + "Title": "Self-Advancing Step-Tap Drill", + "Patent Expiration Date": "08/14/2026" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23988-1", + "Patent Number": 8343740, + "Application SN": "12/58,227", + "Title": "Micro-Organ Device", + "Patent Expiration Date": "10/31/2031" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23988-2", + "Patent Number": 8580546, + "Application SN": "13/688982", + "Title": "Micro-Organ Device", + "Patent Expiration Date": "11/29/2032" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-23997-2", + "Patent Number": 7815149, + "Application SN": "12/388,345", + "Title": "Magnetic Capture Docking Mechanism", + "Patent Expiration Date": "04/01/2025" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24000-1", + "Patent Number": 8076136, + "Application SN": "/0", + "Title": "Development And Characterization Of A Three-Dimensional Tissue Culture Model Of Bone", + "Patent Expiration Date": "10/31/2021" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24042-1", + "Patent Number": 7411198, + "Application SN": "11/421,174", + "Title": "New Architecture for Space Radiation Detection", + "Patent Expiration Date": "02/01/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24106-1", + "Patent Number": 7577482, + "Application SN": "11/683,770", + "Title": "Network System Plug And Play Through Positional And Functional Connectivity Identification", + "Patent Expiration Date": "04/21/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24115-1", + "Patent Number": 8022307, + "Application SN": "11/772,999", + "Title": "Method and Apparatus for Fabric Circuits and Antennas", + "Patent Expiration Date": "06/19/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24149-1", + "Patent Number": 8122646, + "Application SN": "12/402,986", + "Title": "A Description Of An Improved Method For Folding, Assembling, And Weight Relief Of An Inflatable Shell", + "Patent Expiration Date": "02/04/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24149-2", + "Patent Number": 8266866, + "Application SN": "13/346137", + "Title": "A Description Of An Improved Method For Folding, Assembling, And Weight Relief Of An Inflatable Shell", + "Patent Expiration Date": "03/12/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24164-1", + "Patent Number": 8338114, + "Application SN": "11/789,117", + "Title": "Methods For Growing Tissue-Like 3D Assemblies (TLA) Of Human Broncho-Epithelial Cells", + "Patent Expiration Date": "05/04/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24169-1", + "Patent Number": 7862946, + "Application SN": "11/671,210", + "Title": "Self-Regulating Control of Parasitic Electric Loads in Fuel Cell Power Systems", + "Patent Expiration Date": "11/05/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24180-1", + "Patent Number": 7935259, + "Application SN": "12/167,332", + "Title": "Water Filtering Device, 100% Effective", + "Patent Expiration Date": "09/14/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24184-1", + "Patent Number": 8116350, + "Application SN": "12/353,755", + "Title": "Ultra-Wideband (UWB) Two-Cluster Angle Of Arrival (AOA) Passive Tracking System Design", + "Patent Expiration Date": "07/22/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24201-1", + "Patent Number": 7509774, + "Application SN": "11/610,295", + "Title": "A Description Of An Improved Method For Attaching An Inflatable Shell To A Rigid Interface", + "Patent Expiration Date": "06/13/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24207-1", + "Patent Number": 7604782, + "Application SN": "11/625,670", + "Title": "X-38 Advanced Sublimator", + "Patent Expiration Date": "04/12/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24215-1", + "Patent Number": 8070105, + "Application SN": "11/956,826", + "Title": "A Description Of A Concentric Nested Torroidal Inflatable Habitat", + "Patent Expiration Date": "10/04/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24216-1", + "Patent Number": 8047473, + "Application SN": "12/240,537", + "Title": "A Description Of An Octonode Connecting Node Concept And Method", + "Patent Expiration Date": "01/10/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24228-1", + "Patent Number": 7521682, + "Application SN": "11/421,196", + "Title": "New Architecture For Space Radiation Detection", + "Patent Expiration Date": "03/07/2027" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24238-1", + "Patent Number": 8388613, + "Application SN": "12/757657", + "Title": "Microwave Tissue Welding For Wound Closure", + "Patent Expiration Date": "11/17/2031" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24263-1", + "Patent Number": 7805276, + "Application SN": "11/958,937", + "Title": "Impact Detection System", + "Patent Expiration Date": "02/12/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24273-1", + "Patent Number": 7840387, + "Application SN": "11/778,858", + "Title": "Method For The Design And Analysis Of The Primary Load Bearing Layer That Interfaces To The Structural Pass-through Of An Inflatable Vessel", + "Patent Expiration Date": "07/31/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24314-1", + "Patent Number": 0, + "Application SN": "12/880602", + "Title": "HDSS - High Density Spot Seeding", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24346-1", + "Patent Number": 8466776, + "Application SN": "12/828558", + "Title": "Extended Range RFID and Sensor Tag", + "Patent Expiration Date": "09/05/2031" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24387-1", + "Patent Number": 8011229, + "Application SN": "12/323,912", + "Title": "Artificial Intelligence Algorithm For Assessing Postural Stability During Normal Daily Activities Using Shoe Insert Pressure Sensors", + "Patent Expiration Date": "11/26/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24441-1", + "Patent Number": 7905946, + "Application SN": "12/190,364", + "Title": "A Capillary-based Static Phase Separator For Highly Variable Wetting Conditions", + "Patent Expiration Date": "07/02/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24444-1", + "Patent Number": 8577120, + "Application SN": "12/900644", + "Title": "Flash Infrared (IR) Thermography Contrast Computer Simulation And Data Analysis Software", + "Patent Expiration Date": "04/22/2031" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24451-1", + "Patent Number": 0, + "Application SN": "13/057399", + "Title": "Rapid Detection Of The Varicella Zoster Virus (VZV) In Saliva Samples", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24464-1", + "Patent Number": 7859292, + "Application SN": "12/502,575", + "Title": "Reconfigurable SEU/SET Tolerance for FPGAs", + "Patent Expiration Date": "07/14/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24466-1", + "Patent Number": 8183870, + "Application SN": "12/370,021", + "Title": "Battery cell voltage sensing and balancing using addressable transformers with electrical isolation and minimal additional connector pins and circuitry.", + "Patent Expiration Date": "07/01/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24490-1", + "Patent Number": 0, + "Application SN": "12/612,171", + "Title": "High Altitude Hydration System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24506-1", + "Patent Number": 0, + "Application SN": "12/971919", + "Title": "A Method to Measure and Estimate Normalized contrast In Infrared Flash Thermography", + "Patent Expiration Date": "01/08/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24508-1", + "Patent Number": 8343403, + "Application SN": "12/174,380", + "Title": "METHOD FOR MAKING A MICROPOROUS MEMBRANE", + "Patent Expiration Date": "12/31/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24509-1", + "Patent Number": 8570047, + "Application SN": "12/855384", + "Title": "Battery Fault Detection with Saturating Transformers", + "Patent Expiration Date": "02/02/2032" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24525-1", + "Patent Number": 8384614, + "Application SN": "12/894749", + "Title": "Deployable Fresnel Rings", + "Patent Expiration Date": "10/11/2031" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24541-1", + "Patent Number": 0, + "Application SN": "12/899815", + "Title": "Electromagnetic Time-Variance Magnetic Fields (TVMF) to generate, and re-grow Cartilage Cells by a Noninvasive Method", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24569-1", + "Patent Number": 8176809, + "Application SN": "12/331844", + "Title": "Planar Torsion Spring", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24570-1", + "Patent Number": 8276958, + "Application SN": "12/269579", + "Title": "Bidirectional Tendon Terminator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24571-1", + "Patent Number": 8371177, + "Application SN": "12/241309", + "Title": "Tendon Tension Sensor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24685-1", + "Patent Number": 8056423, + "Application SN": "12/269,552", + "Title": "Sensing the Tendon Tension through the Conduit Reaction Forces", + "Patent Expiration Date": "11/12/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24686-1", + "Patent Number": 8060250, + "Application SN": "12/335,153", + "Title": "Joint Space Impedance Control for Tendon-Driven Manipulators", + "Patent Expiration Date": "12/15/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24687-1", + "Patent Number": 8170718, + "Application SN": "12/338697", + "Title": "Multiple Priority Operational Space Impedance Control", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24688-1", + "Patent Number": 8280837, + "Application SN": "12/474068", + "Title": "CONTACT STATE ESTIMATION FOR MULTI-FINGER ROBOT HANDS USING PARTICLE FILTERS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24689-1", + "Patent Number": 7784363, + "Application SN": "12/241320", + "Title": "PHALANGE TACTILE LOAD CELL", + "Patent Expiration Date": "09/30/2028" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24732-1", + "Patent Number": 8364314, + "Application SN": "12/624445", + "Title": "METHOD AND APPARATUS FOR AUTOMATIC CONTROL OF A HUMANOID ROBOT", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24733-1", + "Patent Number": 0, + "Application SN": "13/349265", + "Title": "Pyrometer", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24734-1", + "Patent Number": 8498741, + "Application SN": "12/564088", + "Title": "Dexterous Humanoid Robotic Wrist", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24735-1", + "Patent Number": 8467903, + "Application SN": "12/564086", + "Title": "Tendon Driven Finger Actuation System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24736-1", + "Patent Number": 8291788, + "Application SN": "12/564090", + "Title": "Rotary Series Elastic Actuator", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24737-1", + "Patent Number": 8401700, + "Application SN": "12/564124", + "Title": "ACTUATOR AND ELECTRONICS PACKAGING FOR EXTRINSIC HUMANOID HAND", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24738-1", + "Patent Number": 0, + "Application SN": "12/564094", + "Title": "FRAMEWORK AND METHOD FOR CONTROLLING A ROBOTIC SYSTEM USING A DISTRIBUTED COMPUTER NETWORK", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24739-1", + "Patent Number": 8511964, + "Application SN": "12/564084", + "Title": "Dexterous Humanoid Robot", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24740-1", + "Patent Number": 0, + "Application SN": "12/564078", + "Title": "Dexterous Humanoid Robotic Finger", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24741-1", + "Patent Number": 8255079, + "Application SN": "12/564095", + "Title": "Human Grasp Assist", + "Patent Expiration Date": "09/23/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24742-1", + "Patent Number": 8442684, + "Application SN": "12/564076", + "Title": "Integrated High Speed FPGA Based Torque Controller", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24743-1", + "Patent Number": 8250901, + "Application SN": "12/564092", + "Title": "Rotary Absolute Position Sensor Calibration", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24744-1", + "Patent Number": 8369992, + "Application SN": "12/564083", + "Title": "Diagnostics, prognostics & health management for humanoid robotics and method thereof", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "GM", + "Case Number": "MSC-24745-1", + "Patent Number": 8424941, + "Application SN": "12/564085", + "Title": "ROBOTIC THUMB ASSEMBLY", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24746-1", + "Patent Number": 8260460, + "Application SN": "12/564096", + "Title": "Interactive Robot Control System", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24747-1", + "Patent Number": 8244402, + "Application SN": "12/564074", + "Title": "VISUAL PERCEPTION SYSTEM AND METHOD FOR A HUMANOID ROBOT", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24750-1", + "Patent Number": 8483882, + "Application SN": "12/686512", + "Title": "HIERARCHICAL ROBOT CONTROL SYSTEM AND METHOD FOR CONTROLLING SELECT DEGREES OF FREEDOM OF AN OBJECT USING MULTIPLE MANIPULATORS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24751-1", + "Patent Number": 8412376, + "Application SN": "12/720725", + "Title": "TENSION DISTRIBUTION IN A TENDON-DRIVEN ROBOTIC FINGER", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24752-1", + "Patent Number": 8033876, + "Application SN": "12/706744", + "Title": "CONNECTOR PIN AND METHOD", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24753-1", + "Patent Number": 0, + "Application SN": "12/720727", + "Title": "UNDERACTUATED DESIGN AND CONTROL OF A TENDON-DRIVEN FINGER", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24755-1", + "Patent Number": 0, + "Application SN": "12/698832", + "Title": "Architecture For Robust Force and Impedance Control Of Series Elastic Actuators", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24758-1", + "Patent Number": 0, + "Application SN": "14/184278", + "Title": "RFID Cavity", + "Patent Expiration Date": "03/11/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24798-1", + "Patent Number": 0, + "Application SN": "13/789903", + "Title": "Soft Decision Analyzer (SDA)", + "Patent Expiration Date": "03/08/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24811-1", + "Patent Number": 0, + "Application SN": "13/461,487", + "Title": "Self-enclosed and pipette free DNA/RNA Isolation device", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24813-1", + "Patent Number": 0, + "Application SN": "13/791290", + "Title": "Pre-Polymerase Chain Reaction Preparation Kit", + "Patent Expiration Date": "08/06/2032" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24817-1", + "Patent Number": 8265792, + "Application SN": "12/760954", + "Title": "Method and Apparatus for Calibrating Multi-Axis Load Cells in a Dexterous Robot", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24837-1", + "Patent Number": 0, + "Application SN": "12/787479", + "Title": "Applying Workspace Limitations in a Velocity-Controlled Robotic Mechanism", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-24919-1", + "Patent Number": 0, + "Application SN": "13/790591", + "Title": "RFID Waveguide, Antenna, and Cavity Sensors", + "Patent Expiration Date": "07/13/2032" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24926-1", + "Patent Number": 8412378, + "Application SN": "12/629637", + "Title": "IN-VIVO TENSION CALIBRATION IN TENDON-DRIVEN MANIPULATORS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-24930-1", + "Patent Number": 8489239, + "Application SN": "12/916803", + "Title": "ROBUST OPERATION OF TENDON-DRIVEN ROBOT FINGERS USING FORCE AND POSITION-BASED CONTROL LAWS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25026-1", + "Patent Number": 0, + "Application SN": "13/354552", + "Title": "Battery Charge Equalizer with transformer array", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-25053-1", + "Patent Number": "D628,609", + "Application SN": "29/359105", + "Title": "ROBOT", + "Patent Expiration Date": "04/06/2030" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25056-1", + "Patent Number": 0, + "Application SN": "13/014901", + "Title": "SYSTEM AND METHOD FOR TENSIONING A ROBOTICALLY ACTUATED TENDON", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-25084-1", + "Patent Number": 8067909, + "Application SN": "12/474430", + "Title": "METHOD AND APPARATUS FOR ELECTROMAGNETICALLY BRAKING A MOTOR", + "Patent Expiration Date": "05/29/2029" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25084-DE", + "Patent Number": 0, + "Application SN": "12/474430", + "Title": "Method and Apparatus for Electromagnetically Braking a Motor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25084-JP", + "Patent Number": 0, + "Application SN": "12/474430", + "Title": "Method and Apparatus for Electromagnetically Braking a Motor", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25091-1", + "Patent Number": 0, + "Application SN": "13/199484", + "Title": "FRET-Aptamer Assays for C-Telopeptide, Creatinine and Vitamin D", + "Patent Expiration Date": "08/31/2031" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Issued", + "Case Number": "MSC-25121-1", + "Patent Number": 8483877, + "Application SN": "12/875254", + "Title": "WORKSPACE SAFE OPERATION OF A FORCE- OR IMPEDANCE-CONTROLLED ROBOT", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25149-1", + "Patent Number": 0, + "Application SN": "13/196252", + "Title": "Controlling Execution Sequence Using Tactile-Classification during manipulation by a humanoid robot", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25216-1", + "Patent Number": 0, + "Application SN": "13/439,546", + "Title": "METHOD AND COMPOSITION FOR AMELIORATING THE EFFECTS FOR A SUBJECT EXPOSED TO RADIATION OR OTHER SOURCES OF OXIDATIVE STRESS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25217-1", + "Patent Number": 0, + "Application SN": "13/272442", + "Title": "METHOD FOR DYNAMIC OPTIMIZATION OF A ROBOT CONTROL INTERFACE", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25219", + "Patent Number": 0, + "Application SN": "13/207911", + "Title": "FAST GRASP CONTACT COMPUTATION FOR A SERIAL ROBOT", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25265-1", + "Patent Number": 0, + "Application SN": "13/851778", + "Title": "New method and device for digital to analog transformations and reconstructions of multichannel electrocardiograms", + "Patent Expiration Date": "10/30/2032" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25286-1", + "Patent Number": 0, + "Application SN": "14/252660", + "Title": "A chemical formulation to stabilize urine and minimize the precipitation potential of minerals during distillation of urine", + "Patent Expiration Date": "03/11/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25313-1", + "Patent Number": 0, + "Application SN": "13/774835", + "Title": "Hydrostatic Hyperbaric Chamber", + "Patent Expiration Date": "02/22/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25318", + "Patent Number": 0, + "Application SN": "13/408668", + "Title": "HUMAN GRASP ASSIST SOFT", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25319", + "Patent Number": 0, + "Application SN": "13/408656", + "Title": "HUMAN GRASP ASSIST", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25320", + "Patent Number": 0, + "Application SN": "13/408675", + "Title": "HUMAN GRASP ASSIST CONTROLS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25327-1", + "Patent Number": 0, + "Application SN": "13/459557", + "Title": "COMMUNICATION SYSTEM AND METHOD", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25386-1", + "Patent Number": 0, + "Application SN": "13/951671", + "Title": "Active Response Gravity Offload System - Vertical Software Release", + "Patent Expiration Date": "07/26/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25590-1", + "Patent Number": 0, + "Application SN": "13/790927", + "Title": "Systems and Methods for RFID-Enabled Information Collection", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25604-1", + "Patent Number": 0, + "Application SN": "13/791584", + "Title": "Systems and Methods for RFID-Enabled Dispenser", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25605-1", + "Patent Number": 0, + "Application SN": "13/790721", + "Title": "Switch Using Radio Frequency Identification", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25626-1", + "Patent Number": 0, + "Application SN": "14/200,122", + "Title": "RFID Torque-Sensing Tag System for Fasteners", + "Patent Expiration Date": "03/07/2034" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25632-1", + "Patent Number": 0, + "Application SN": "13/803017", + "Title": "ROBOT TASK COMMANDER WITH EXTENSIBLE PROGRAMMING ENVIRONMENT", + "Patent Expiration Date": "03/14/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25758-1", + "Patent Number": 0, + "Application SN": "14/184303", + "Title": "Methods, Systems and Apparatuses for Radio Frequency Identification", + "Patent Expiration Date": "03/11/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25759-1", + "Patent Number": 0, + "Application SN": "14/184337", + "Title": "Methods, Systems and Apparatuses for Radio Frequency Identification", + "Patent Expiration Date": "03/11/2033" + }, + { + "Center": "NASA Johnson Space Center", + "Status": "Application", + "Case Number": "MSC-25760-1", + "Patent Number": 0, + "Application SN": "14/184365", + "Title": "Methods, Systems and Apparatuses for Radio Frequency Identification", + "Patent Expiration Date": "03/11/2033" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-17734-1", + "Patent Number": 0, + "Application SN": "07/700,830", + "Title": "Formation Of Self-Aligned Guard Ring For Silicide Schottky-Barrier Diodes Used For Infrared Detection", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-19289-1", + "Patent Number": 6513023, + "Application SN": "09/412,199", + "Title": "On-Chip Learning In VLSI Hardware", + "Patent Expiration Date": "10/01/2019" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-19769-1", + "Patent Number": 0, + "Application SN": "08/868,175", + "Title": "Automated Cargo Inventory Identification Transponder", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-19855-1", + "Patent Number": 6374630, + "Application SN": "09/853,931", + "Title": "Champagne Heat Pump", + "Patent Expiration Date": "05/09/2021" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-20031-1", + "Patent Number": 6828935, + "Application SN": "10/176,761", + "Title": "Receiver Controlled Phased Array Antenna", + "Patent Expiration Date": "07/19/2022" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-20837-1", + "Patent Number": 6526556, + "Application SN": "09/591,386", + "Title": "MORPHING TECHNIQUE FOR ACCELERATED EVOLUTIONARY SYNTHESIS OF ELECTRONIC CIRCUITS", + "Patent Expiration Date": "06/07/2020" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-21136-1", + "Patent Number": 0, + "Application SN": "10/219,384", + "Title": "A CMOS ACTIVE PIXEL SENSOR (APS) FOR READING COMPACT DISCS", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-30703-1", + "Patent Number": 7240208, + "Application SN": "10/424,287", + "Title": "ENCRYPTING DIGITAL CAMERA", + "Patent Expiration Date": "04/23/2023" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-40040-1", + "Patent Number": 7480984, + "Application SN": "40/863,835", + "Title": "A Concept For Suppressing Sublimation In Advanced Thermoelectric Devices", + "Patent Expiration Date": "06/07/2024" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-40407-1", + "Patent Number": 7592747, + "Application SN": "11/056,633", + "Title": "Piezoelectrically Enhanced PhotoCathode (PEPC)", + "Patent Expiration Date": "02/09/2025" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-40827-1", + "Patent Number": 7156189, + "Application SN": "11/1,465", + "Title": "SELF-MOUNTABLE AND EXTRACTABLE ULTRASONIC/SONIC ANCHOR (U/S-Anchor)", + "Patent Expiration Date": "12/01/2024" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-41446-1", + "Patent Number": 8358723, + "Application SN": "11/602,440", + "Title": "Architecture Of An Autonomous Radio", + "Patent Expiration Date": "09/12/2031" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-41506-2", + "Patent Number": 8492160, + "Application SN": "12/720,103", + "Title": "BIOMARKER SENSOR SYSTEM AND METHOD FOR MULTI-COLOR IMAGING AND PROCESSING OF SINGLE-MOLECULE LIFE SIGNATURES", + "Patent Expiration Date": "04/09/2031" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-41511-1", + "Patent Number": 7385462, + "Application SN": "11/376,638", + "Title": "Wideband (31 To 36 GHz) 24-Way Radial Power Combiner/Divider Fed By A Marie Transducer", + "Patent Expiration Date": "03/14/2026" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-41982-1", + "Patent Number": 8078309, + "Application SN": "12/415,206", + "Title": "Inverse Tomographic Approach To Create Arbitrary Sidewall Geometries In 3D Using LiGA Technologies", + "Patent Expiration Date": "03/03/2021" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-42131-1", + "Patent Number": 7824247, + "Application SN": "11/756,819", + "Title": "PORTABLE RAPID AND QUIET DRILL (PRAQD)", + "Patent Expiration Date": "11/02/2027" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-42312-1", + "Patent Number": 7184624, + "Application SN": "11/422,147", + "Title": "Slow light in chains of vertically coupled whispering gallery mode resonators", + "Patent Expiration Date": "06/05/2026" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-42466-1", + "Patent Number": 7764384, + "Application SN": "11/924,766", + "Title": "Swept frequency laser metrology system", + "Patent Expiration Date": "10/26/2027" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-42563-1", + "Patent Number": 7353768, + "Application SN": "11/456,441", + "Title": "Submersible Vehicle Propulsion and Power Generation", + "Patent Expiration Date": "07/10/2026" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-42672-1", + "Patent Number": 7996112, + "Application SN": "11/756,793", + "Title": "Micro Robot Explorer (SpiderBot) Mesh Crawler", + "Patent Expiration Date": "06/08/2030" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-43213-1", + "Patent Number": 7850861, + "Application SN": "11/764,359", + "Title": "Patterning packing materials for Fluidic Channels", + "Patent Expiration Date": "10/13/2029" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-43348-1", + "Patent Number": 7809521, + "Application SN": "12/40,459", + "Title": "Precise delay measurement circuit on FPGAs", + "Patent Expiration Date": "01/31/2029" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-43361-1", + "Patent Number": 7773121, + "Application SN": "11/741,213", + "Title": "High Resolution, Continuous Field of View, Non-Rotating Imaging Sensor Head", + "Patent Expiration Date": "10/15/2028" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-43524-1", + "Patent Number": 7773362, + "Application SN": "11/683,007", + "Title": "Dusty Plasma Thruster", + "Patent Expiration Date": "01/03/2029" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-44079-1", + "Patent Number": 8022860, + "Application SN": "11/781,022", + "Title": "Enhanced Interference Cancellation and Telemetry Reception with a Single Parabolic Dish Antenna using a Focal Plane Array", + "Patent Expiration Date": "04/30/2030" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-44765-1", + "Patent Number": 7740088, + "Application SN": "11/928,069", + "Title": "Ultrasonic/Sonic Rotary-Hammer Drill (USRoHD)", + "Patent Expiration Date": "04/15/2028" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-44914-1", + "Patent Number": 8407979, + "Application SN": "11/926,279", + "Title": "Magnetically-Conformed, Variable Area Discharge Chamber for Hall Thruster Plasma Accelerators", + "Patent Expiration Date": "06/08/2031" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-45053-1", + "Patent Number": 8057283, + "Application SN": "12/119,989", + "Title": "The process of significant improving of optical quality factor of whispering gallery mode resonator.", + "Patent Expiration Date": "09/15/2030" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-45911-1", + "Patent Number": 8163094, + "Application SN": "12/508,006", + "Title": "Method to Improve Indium Bump Bonding Via Indium Oxide Removal Using a Two Step Plasma Process", + "Patent Expiration Date": "08/16/2030" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-45948-1", + "Patent Number": 7843650, + "Application SN": "12/490,422", + "Title": "Monolithic Afocal Telescope", + "Patent Expiration Date": "06/24/2029" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-46253-1", + "Patent Number": 0, + "Application SN": "12/237,159", + "Title": "Generation of optical combs in a whispering gallery mode resonator from a bichromatic pump", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-46843-1", + "Patent Number": 8169371, + "Application SN": "12/541,725", + "Title": "A single-layer, all-metal patch antenna element with wide bandwidth", + "Patent Expiration Date": "09/25/2030" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-46938-1", + "Patent Number": 8026768, + "Application SN": "12/691,070", + "Title": "A 201Hg+ co-magnetometer for 199Hg+ trapped ion space atomic clocks", + "Patent Expiration Date": "04/03/2030" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-47300-1", + "Patent Number": 0, + "Application SN": "13/017,174", + "Title": "Textured Si Anode for High Capacity, Rapid Charge Rate Li Ion Batteries", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-47300-2", + "Patent Number": 0, + "Application SN": "13/895,499", + "Title": "Textured Si Anode for High Capacity, Rapid Charge Rate Li Ion Batteries", + "Patent Expiration Date": "01/31/2031" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-47310-1", + "Patent Number": 8502987, + "Application SN": "13/018,672", + "Title": "Coherent Detector for Near-Angle Scattering and Polarization Characterization of Telescope Mirror Coatings", + "Patent Expiration Date": "03/24/2032" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-47604-1", + "Patent Number": 8649000, + "Application SN": "13/277,954", + "Title": "Surface Enhanced Raman Scattering using Silica Whispering-Gallery Mode Resonators", + "Patent Expiration Date": "07/10/2032" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-47717-1", + "Patent Number": "", + "Application SN": "13/281,683", + "Title": "360-Degree Camera Head for Unmanned Surface Sea Vehicles", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Issued", + "Case Number": "NPO-47869-1", + "Patent Number": 8649609, + "Application SN": "13/071,299", + "Title": "FPGA Vision Data Architecture", + "Patent Expiration Date": "04/17/2032" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-47881-1", + "Patent Number": "", + "Application SN": "14/151,684", + "Title": "Pulsed Plasma Lubricator (PPL) Technology for the In Situ Replenishment of Dry Lubricants in Extreme Environments", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-48140-1", + "Patent Number": "", + "Application SN": "13/456,451", + "Title": "Probabilistic Surface Characterization for Safe Landing Hazard Detection and Avoidance", + "Patent Expiration Date": "" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-48413-1", + "Patent Number": "", + "Application SN": "13/757,929", + "Title": "Simple Laser-Communications Terminal for Downlink from Earth-Orbit at Rates Exceeding 10 Gb/s", + "Patent Expiration Date": "02/04/2033" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-48539-1", + "Patent Number": "", + "Application SN": "13/858,267", + "Title": "Neutral mounting of whispering gallery mode resonators for suppression of acceleration-induced frequency fluctuations", + "Patent Expiration Date": "04/08/2033" + }, + { + "Center": "NASA Jet Propulsion Laboratory", + "Status": "Application", + "Case Number": "NPO-49086-1", + "Patent Number": "", + "Application SN": "14/101,547", + "Title": "Electride Mediated Surface Enhanced Raman Spectroscopy", + "Patent Expiration Date": "12/10/2033" + }, + { + "Center": "NASA Stennis Space Center", + "Status": "Issued", + "Case Number": "SSC-00040", + "Patent Number": 5726632, + "Application SN": "08/622,178", + "Title": "HANDHELD HYDROGEN FIRE IMAGER", + "Patent Expiration Date": "03/14/2016" + }, + { + "Center": "NASA Stennis Space Center", + "Status": "Issued", + "Case Number": "SSC-00050", + "Patent Number": 6020587, + "Application SN": "09/3,212", + "Title": "A HAND HELD PLANT STRESS DETECTION SYSTEM", + "Patent Expiration Date": "01/06/2018" + }, + { + "Center": "NASA Stennis Space Center", + "Status": "Issued", + "Case Number": "SSC-00247", + "Patent Number": 8618933, + "Application SN": "11/866,042", + "Title": "Valve Health Monitoring System Utilizing Smart Instrumentation for Real Time and Historical Data Tracking", + "Patent Expiration Date": "05/03/2032" + }, + { + "Center": "NASA Stennis Space Center", + "Status": "Issued", + "Case Number": "SSC-00264", + "Patent Number": 8336849, + "Application SN": "12/704193", + "Title": "Conical Seat Shut Off Valve", + "Patent Expiration Date": "01/13/2031" + }, + { + "Center": "NASA Stennis Space Center", + "Status": "Issued", + "Case Number": "SSC-00327", + "Patent Number": 8401820, + "Application SN": "12/566,111", + "Title": "IN SITU HEALTH MONITORING OF PIEZOELECTRIC SENSORS", + "Patent Expiration Date": "07/31/2030" + } +] diff --git a/mathesar/utils/datafiles.py b/mathesar/utils/datafiles.py index 91200627bc..58f97db52c 100644 --- a/mathesar/utils/datafiles.py +++ b/mathesar/utils/datafiles.py @@ -37,14 +37,17 @@ def create_datafile(data): raw_file = ContentFile(str.encode(data['paste']), name=name) created_from = 'paste' base_name = '' + type = 'tsv' elif 'url' in data: raw_file = _download_datafile(data['url']) created_from = 'url' base_name = raw_file.name + type = os.path.splitext(raw_file.name)[1][1:] elif 'file' in data: raw_file = data['file'] created_from = 'file' base_name = raw_file.name + type = os.path.splitext(raw_file.name)[1][1:] if base_name: max_length = DataFile._meta.get_field('base_name').max_length @@ -53,17 +56,26 @@ def create_datafile(data): encoding = get_file_encoding(raw_file.file) text_file = TextIOWrapper(raw_file.file, encoding=encoding) - dialect = get_sv_dialect(text_file) - - datafile = DataFile( - file=raw_file, - base_name=base_name, - created_from=created_from, - header=header, - delimiter=dialect.delimiter, - escapechar=dialect.escapechar, - quotechar=dialect.quotechar, - ) + if type == 'csv' or type == 'tsv': + dialect = get_sv_dialect(text_file) + datafile = DataFile( + file=raw_file, + base_name=base_name, + type=type, + created_from=created_from, + header=header, + delimiter=dialect.delimiter, + escapechar=dialect.escapechar, + quotechar=dialect.quotechar, + ) + else: + datafile = DataFile( + file=raw_file, + base_name=base_name, + type=type, + created_from=created_from, + header=header, + ) datafile.save() raw_file.close() From d4232f7ad4b6650f3964f9648e3ea087d5a1acf8 Mon Sep 17 00:00:00 2001 From: IamEzio Date: Mon, 29 May 2023 21:53:19 +0530 Subject: [PATCH 053/620] made migrations --- mathesar/migrations/0001_initial.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathesar/migrations/0001_initial.py b/mathesar/migrations/0001_initial.py index 5cf1128be7..a5b35a759e 100644 --- a/mathesar/migrations/0001_initial.py +++ b/mathesar/migrations/0001_initial.py @@ -166,6 +166,7 @@ class Migration(migrations.Migration): ('updated_at', models.DateTimeField(auto_now=True)), ('file', models.FileField(upload_to=mathesar.utils.models.user_directory_path)), ('created_from', models.CharField(choices=[('FILE', 'File'), ('PASTE', 'Paste'), ('URL', 'Url')], max_length=128)), + ('type', models.CharField(choices=[('CSV', 'csv'), ('TSV', 'tsv'), ('JSON', 'json')], max_length=128)), ('base_name', models.CharField(max_length=100)), ('header', models.BooleanField(default=True)), ('delimiter', models.CharField(blank=True, default=',', max_length=1)), From 1a8d2a99ed2ae01640d2f95155ef04d8b7bc2c09 Mon Sep 17 00:00:00 2001 From: pavish Date: Mon, 29 May 2023 22:53:24 +0530 Subject: [PATCH 054/620] Avoid usage of currentSchemaId and currentDBName to update query count --- mathesar_ui/src/stores/queries.ts | 49 +++++++++++++++++-------------- mathesar_ui/src/stores/schemas.ts | 21 +++++++------ 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/mathesar_ui/src/stores/queries.ts b/mathesar_ui/src/stores/queries.ts index 9161266394..fff7571f3d 100644 --- a/mathesar_ui/src/stores/queries.ts +++ b/mathesar_ui/src/stores/queries.ts @@ -20,6 +20,16 @@ * * This store would be a good place to start since the usage * is limited compared to the other stores. + * + * Note: Some methods in this file directly make use of currentSchemaId, + * and they need to be refactored to get schemaId as an argument. + * + * Reason behing using currentSchemaId: + * Initially, queries were not designed on the backend to be part of schemas, + * i.e. queries were on the same hierarchial level as schemas. The frontend + * followed the same structure on this store. The UX however, expects queries + * to be placed within schemas. This conflict was handled on this store leading + * to having us use the currentSchemaId store directly. */ import { derived, writable, get } from 'svelte/store'; @@ -45,14 +55,14 @@ import type { } from '@mathesar/api/types/queries'; import { CancellablePromise } from '@mathesar-component-library'; -import { currentSchemaId, modifySchemaCountOfExploration } from './schemas'; -import { currentDBName } from './databases'; +import { currentSchemaId, addCountToSchemaNumExplorations } from './schemas'; const commonData = preloadCommonData(); export type UnsavedQueryInstance = Partial; export interface QueriesStoreSubstance { + schemaId: SchemaEntry['id']; requestStatus: RequestStatus; data: Map; } @@ -84,6 +94,7 @@ function setSchemaQueriesStore( } const storeValue: QueriesStoreSubstance = { + schemaId, requestStatus: { state: 'success' }, data: queries, }; @@ -98,7 +109,7 @@ function setSchemaQueriesStore( return store; } -function findSchemaStoreForTable(id: QueryInstance['id']) { +function findSchemaStoreForQuery(id: QueryInstance['id']) { return [...schemasCacheManager.cache.values()].find((entry) => get(entry).data.has(id), ); @@ -154,6 +165,7 @@ export function getQueriesStoreForSchema( let store = schemasCacheManager.get(schemaId); if (!store) { store = writable({ + schemaId, requestStatus: { state: 'processing' }, data: new Map(), }); @@ -170,9 +182,8 @@ export function getQueriesStoreForSchema( return store; } -export const queries: Readable = derived( - currentSchemaId, - ($currentSchemaId, set) => { +export const queries: Readable> = + derived(currentSchemaId, ($currentSchemaId, set) => { let unsubscribe: Unsubscriber; if (!$currentSchemaId) { @@ -190,21 +201,16 @@ export const queries: Readable = derived( return () => { unsubscribe?.(); }; - }, -); + }); export function createQuery( newQuery: UnsavedQueryInstance, ): CancellablePromise { const promise = postAPI('/api/db/v0/queries/', newQuery); void promise.then((instance) => { - const databaseName = get(currentDBName); - const schemaId = get(currentSchemaId); - if (databaseName && schemaId) { - modifySchemaCountOfExploration(databaseName, schemaId, 1); - } + addCountToSchemaNumExplorations(instance.schema, 1); void refetchQueriesForSchema(instance.schema); - return undefined; + return instance; }); return promise; } @@ -275,15 +281,14 @@ export function deleteQuery(queryId: number): CancellablePromise { const promise = deleteAPI(`/api/db/v0/queries/${queryId}/`); void promise.then(() => { - const databaseName = get(currentDBName); - const schemaId = get(currentSchemaId); - if (databaseName && schemaId) { - modifySchemaCountOfExploration(databaseName, schemaId, -1); + const store = findSchemaStoreForQuery(queryId); + if (store) { + store.update((storeData) => { + storeData.data.delete(queryId); + return { ...storeData, data: new Map(storeData.data) }; + }); + addCountToSchemaNumExplorations(get(store).schemaId, -1); } - findSchemaStoreForTable(queryId)?.update((storeData) => { - storeData.data.delete(queryId); - return { ...storeData, data: new Map(storeData.data) }; - }); return undefined; }); return promise; diff --git a/mathesar_ui/src/stores/schemas.ts b/mathesar_ui/src/stores/schemas.ts index 0f3fd552ff..f860c27cb7 100644 --- a/mathesar_ui/src/stores/schemas.ts +++ b/mathesar_ui/src/stores/schemas.ts @@ -36,6 +36,12 @@ const dbSchemasRequestMap: Map< CancellablePromise | undefined> > = new Map(); +function findStoreBySchemaId(id: SchemaEntry['id']) { + return [...dbSchemaStoreMap.values()].find((entry) => + get(entry).data.has(id), + ); +} + function setDBSchemaStore( database: Database['name'], schemas: SchemaResponse[], @@ -113,20 +119,17 @@ export function addCountToSchemaNumTables( } } -export function modifySchemaCountOfExploration( - database: Database['name'], +export function addCountToSchemaNumExplorations( schemaId: SchemaEntry['id'], count: number, ) { - const store = dbSchemaStoreMap.get(database); + const store = findStoreBySchemaId(schemaId); if (store) { store.update((value) => { - if (value.data.has(schemaId)) { - const schemaToModify = value.data?.get(schemaId); - if (schemaToModify) { - schemaToModify.num_queries += count; - value.data?.set(schemaId, schemaToModify); - } + const schemaToModify = value.data.get(schemaId); + if (schemaToModify) { + schemaToModify.num_queries += count; + value.data.set(schemaId, schemaToModify); } return { ...value, From d47c780963c2e9332bb624a6a35d0e5e61562681 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 30 May 2023 10:01:23 +0800 Subject: [PATCH 055/620] add first pass duplication function in SQL --- db/sql/0_msar.sql | 104 +++++++++++++++++++++++++++++++++------------- 1 file changed, 75 insertions(+), 29 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 8e2927a032..74ddb0d7b1 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -729,6 +729,7 @@ The input JSON should be of the form "id": "schema": , "name": , + "modifier": , "options": { "length": , "precision": , @@ -739,35 +740,38 @@ The input JSON should be of the form } */ SELECT COALESCE( - typ.id::regtype::text, - msar.get_fully_qualified_object_name(typ.schema, typ.name)::regtype::text, - typ.name::regtype::text -)::regtype::text || COALESCE( - '(' || topts.length || ')', - ' ' || topts.fields || ' (' || topts.precision || ')', - ' ' || topts.fields, - '(' || topts.precision || ', ' || topts.scale || ')', - '(' || topts.precision || ')', - '' -) || COALESCE ( - REPEAT('[]', topts.dimensions), - '' + format_type(typ.id, typ.modifier), + COALESCE( + msar.get_fully_qualified_object_name(typ.schema, typ.name)::regtype::text, + typ.name::regtype::text + )::regtype::text || COALESCE( + '(' || topts.length || ')', + ' ' || topts.fields || ' (' || topts.precision || ')', + ' ' || topts.fields, + '(' || topts.precision || ', ' || topts.scale || ')', + '(' || topts.precision || ')', + '' + ) || COALESCE ( + REPEAT('[]', topts.dimensions), + '' + ) ) FROM - jsonb_to_record(typ_jsonb) AS typ(id oid, schema text, name text, options jsonb), + jsonb_to_record(typ_jsonb) AS typ(id oid, schema text, name text, modifier integer, options jsonb), jsonb_to_record(typ_jsonb -> 'options') AS topts(length integer, precision integer, scale integer, fields text, dimensions integer); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.process_col_create_arr(tab_id oid, col_create_arr jsonb) RETURNS __msar.col_create_def[] AS $$/* -Create a __msar.col_create_def from a column creation defining JSON blob. +msar.process_col_create_arr(tab_id oid, col_create_arr jsonb, raw_default boolean) + RETURNS __msar.col_create_def[] AS $$/* +Create a __msar.col_create_def from a JSON array of column creation defining JSON blobs. Args: tab_id: The OID of the table where we'll create the columns - col_create_arr: A jsonb array defining a column creation (must have "name" and "type" keys; - "not_null" and "default" keys optional). + col_create_arr: A jsonb array defining a column creation (must have "type" key; "name", + "not_null", and "default" keys optional). */ WITH attnum_cte AS ( SELECT MAX(attnum) AS m_attnum FROM pg_attribute WHERE attrelid=tab_id @@ -778,8 +782,13 @@ WITH attnum_cte AS ( quote_ident('Column ' || (attnum_cte.m_attnum + ROW_NUMBER() OVER ())) ), msar.build_type_text(col_create_obj -> 'type'), - col_create_obj ->> 'not_null', - col_create_obj ->> 'default' + col_create_obj -> 'not_null', + CASE + WHEN raw_default THEN + col_create_obj ->> 'default' + ELSE + format('%L', col_create_obj ->> 'default') + END )::__msar.col_create_def AS col_create_defs FROM attnum_cte, jsonb_array_elements(col_create_arr) as col_create_obj ) @@ -787,6 +796,31 @@ SELECT array_agg(col_create_defs) FROM col_create_cte; $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; +CREATE OR REPLACE FUNCTION +msar.process_col_dup_arr(tab_id oid, col_dup_arr jsonb, copy_con boolean, copy_default boolean) + RETURNS jsonb AS $$/* +Create a column creation JSON array from a JSON array of column duplication defining JSON blobs. + +Args: + col_create_arr: A jsonb array defining a column duplication (must have "col_id" key. + "name", "data", and "constraints" keys optional). +*/ +SELECT jsonb_agg( + jsonb_build_object( + 'name', col_dup_obj -> 'name', + 'type', jsonb_build_object('id', atttypid, 'modifier', atttypmod), + 'not_null', CASE WHEN copy_con THEN attnotnull END, + 'default', CASE WHEN copy_con THEN pg_get_expr(adbin, tab_id) END + ) +) +FROM + (SELECT * FROM pg_attribute WHERE attrelid=tab_id) pg_attr + LEFT JOIN pg_attrdef ON (attrelid=adrelid AND attnum=adnum) + INNER JOIN jsonb_array_elements(col_dup_arr) col_dup_obj + ON attnum=(col_dup_obj -> 'col_id')::smallint; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + + CREATE OR REPLACE FUNCTION __msar.add_columns(tab_name text, col_defs variadic __msar.col_create_def[]) RETURNS text AS $$/* Add the given columns to the given table. @@ -801,9 +835,9 @@ WITH ca_cte AS ( WHEN col.not_null AND col.default_ IS NULL THEN format('ADD COLUMN %s %s NOT NULL', col.name_, col.type_) WHEN col.not_null AND col.default_ IS NOT NULL THEN - format('ADD COLUMN %s %s NOT NULL DEFAULT ''%s''', col.name_, col.type_, col.default_) + format('ADD COLUMN %s %s NOT NULL DEFAULT %s', col.name_, col.type_, col.default_) WHEN col.default_ IS NOT NULL THEN - format('ADD COLUMN %s %s DEFAULT ''%s''', col.name_, col.type_, col.default_) + format('ADD COLUMN %s %s DEFAULT %s', col.name_, col.type_, col.default_) ELSE format('ADD COLUMN %s %s', col.name_, col.type_) END, @@ -816,17 +850,15 @@ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.add_columns(tab_id oid, col_defs jsonb) RETURNS jsonb AS $$/* +msar.add_columns(tab_id oid, col_defs jsonb, raw_default boolean DEFAULT false) + RETURNS jsonb AS $$/* TODO */ DECLARE - sql_query text; col_create_defs __msar.col_create_def[]; - col_names text[]; BEGIN - col_create_defs := msar.process_col_create_arr(tab_id, col_defs); - col_names := array_agg(cd.name_) FROM unnest(col_create_defs) AS cd; - sql_query := __msar.add_columns(__msar.get_relation_name(tab_id), variadic col_create_defs); + col_create_defs := msar.process_col_create_arr(tab_id, col_defs, raw_default); + PERFORM __msar.add_columns(__msar.get_relation_name(tab_id), variadic col_create_defs); RETURN jsonb_agg( jsonb_build_object( 'tab_id', attrelid, @@ -844,12 +876,26 @@ $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.add_columns(sch_name text, tab_name text, col_defs jsonb) RETURNS jsonb AS $$/* +msar.add_columns(sch_name text, tab_name text, col_defs jsonb, raw_default boolean) + RETURNS jsonb AS $$/* TODO */ SELECT msar.add_columns(msar.get_relation_oid(sch_name, tab_name), col_defs); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + +CREATE OR REPLACE FUNCTION +msar.duplicate_columns(tab_id oid, col_dup_arr jsonb, copy_con boolean, copy_default boolean) + RETURNS jsonb AS $$/* +TODO +*/ +WITH col_create_cte AS ( + SELECT msar.process_col_dup_arr(tab_id, col_dup_arr, copy_con, copy_default) col_defs +) +SELECT msar.add_columns(tab_id, col_create_cte.col_defs, true) FROM col_create_cte; +$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; + + ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -- MATHESAR DROP TABLE FUNCTIONS From 16b422c684c9d4d5e7f25c716fa6f365a842c115 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Tue, 30 May 2023 15:51:08 +0530 Subject: [PATCH 056/620] Add `sum` aggregation class and add suffix for it. --- db/functions/base.py | 9 +++++++++ mathesar/models/query.py | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/db/functions/base.py b/db/functions/base.py index 2d79e9b526..6b10a1c18c 100644 --- a/db/functions/base.py +++ b/db/functions/base.py @@ -396,6 +396,15 @@ def to_sa_expression(column_expr): return array_agg(column_expr) +class Sum(DBFunction): + id = 'sum' + name = 'sum' + + @staticmethod + def to_sa_expression(column_expr): + return sa_call_sql_function('sum', column_expr, return_type=PostgresType.NUMERIC) + + class Distinct(DBFunction): id = 'distinct' name = 'distinct' diff --git a/mathesar/models/query.py b/mathesar/models/query.py index a6395bc245..20c3136aba 100644 --- a/mathesar/models/query.py +++ b/mathesar/models/query.py @@ -6,7 +6,7 @@ from db.transforms.operations.deserialize import deserialize_transformation from db.transforms.operations.serialize import serialize_transformation from db.transforms.base import Summarize -from db.functions.base import Count, ArrayAgg +from db.functions.base import Count, ArrayAgg, Sum from db.functions.packed import DistinctArrayAgg from mathesar.api.exceptions.query_exceptions.exceptions import DeletedColumnAccess @@ -419,6 +419,7 @@ def _get_default_display_name_for_agg_output_alias( DistinctArrayAgg.id: " distinct list", ArrayAgg.id: " list", Count.id: " count", + Sum.id: " sum", } suffix_to_add = map_of_agg_function_to_suffix.get(agg_function) if suffix_to_add: From 1ee9dffeeb947f5397ce6ff8d4811ed7627f62f2 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Tue, 30 May 2023 15:53:01 +0530 Subject: [PATCH 057/620] Add `Sum` aggregation function to Mathesar UI --- mathesar_ui/src/api/types/queries.ts | 2 +- .../data-explorer/QuerySummarizationTransformationModel.ts | 2 +- .../transformations-pane/summarization/Aggregation.svelte | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mathesar_ui/src/api/types/queries.ts b/mathesar_ui/src/api/types/queries.ts index ddd5dbfc6f..ca2c34ef7e 100644 --- a/mathesar_ui/src/api/types/queries.ts +++ b/mathesar_ui/src/api/types/queries.ts @@ -40,7 +40,7 @@ export interface QueryInstanceSummarizationTransformation { aggregation_expressions?: { input_alias: string; output_alias: string; - function: 'distinct_aggregate_to_array' | 'count'; + function: 'distinct_aggregate_to_array' | 'count' | 'sum'; }[]; }; } diff --git a/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts b/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts index 8d0360e89d..b0edc22de5 100644 --- a/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts +++ b/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts @@ -4,7 +4,7 @@ import { ImmutableMap } from '@mathesar-component-library'; export interface QuerySummarizationAggregationEntry { inputAlias: string; outputAlias: string; - function: 'distinct_aggregate_to_array' | 'count'; + function: 'distinct_aggregate_to_array' | 'count' | 'sum'; } export interface QuerySummarizationGroupingEntry { diff --git a/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte b/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte index 350741a5b7..83871ec974 100644 --- a/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte +++ b/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte @@ -17,6 +17,8 @@ return 'List'; case 'count': return 'Count'; + case 'sum': + return 'Sum'; default: return ''; } @@ -37,7 +39,7 @@ {/if} as Date: Fri, 2 Jun 2023 16:55:35 +0530 Subject: [PATCH 077/620] added methods to accept json --- db/records/operations/insert.py | 14 ++++ mathesar/imports/json.py | 104 ++++++++++++++++++++++++++++ mathesar/tests/data/data_types.json | 34 +++++++++ mathesar/utils/tables.py | 9 ++- 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 mathesar/imports/json.py create mode 100644 mathesar/tests/data/data_types.json diff --git a/db/records/operations/insert.py b/db/records/operations/insert.py index e279a28596..30be6e2561 100644 --- a/db/records/operations/insert.py +++ b/db/records/operations/insert.py @@ -1,3 +1,4 @@ +import json import tempfile from psycopg2 import sql @@ -31,6 +32,19 @@ def insert_record_or_records(table, engine, record_data): return None +def insert_records_from_json(table, engine, json_filepath): + with open(json_filepath, 'r') as json_file: + data = json.load(json_file) + for i, row in enumerate(data): + data[i] = { + k: json.dumps(v) + if (isinstance(v, dict) or isinstance(v, list)) + else v + for k, v in row.items() + } + insert_record_or_records(table, engine, data) + + def insert_records_from_csv(table, engine, csv_filepath, column_names, header, delimiter=None, escape=None, quote=None, encoding=None): with open(csv_filepath, "r", encoding=encoding) as csv_file: with engine.begin() as conn: diff --git a/mathesar/imports/json.py b/mathesar/imports/json.py new file mode 100644 index 0000000000..b4c50efeab --- /dev/null +++ b/mathesar/imports/json.py @@ -0,0 +1,104 @@ +import json + +from db.identifiers import truncate_if_necessary +from db.tables.operations.alter import update_pk_sequence_to_latest +from mathesar.database.base import create_mathesar_engine +from mathesar.models.base import Table +from db.records.operations.insert import insert_records_from_json +from db.tables.operations.create import create_string_column_table +from db.tables.operations.select import get_oid_from_table +from db.tables.operations.drop import drop_table +from db.constants import ID, ID_ORIGINAL, COLUMN_NAME_TEMPLATE +from psycopg2.errors import IntegrityError, DataError + +from mathesar.state import reset_reflection + + +def get_column_names_from_json(data_file): + with open(data_file, 'r') as f: + data = json.load(f) + + if isinstance(data, list): + return list(data[0].keys()) + return list(data.keys()) + + +def _process_column_names(column_names): + column_names = ( + column_name.strip() + for column_name + in column_names + ) + column_names = ( + truncate_if_necessary(column_name) + for column_name + in column_names + ) + column_names = ( + f"{COLUMN_NAME_TEMPLATE}{i}" if name == '' else name + for i, name + in enumerate(column_names) + ) + return list(column_names) + + +def create_db_table_from_json_data_file(data_file, name, schema, comment=None): + db_name = schema.database.name + engine = create_mathesar_engine(db_name) + json_filepath = data_file.file.path + column_names = _process_column_names( + get_column_names_from_json(data_file.file.path) + ) + table = create_string_column_table( + name=name, + schema=schema.name, + column_names=column_names, + engine=engine, + comment=comment, + ) + try: + insert_records_from_json( + table, + engine, + json_filepath + ) + update_pk_sequence_to_latest(engine, table) + except (IntegrityError, DataError): + drop_table(name=name, schema=schema.name, engine=engine) + column_names_alt = [ + fieldname if fieldname != ID else ID_ORIGINAL + for fieldname in column_names + ] + table = create_string_column_table( + name=name, + schema=schema.name, + column_names=column_names_alt, + engine=engine, + comment=comment, + ) + insert_records_from_json( + table, + engine, + json_filepath + ) + reset_reflection(db_name=db_name) + return table + + +def create_table_from_json(data_file, name, schema, comment=None): + engine = create_mathesar_engine(schema.database.name) + db_table = create_db_table_from_json_data_file( + data_file, name, schema, comment=comment + ) + db_table_oid = get_oid_from_table( + db_table.name, db_table.schema, engine + ) + table = Table.current_objects.get( + oid=db_table_oid, + schema=schema, + ) + table.import_verified = False + table.save() + data_file.table_imported_to = table + data_file.save() + return table diff --git a/mathesar/tests/data/data_types.json b/mathesar/tests/data/data_types.json new file mode 100644 index 0000000000..24e572d4bb --- /dev/null +++ b/mathesar/tests/data/data_types.json @@ -0,0 +1,34 @@ +[ + { + "Integer": 5, + "Boolean": true, + "Decimal": "6.5", + "Text": "Pizza", + "Money": "$5", + "Duration": "10:10", + "Date & Time": "10/10/2000 10:10", + "Email": "ezio@example.com", + "URI": "https://mathesar.org/", + "List": ["Gwen", "Matt", "Bruce"], + "Dict": { + "Name": "Peter", + "Age": 25 + } + }, + { + "Integer": 6, + "Boolean": false, + "Decimal": "10.5", + "Text": "Noodles", + "Money": "$10", + "Duration": "10:00", + "Date & Time": "01/05/1900 10:10", + "Email": "dom@example.com", + "URI": "https://github.com/", + "List": ["Jason", "Jake", "Mary"], + "Dict": { + "Name": "John", + "Age": 25 + } + } +] \ No newline at end of file diff --git a/mathesar/utils/tables.py b/mathesar/utils/tables.py index 5d4b4e5f00..d7d7a36484 100644 --- a/mathesar/utils/tables.py +++ b/mathesar/utils/tables.py @@ -4,7 +4,9 @@ from db.tables.operations.select import get_oid_from_table from db.tables.operations.infer_types import infer_table_column_types from mathesar.database.base import create_mathesar_engine +from mathesar.errors import InvalidTableError from mathesar.imports.csv import create_table_from_csv +from mathesar.imports.json import create_table_from_json from mathesar.models.base import Table from mathesar.state.django import reflect_columns_from_tables from mathesar.state import get_cached_metadata @@ -65,7 +67,12 @@ def gen_table_name(schema, data_files=None): def create_table_from_datafile(data_files, name, schema, comment=None): data_file = data_files[0] - table = create_table_from_csv(data_file, name, schema, comment=comment) + if data_file.type == "json": + table = create_table_from_json(data_file, name, schema, comment=comment) + elif data_file.type == "csv" or data_file.type == "tsv": + table = create_table_from_csv(data_file, name, schema, comment=comment) + else: + raise InvalidTableError return table From 46e5fa421b07729e0cf8c497ac4ed55865e3b338 Mon Sep 17 00:00:00 2001 From: IamEzio Date: Fri, 2 Jun 2023 17:50:55 +0530 Subject: [PATCH 078/620] updated type inference logic to prefer json object over uri --- db/columns/operations/infer_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/columns/operations/infer_types.py b/db/columns/operations/infer_types.py index e3acf15bec..9e1ffc9c62 100644 --- a/db/columns/operations/infer_types.py +++ b/db/columns/operations/infer_types.py @@ -34,9 +34,9 @@ PostgresType.TIME_WITHOUT_TIME_ZONE, PostgresType.INTERVAL, MathesarCustomType.EMAIL, - MathesarCustomType.URI, MathesarCustomType.MATHESAR_JSON_ARRAY, MathesarCustomType.MATHESAR_JSON_OBJECT, + MathesarCustomType.URI, ], } From b410270fb9da77da305a10e473e3e56c8093a33e Mon Sep 17 00:00:00 2001 From: IamEzio Date: Fri, 2 Jun 2023 18:22:49 +0530 Subject: [PATCH 079/620] fixed linting --- mathesar/imports/json.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathesar/imports/json.py b/mathesar/imports/json.py index b4c50efeab..5f75453afa 100644 --- a/mathesar/imports/json.py +++ b/mathesar/imports/json.py @@ -17,7 +17,7 @@ def get_column_names_from_json(data_file): with open(data_file, 'r') as f: data = json.load(f) - + if isinstance(data, list): return list(data[0].keys()) return list(data.keys()) From 69c6836dfa8e36dc651728ae7ebe8c35653b8a4c Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Fri, 2 Jun 2023 18:56:25 +0530 Subject: [PATCH 080/620] Add test for `sum` aggregation function --- .../api/query/test_library_demo_reports.py | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/mathesar/tests/api/query/test_library_demo_reports.py b/mathesar/tests/api/query/test_library_demo_reports.py index 101c69a45f..9aed0d3d7b 100644 --- a/mathesar/tests/api/query/test_library_demo_reports.py +++ b/mathesar/tests/api/query/test_library_demo_reports.py @@ -190,10 +190,12 @@ def create_monthly_checkouts_query(run_overdue_books_scenario, get_uid, client): "initial_columns": [ {"id": columns["id"]["id"], "alias": "id"}, {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + {"id": columns["Patron"]["id"], "alias": "Patron"}, ], "display_names": { "Checkout Month": "Month", "Count": "Number of Checkouts", + "Sum": "Sum of patron", }, "display_options": { "Checkout Time": { @@ -202,6 +204,9 @@ def create_monthly_checkouts_query(run_overdue_books_scenario, get_uid, client): "id": { display_option_origin: "id", }, + "Patron": { + display_option_origin: "Patron", + }, }, "transformations": [ { @@ -218,6 +223,11 @@ def create_monthly_checkouts_query(run_overdue_books_scenario, get_uid, client): "input_alias": "id", "output_alias": "Count", "function": "count", + }, + { + "input_alias": "Patron", + "output_alias": "Sum", + "function": "sum", } ] }, @@ -260,6 +270,19 @@ def check_monthly_checkouts_columns(create_monthly_checkouts_query, client): 'input_table_id': None, 'input_column_name': None, 'input_alias': 'id', + }, { + 'alias': 'Sum', + 'display_name': 'Sum of patron', + 'type': 'numeric', + 'type_options': None, + 'display_options': { + display_option_origin: "Patron", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'Patron', } ] actual_response_data = client.get(f'/api/db/v0/queries/{query_id}/columns/').json() @@ -270,10 +293,10 @@ def check_monthly_checkouts_columns(create_monthly_checkouts_query, client): def test_monthly_checkouts_scenario(check_monthly_checkouts_columns, client): query_id = check_monthly_checkouts_columns expect_records = [ - {'Checkout Month': '2022-05', 'Count': 39}, - {'Checkout Month': '2022-06', 'Count': 26}, - {'Checkout Month': '2022-07', 'Count': 29}, - {'Checkout Month': '2022-08', 'Count': 10}, + {'Checkout Month': '2022-05', 'Count': 39, 'Sum': 649}, + {'Checkout Month': '2022-06', 'Count': 26, 'Sum': 298}, + {'Checkout Month': '2022-07', 'Count': 29, 'Sum': 524}, + {'Checkout Month': '2022-08', 'Count': 10, 'Sum': 126}, ] actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records From 9eeded5f2b3e361a132ca16a8092115bb65133a4 Mon Sep 17 00:00:00 2001 From: IamEzio Date: Fri, 2 Jun 2023 23:31:25 +0530 Subject: [PATCH 081/620] fixed failing tests --- mathesar/tests/api/test_table_api.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mathesar/tests/api/test_table_api.py b/mathesar/tests/api/test_table_api.py index 8ed35c8201..b659ed7e0f 100644 --- a/mathesar/tests/api/test_table_api.py +++ b/mathesar/tests/api/test_table_api.py @@ -25,6 +25,7 @@ def long_column_data_file(): file=File(csv_file), created_from='file', base_name='longdatafiled', + type='csv' ) return data_file @@ -45,7 +46,8 @@ def data_file(patents_csv_filepath): data_file = DataFile.objects.create( file=File(csv_file), created_from='file', - base_name='patents' + base_name='patents', + type='csv' ) return data_file @@ -56,7 +58,8 @@ def existing_id_col_table_datafile(table_with_id_col_filepath): data_file = DataFile.objects.create( file=File(csv_file), created_from='file', - base_name='table_with_id' + base_name='table_with_id', + type='csv' ) return data_file @@ -71,6 +74,7 @@ def paste_data_file(paste_filename): delimiter='\t', quotechar='', escapechar='', + type='csv' ) return data_file @@ -82,7 +86,8 @@ def url_data_file(patents_url, patents_url_filename): data_file = DataFile.objects.create( file=File(file), created_from='url', - base_name=base_name + base_name=base_name, + type='csv' ) return data_file From 2dfb617c02cebce5da71f35608e34f45b40396a4 Mon Sep 17 00:00:00 2001 From: IamEzio Date: Fri, 2 Jun 2023 23:56:44 +0530 Subject: [PATCH 082/620] added type csv to dummy files --- mathesar/tests/api/conftest.py | 2 +- mathesar/tests/api/test_data_file_api.py | 2 +- mathesar/tests/conftest.py | 2 +- mathesar/tests/display_options_inference/test_money.py | 2 +- mathesar/tests/imports/test_csv.py | 8 ++++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mathesar/tests/api/conftest.py b/mathesar/tests/api/conftest.py index d96fb1e302..6d1a38113c 100644 --- a/mathesar/tests/api/conftest.py +++ b/mathesar/tests/api/conftest.py @@ -20,7 +20,7 @@ def _create_data_file(file_path, file_name): with open(file_path, 'rb') as csv_file: data_file = DataFile.objects.create( file=File(csv_file), created_from='file', - base_name=file_name + base_name=file_name, type='csv' ) return data_file diff --git a/mathesar/tests/api/test_data_file_api.py b/mathesar/tests/api/test_data_file_api.py index 31d11035e8..ec5b145e07 100644 --- a/mathesar/tests/api/test_data_file_api.py +++ b/mathesar/tests/api/test_data_file_api.py @@ -32,7 +32,7 @@ def verify_data_file_data(data_file, data_file_dict): @pytest.fixture def data_file(patents_csv_filepath): with open(patents_csv_filepath, 'rb') as csv_file: - data_file = DataFile.objects.create(file=File(csv_file)) + data_file = DataFile.objects.create(file=File(csv_file), type='csv') return data_file diff --git a/mathesar/tests/conftest.py b/mathesar/tests/conftest.py index 8e42747a85..09215d91c2 100644 --- a/mathesar/tests/conftest.py +++ b/mathesar/tests/conftest.py @@ -328,7 +328,7 @@ def _create_table(table_name, schema_name, csv_filepath): def _get_datafile_for_path(path): with open(path, 'rb') as file: - datafile = DataFile.objects.create(file=File(file)) + datafile = DataFile.objects.create(file=File(file), type='csv') return datafile diff --git a/mathesar/tests/display_options_inference/test_money.py b/mathesar/tests/display_options_inference/test_money.py index 0f3c7c4bd8..5eaaa95447 100644 --- a/mathesar/tests/display_options_inference/test_money.py +++ b/mathesar/tests/display_options_inference/test_money.py @@ -26,7 +26,7 @@ def test_display_options_inference(client, patent_schema, col_name, expected_dis table_name = 'Type Inference Table' file = 'mathesar/tests/data/display_options_inference.csv' with open(file, 'rb') as csv_file: - data_file = DataFile.objects.create(file=File(csv_file)) + data_file = DataFile.objects.create(file=File(csv_file), type='csv') body = { 'data_files': [data_file.id], diff --git a/mathesar/tests/imports/test_csv.py b/mathesar/tests/imports/test_csv.py index d8d6329e4a..44755c0a80 100644 --- a/mathesar/tests/imports/test_csv.py +++ b/mathesar/tests/imports/test_csv.py @@ -17,28 +17,28 @@ @pytest.fixture def data_file(patents_csv_filepath): with open(patents_csv_filepath, "rb") as csv_file: - data_file = DataFile.objects.create(file=File(csv_file)) + data_file = DataFile.objects.create(file=File(csv_file), type='csv') return data_file @pytest.fixture def headerless_data_file(headerless_patents_csv_filepath): with open(headerless_patents_csv_filepath, "rb") as csv_file: - data_file = DataFile.objects.create(file=File(csv_file), header=False) + data_file = DataFile.objects.create(file=File(csv_file), header=False, type='csv') return data_file @pytest.fixture def col_names_with_spaces_data_file(col_names_with_spaces_csv_filepath): with open(col_names_with_spaces_csv_filepath, "rb") as csv_file: - data_file = DataFile.objects.create(file=File(csv_file)) + data_file = DataFile.objects.create(file=File(csv_file), type='csv') return data_file @pytest.fixture def col_headers_empty_data_file(col_headers_empty_csv_filepath): with open(col_headers_empty_csv_filepath, "rb") as csv_file: - data_file = DataFile.objects.create(file=File(csv_file)) + data_file = DataFile.objects.create(file=File(csv_file), type='csv') return data_file From b22cae93a71d644201992ac8c3b5890f9311d11c Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sat, 3 Jun 2023 03:21:16 +0530 Subject: [PATCH 083/620] Atomise the test for aggregation functions and move it to `test_aggregations_functions.py` --- .../api/query/test_aggregation_functions.py | 233 ++++++++++++++++++ .../api/query/test_library_demo_reports.py | 130 +--------- 2 files changed, 234 insertions(+), 129 deletions(-) create mode 100644 mathesar/tests/api/query/test_aggregation_functions.py diff --git a/mathesar/tests/api/query/test_aggregation_functions.py b/mathesar/tests/api/query/test_aggregation_functions.py new file mode 100644 index 0000000000..8d288425da --- /dev/null +++ b/mathesar/tests/api/query/test_aggregation_functions.py @@ -0,0 +1,233 @@ +display_option_origin = "display_option_origin" + + +def test_alias(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["id"]["id"], "alias": "id"}, + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + {"id": columns["Patron"]["id"], "alias": "Patron"}, + ], + "display_names": { + "Checkout Month": "Month", + "Count": "Number of Checkouts", + "Sum": "Sum of patron", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "id": { + display_option_origin: "id", + }, + "Patron": { + display_option_origin: "Patron", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "id", + "output_alias": "Count", + "function": "count", + }, + { + "input_alias": "Patron", + "output_alias": "Sum", + "function": "sum", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()["id"] + expect_repsonse_data = [ + { + 'alias': 'Checkout Month', + 'display_name': 'Month', + 'type': 'text', + 'type_options': None, + 'display_options': { + display_option_origin: "Checkout Time", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'Checkout Time', + }, { + 'alias': 'Count', + 'display_name': 'Number of Checkouts', + 'type': 'integer', + 'type_options': None, + 'display_options': { + display_option_origin: "id", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'id', + }, { + 'alias': 'Sum', + 'display_name': 'Sum of patron', + 'type': 'numeric', + 'type_options': None, + 'display_options': { + display_option_origin: "Patron", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'Patron', + } + ] + actual_response_data = client.get(f'/api/db/v0/queries/{query_id}/columns/').json() + assert sorted(actual_response_data, key=lambda x: x['alias']) == expect_repsonse_data + + +def test_count_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["id"]["id"], "alias": "id"}, + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + ], + "display_names": { + "Checkout Month": "Month", + "Count": "Number of Checkouts", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "id": { + display_option_origin: "id", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "id", + "output_alias": "Count", + "function": "count", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + {'Checkout Month': '2022-05', 'Count': 39}, + {'Checkout Month': '2022-06', 'Count': 26}, + {'Checkout Month': '2022-07', 'Count': 29}, + {'Checkout Month': '2022-08', 'Count': 10}, + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records + + +def test_sum_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + {"id": columns["Patron"]["id"], "alias": "Patron"}, + ], + "display_names": { + "Checkout Month": "Month", + "Sum": "Sum of patron", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "Patron": { + display_option_origin: "Patron", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "Patron", + "output_alias": "Sum", + "function": "sum", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + {'Checkout Month': '2022-05', 'Sum': 649}, + {'Checkout Month': '2022-06', 'Sum': 298}, + {'Checkout Month': '2022-07', 'Sum': 524}, + {'Checkout Month': '2022-08', 'Sum': 126}, + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records diff --git a/mathesar/tests/api/query/test_library_demo_reports.py b/mathesar/tests/api/query/test_library_demo_reports.py index 9aed0d3d7b..24f441ea0e 100644 --- a/mathesar/tests/api/query/test_library_demo_reports.py +++ b/mathesar/tests/api/query/test_library_demo_reports.py @@ -139,8 +139,7 @@ def check_overdue_books_columns(library_ma_tables, create_overdue_books_query, c return query_id -@pytest.fixture -def run_overdue_books_scenario(check_overdue_books_columns, client): +def test_run_overdue_books_scenario(check_overdue_books_columns, client): query_id = check_overdue_books_columns expect_records = [ { @@ -173,130 +172,3 @@ def run_overdue_books_scenario(check_overdue_books_columns, client): for rec_pair in zip(actual_records, expect_records): assert rec_pair[0]['email'] == rec_pair[1]['email'] assert sorted(rec_pair[0]['Title List']) == sorted(rec_pair[1]['Title List']) - - -@pytest.fixture -def create_monthly_checkouts_query(run_overdue_books_scenario, get_uid, client): - _ = run_overdue_books_scenario - checkouts = { - t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] - }["Checkouts"] - columns = { - c["name"]: c for c in checkouts["columns"] - } - request_data = { - "name": get_uid(), - "base_table": checkouts["id"], - "initial_columns": [ - {"id": columns["id"]["id"], "alias": "id"}, - {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, - {"id": columns["Patron"]["id"], "alias": "Patron"}, - ], - "display_names": { - "Checkout Month": "Month", - "Count": "Number of Checkouts", - "Sum": "Sum of patron", - }, - "display_options": { - "Checkout Time": { - display_option_origin: "Checkout Time", - }, - "id": { - display_option_origin: "id", - }, - "Patron": { - display_option_origin: "Patron", - }, - }, - "transformations": [ - { - "spec": { - "grouping_expressions": [ - { - "input_alias": "Checkout Time", - "output_alias": "Checkout Month", - "preproc": "truncate_to_month", - } - ], - "aggregation_expressions": [ - { - "input_alias": "id", - "output_alias": "Count", - "function": "count", - }, - { - "input_alias": "Patron", - "output_alias": "Sum", - "function": "sum", - } - ] - }, - "type": "summarize", - } - ] - } - response = client.post('/api/db/v0/queries/', data=request_data) - assert response.status_code == 201 - return response - - -@pytest.fixture -def check_monthly_checkouts_columns(create_monthly_checkouts_query, client): - query_id = create_monthly_checkouts_query.json()['id'] - expect_repsonse_data = [ - { - 'alias': 'Checkout Month', - 'display_name': 'Month', - 'type': 'text', - 'type_options': None, - 'display_options': { - display_option_origin: "Checkout Time", - }, - 'is_initial_column': False, - 'input_table_name': None, - 'input_table_id': None, - 'input_column_name': None, - 'input_alias': 'Checkout Time', - }, { - 'alias': 'Count', - 'display_name': 'Number of Checkouts', - 'type': 'integer', - 'type_options': None, - 'display_options': { - display_option_origin: "id", - }, - 'is_initial_column': False, - 'input_table_name': None, - 'input_table_id': None, - 'input_column_name': None, - 'input_alias': 'id', - }, { - 'alias': 'Sum', - 'display_name': 'Sum of patron', - 'type': 'numeric', - 'type_options': None, - 'display_options': { - display_option_origin: "Patron", - }, - 'is_initial_column': False, - 'input_table_name': None, - 'input_table_id': None, - 'input_column_name': None, - 'input_alias': 'Patron', - } - ] - actual_response_data = client.get(f'/api/db/v0/queries/{query_id}/columns/').json() - assert sorted(actual_response_data, key=lambda x: x['alias']) == expect_repsonse_data - return query_id - - -def test_monthly_checkouts_scenario(check_monthly_checkouts_columns, client): - query_id = check_monthly_checkouts_columns - expect_records = [ - {'Checkout Month': '2022-05', 'Count': 39, 'Sum': 649}, - {'Checkout Month': '2022-06', 'Count': 26, 'Sum': 298}, - {'Checkout Month': '2022-07', 'Count': 29, 'Sum': 524}, - {'Checkout Month': '2022-08', 'Count': 10, 'Sum': 126}, - ] - actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] - assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records From 29006da5b6f76a4307c0ecfe45e6b7d07062daf1 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sat, 3 Jun 2023 19:31:06 +0530 Subject: [PATCH 084/620] Add `max` aggregation class --- db/functions/base.py | 16 +++++++++++++++- mathesar/models/query.py | 3 ++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/db/functions/base.py b/db/functions/base.py index 2d79e9b526..b3c6b04953 100644 --- a/db/functions/base.py +++ b/db/functions/base.py @@ -18,7 +18,7 @@ from sqlalchemy import column, not_, and_, or_, func, literal, cast, distinct from sqlalchemy.dialects.postgresql import array_agg, TEXT, array from sqlalchemy.sql import quoted_name -from sqlalchemy.sql.functions import GenericFunction, concat +from sqlalchemy.sql.functions import GenericFunction, concat, max from db.engine import get_dummy_engine from db.functions import hints @@ -383,6 +383,20 @@ def to_sa_expression(column_expr): return sa_call_sql_function('count', column_expr, return_type=PostgresType.INTEGER) +class Max(DBFunction): + id = 'max' + name = 'max' + hints = tuple([ + hints.aggregation, + ]) + + @staticmethod + def to_sa_expression(column_expr): + return sa_call_sql_function('sum', column_expr, return_type=PostgresType.NUMERIC) + return max(column_expr) + + + class ArrayAgg(DBFunction): id = 'aggregate_to_array' name = 'aggregate to array' diff --git a/mathesar/models/query.py b/mathesar/models/query.py index a6395bc245..5f80933ee2 100644 --- a/mathesar/models/query.py +++ b/mathesar/models/query.py @@ -6,7 +6,7 @@ from db.transforms.operations.deserialize import deserialize_transformation from db.transforms.operations.serialize import serialize_transformation from db.transforms.base import Summarize -from db.functions.base import Count, ArrayAgg +from db.functions.base import Count, ArrayAgg, Max from db.functions.packed import DistinctArrayAgg from mathesar.api.exceptions.query_exceptions.exceptions import DeletedColumnAccess @@ -419,6 +419,7 @@ def _get_default_display_name_for_agg_output_alias( DistinctArrayAgg.id: " distinct list", ArrayAgg.id: " list", Count.id: " count", + Max.id: " max", } suffix_to_add = map_of_agg_function_to_suffix.get(agg_function) if suffix_to_add: From a97b6d6f04c92991e9c7a340654d9bfb2803adb5 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sat, 3 Jun 2023 19:32:57 +0530 Subject: [PATCH 085/620] Add `Max` function to Mathesar UI --- mathesar_ui/src/api/types/queries.ts | 2 +- .../data-explorer/QuerySummarizationTransformationModel.ts | 2 +- .../transformations-pane/summarization/Aggregation.svelte | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mathesar_ui/src/api/types/queries.ts b/mathesar_ui/src/api/types/queries.ts index ddd5dbfc6f..6dffc476e0 100644 --- a/mathesar_ui/src/api/types/queries.ts +++ b/mathesar_ui/src/api/types/queries.ts @@ -40,7 +40,7 @@ export interface QueryInstanceSummarizationTransformation { aggregation_expressions?: { input_alias: string; output_alias: string; - function: 'distinct_aggregate_to_array' | 'count'; + function: 'distinct_aggregate_to_array' | 'count' | 'max'; }[]; }; } diff --git a/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts b/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts index 8d0360e89d..5d28e07b18 100644 --- a/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts +++ b/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts @@ -4,7 +4,7 @@ import { ImmutableMap } from '@mathesar-component-library'; export interface QuerySummarizationAggregationEntry { inputAlias: string; outputAlias: string; - function: 'distinct_aggregate_to_array' | 'count'; + function: 'distinct_aggregate_to_array' | 'count' | 'max'; } export interface QuerySummarizationGroupingEntry { diff --git a/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte b/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte index 350741a5b7..88e5cd9c97 100644 --- a/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte +++ b/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte @@ -17,6 +17,8 @@ return 'List'; case 'count': return 'Count'; + case 'max': + return 'Max'; default: return ''; } @@ -37,7 +39,7 @@ {/if} as Date: Sun, 4 Jun 2023 17:06:12 +0530 Subject: [PATCH 090/620] Add `Mean` aggregation class --- db/functions/base.py | 12 ++++++++++++ mathesar/models/query.py | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/db/functions/base.py b/db/functions/base.py index 2d79e9b526..a61c81c330 100644 --- a/db/functions/base.py +++ b/db/functions/base.py @@ -383,6 +383,18 @@ def to_sa_expression(column_expr): return sa_call_sql_function('count', column_expr, return_type=PostgresType.INTEGER) +class Mean(DBFunction): + id = 'mean' + name = 'mean' + hints = tuple([ + hints.aggregation, + ]) + + @staticmethod + def to_sa_expression(column_expr): + return sa_call_sql_function('avg', column_expr, return_type=PostgresType.NUMERIC) + + class ArrayAgg(DBFunction): id = 'aggregate_to_array' name = 'aggregate to array' diff --git a/mathesar/models/query.py b/mathesar/models/query.py index a6395bc245..6cdb8b195b 100644 --- a/mathesar/models/query.py +++ b/mathesar/models/query.py @@ -6,7 +6,7 @@ from db.transforms.operations.deserialize import deserialize_transformation from db.transforms.operations.serialize import serialize_transformation from db.transforms.base import Summarize -from db.functions.base import Count, ArrayAgg +from db.functions.base import Count, ArrayAgg, Mean from db.functions.packed import DistinctArrayAgg from mathesar.api.exceptions.query_exceptions.exceptions import DeletedColumnAccess @@ -419,6 +419,7 @@ def _get_default_display_name_for_agg_output_alias( DistinctArrayAgg.id: " distinct list", ArrayAgg.id: " list", Count.id: " count", + Mean.id: " mean", } suffix_to_add = map_of_agg_function_to_suffix.get(agg_function) if suffix_to_add: From 76b0f157daba1c90120dbbd4ec8ed121d5f94a71 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sun, 4 Jun 2023 17:24:45 +0530 Subject: [PATCH 091/620] Apply `_maybe_downcast` before `Distinct` --- db/functions/packed.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/db/functions/packed.py b/db/functions/packed.py index 1a583c904f..8c8f46b2f4 100644 --- a/db/functions/packed.py +++ b/db/functions/packed.py @@ -6,11 +6,7 @@ from abc import abstractmethod -from sqlalchemy import distinct -from sqlalchemy.dialects.postgresql import array_agg - from db.functions import hints, base -from db.functions.base import ArrayAgg from db.types.custom.uri import URIFunction from db.types.custom.email import EMAIL_DOMAIN_NAME @@ -34,7 +30,7 @@ def unpack(self): pass -class DistinctArrayAgg(DBFunctionPacked, ArrayAgg): +class DistinctArrayAgg(DBFunctionPacked): """ These two functions together are meant to be a user-friendly alternative to plain array_agg. @@ -46,14 +42,12 @@ class DistinctArrayAgg(DBFunctionPacked, ArrayAgg): hints.aggregation, ]) - @staticmethod - def to_sa_expression(column_expr): - column_expr = base._maybe_downcast(column_expr) - return array_agg(distinct(column_expr)) - def unpack(self): param0 = self.parameters[0] - return self.to_sa_expression(param0) + param0 = base._maybe_downcast(param0) + return base.ArrayAgg([ + base.Distinct([param0]), + ]) class NotNull(DBFunctionPacked): From 316ff31886eaef5f6bb202417a865d47a59792cc Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Sun, 4 Jun 2023 20:02:10 +0530 Subject: [PATCH 092/620] Add test for `mean` aggregation function --- .../api/query/test_aggregation_functions.py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 mathesar/tests/api/query/test_aggregation_functions.py diff --git a/mathesar/tests/api/query/test_aggregation_functions.py b/mathesar/tests/api/query/test_aggregation_functions.py new file mode 100644 index 0000000000..f915121575 --- /dev/null +++ b/mathesar/tests/api/query/test_aggregation_functions.py @@ -0,0 +1,63 @@ +display_option_origin = "display_option_origin" + + +def test_mean_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + {"id": columns["Patron"]["id"], "alias": "Patron"}, + ], + "display_names": { + "Checkout Month": "Month", + "Mean": "Mean of patron", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "Patron": { + display_option_origin: "Patron", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "Patron", + "output_alias": "Mean", + "function": "mean", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + {'Checkout Month': '2022-05', 'Mean': 16.641025641025642}, + {'Checkout Month': '2022-06', 'Mean': 11.461538461538462}, + {'Checkout Month': '2022-07', 'Mean': 18.06896551724138}, + {'Checkout Month': '2022-08', 'Mean': 12.6}, + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records From 2e93bfc57ea0b310a5f250ebc9d3c49678b3b472 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Mon, 5 Jun 2023 18:31:00 +0530 Subject: [PATCH 093/620] Add test for `distinct_aggregate_to_array` of Mathesar Custom Type --- .../resources/library_without_checkouts.sql | 2 +- .../api/query/test_aggregation_functions.py | 771 ++++++++++++++++++ 2 files changed, 772 insertions(+), 1 deletion(-) create mode 100644 mathesar/tests/api/query/test_aggregation_functions.py diff --git a/db/tests/resources/library_without_checkouts.sql b/db/tests/resources/library_without_checkouts.sql index f275c5a733..606e973858 100644 --- a/db/tests/resources/library_without_checkouts.sql +++ b/db/tests/resources/library_without_checkouts.sql @@ -255,7 +255,7 @@ INSERT INTO "Items" (id, "Acquisition Date", "Acquisition Price", "Publication") (107, '1990-09-16', 11.42, 4), (106, '2014-03-21', 13.55, 4), (108, '2008-01-30', 12.08, 6), -(105, '2008-10-29', 13.43, 7), +(105, '2008-10-29', 4.66, 7), (104, '2010-07-09', 4.66, 7), (102, '1995-02-03', 0.10, 8), (19, '1984-11-04', 1.75, 10), diff --git a/mathesar/tests/api/query/test_aggregation_functions.py b/mathesar/tests/api/query/test_aggregation_functions.py new file mode 100644 index 0000000000..993a224f34 --- /dev/null +++ b/mathesar/tests/api/query/test_aggregation_functions.py @@ -0,0 +1,771 @@ +display_option_origin = "display_option_origin" + + +def test_Mathesar_money_distinct_list_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + items = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Items"] + columns = { + c["name"]: c for c in items["columns"] + } + request_data = { + "name": get_uid(), + "base_table": items["id"], + "initial_columns": [ + {"id": columns["Publication"]["id"], "alias": "Publication"}, + {"id": columns["Acquisition Price"]["id"], "alias": "Acquisition Price"}, + ], + "display_names": { + "Acquisition Price": "Price", + "Publication": "Publication", + }, + "display_options": { + "Publication": { + display_option_origin: "Publication", + }, + "Acquisition Price": { + display_option_origin: "Acquisition Price", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Publication", + "output_alias": "Publication", + } + ], + "aggregation_expressions": [ + { + "input_alias": "Acquisition Price", + "output_alias": "Acquisition Price", + "function": "distinct_aggregate_to_array" + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + { + "Publication": 1, + "Acquisition Price": [ + 0.59 + ] + }, + { + "Publication": 2, + "Acquisition Price": [ + 6.09 + ] + }, + { + "Publication": 3, + "Acquisition Price": [ + 3.89 + ] + }, + { + "Publication": 4, + "Acquisition Price": [ + 11.42, + 13.55 + ] + }, + { + "Publication": 5, + "Acquisition Price": [ + 10.75 + ] + }, + { + "Publication": 6, + "Acquisition Price": [ + 12.08 + ] + }, + { + "Publication": 7, + "Acquisition Price": [ + 4.66 + ] + }, + { + "Publication": 8, + "Acquisition Price": [ + 0.1 + ] + }, + { + "Publication": 9, + "Acquisition Price": [ + 11.05, + 14.94 + ] + }, + { + "Publication": 10, + "Acquisition Price": [ + 1.75, + 3.88 + ] + }, + { + "Publication": 11, + "Acquisition Price": [ + 4.8 + ] + }, + { + "Publication": 12, + "Acquisition Price": [ + 1.31 + ] + }, + { + "Publication": 13, + "Acquisition Price": [ + 2.06, + 7.77 + ] + }, + { + "Publication": 14, + "Acquisition Price": [ + 8.26 + ] + }, + { + "Publication": 15, + "Acquisition Price": [ + 3.09, + 3.73, + 3.76, + 9.6, + 11.77, + 13.06 + ] + }, + { + "Publication": 16, + "Acquisition Price": [ + 4.28 + ] + }, + { + "Publication": 17, + "Acquisition Price": [ + 2.03, + 3.23 + ] + }, + { + "Publication": 18, + "Acquisition Price": [ + 3.62, + 5.45, + 9.77, + 10.78 + ] + }, + { + "Publication": 19, + "Acquisition Price": [ + 9.55 + ] + }, + { + "Publication": 20, + "Acquisition Price": [ + 0.16, + 5.28 + ] + }, + { + "Publication": 21, + "Acquisition Price": [ + 5.29 + ] + }, + { + "Publication": 22, + "Acquisition Price": [ + 8.91, + 12.06, + 14.76 + ] + }, + { + "Publication": 23, + "Acquisition Price": [ + 4.69, + 14.48 + ] + }, + { + "Publication": 24, + "Acquisition Price": [ + 2.08, + 4.52, + 12.53 + ] + }, + { + "Publication": 25, + "Acquisition Price": [ + 7.45, + 10.39 + ] + }, + { + "Publication": 26, + "Acquisition Price": [ + 3.36, + 14.59 + ] + }, + { + "Publication": 27, + "Acquisition Price": [ + 1.12 + ] + }, + { + "Publication": 28, + "Acquisition Price": [ + 3.18, + 12.24 + ] + }, + { + "Publication": 29, + "Acquisition Price": [ + 10.6 + ] + }, + { + "Publication": 30, + "Acquisition Price": [ + 6.38 + ] + }, + { + "Publication": 31, + "Acquisition Price": [ + 8.47 + ] + }, + { + "Publication": 32, + "Acquisition Price": [ + 2.11 + ] + }, + { + "Publication": 33, + "Acquisition Price": [ + 2.77 + ] + }, + { + "Publication": 34, + "Acquisition Price": [ + 9.23, + 10.27, + 10.82, + 12.35, + 12.78 + ] + }, + { + "Publication": 35, + "Acquisition Price": [ + 8.25 + ] + }, + { + "Publication": 36, + "Acquisition Price": [ + 12.79, + 12.98, + 13.96 + ] + }, + { + "Publication": 37, + "Acquisition Price": [ + 1.88, + 5.57, + 10.81, + 13.37 + ] + }, + { + "Publication": 38, + "Acquisition Price": [ + 12.01 + ] + }, + { + "Publication": 39, + "Acquisition Price": [ + 3.17 + ] + }, + { + "Publication": 40, + "Acquisition Price": [ + 2.73, + 10.1 + ] + }, + { + "Publication": 41, + "Acquisition Price": [ + 10.55, + 13.57 + ] + }, + { + "Publication": 42, + "Acquisition Price": [ + 8.31, + 9.27, + 11.83 + ] + }, + { + "Publication": 43, + "Acquisition Price": [ + 6.63, + 13.27 + ] + }, + { + "Publication": 44, + "Acquisition Price": [ + 5.14 + ] + }, + { + "Publication": 45, + "Acquisition Price": [ + 7.21 + ] + }, + { + "Publication": 46, + "Acquisition Price": [ + 13.85 + ] + }, + { + "Publication": 47, + "Acquisition Price": [ + 10.93, + 10.99 + ] + }, + { + "Publication": 48, + "Acquisition Price": [ + 4.02, + 6.41, + 9.6, + 10.83, + 14.32 + ] + }, + { + "Publication": 49, + "Acquisition Price": [ + 5.74, + 6.66, + 13.08 + ] + }, + { + "Publication": 50, + "Acquisition Price": [ + 6.97, + 13.75 + ] + } + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Publication']) == expect_records + + +def test_Mathesar_URI_distinct_list_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + authors = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Authors"] + columns = { + c["name"]: c for c in authors["columns"] + } + request_data = { + "name": get_uid(), + "base_table": authors["id"], + "initial_columns": [ + {"id": columns["Author Last Name"]["id"], "alias": "Author Last Name"}, + {"id": columns["Author Website"]["id"], "alias": "Author Website"}, + ], + "display_names": { + "Author Last Name": "Author Last Name", + "Website": "Website", + }, + "display_options": { + "Author Last Name": { + display_option_origin: "Author Last Name", + }, + "Author Website": { + display_option_origin: "Author Website", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Author Last Name", + "output_alias": "Author Last Name", + } + ], + "aggregation_expressions": [ + { + "input_alias": "Author Website", + "output_alias": "Website", + "function": "distinct_aggregate_to_array", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + + expect_records = [ + { + "Author Last Name":"Castillo", + "Website":[ + "https://jennifercastillo.com" + ] + }, + { + "Author Last Name":"Diaz", + "Website":[ + "https://diaz.net" + ] + }, + { + "Author Last Name":"Dunlap", + "Website":[ + "https://dunlap.com" + ] + }, + { + "Author Last Name":"Edwards", + "Website":[ + "https://catherineedwards.com", + "https://edwards.info" + ] + }, + { + "Author Last Name":"Evans", + "Website":[ + "https://bonnieevans.com" + ] + }, + { + "Author Last Name":"Harris", + "Website":[ + "http://harris.info" + ] + }, + { + "Author Last Name":"Herrera", + "Website":[ + None + ] + }, + { + "Author Last Name":"Jensen", + "Website":[ + "http://hannahjensen.org" + ] + }, + { + "Author Last Name":"Johnson", + "Website":[ + "https://kimberlyjohnson.net" + ] + }, + { + "Author Last Name":"Medina", + "Website":[ + None + ] + }, + { + "Author Last Name":"Munoz", + "Website":[ + "https://munoz.com" + ] + }, + { + "Author Last Name":"Newman", + "Website":[ + None + ] + }, + { + "Author Last Name":"Robinson", + "Website":[ + "https://seanrobinson.com" + ] + } + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Author Last Name']) == expect_records + + +def test_Mathesar_Email_distinct_list_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + patrons = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Patrons"] + columns = { + c["name"]: c for c in patrons["columns"] + } + request_data = { + "name": get_uid(), + "base_table": patrons["id"], + "initial_columns": [ + {"id": columns["First Name"]["id"], "alias": "First Name"}, + {"id": columns["Email"]["id"], "alias": "Email"}, + ], + "display_names": { + "First Name": "First Name", + "Email": "Email", + }, + "display_options": { + "First Name": { + display_option_origin: "First Name", + }, + "Email": { + display_option_origin: "Email", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "First Name", + "output_alias": "First Name", + } + ], + "aggregation_expressions": [ + { + "input_alias": "Email", + "output_alias": "Email", + "function": "distinct_aggregate_to_array", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + { + "First Name":"Alexander", + "Email":[ + "alexander.phillips38@alvarez.com" + ] + }, + { + "First Name":"Andrew", + "Email":[ + "a.vaughan@roy.com" + ] + }, + { + "First Name":"Autumn", + "Email":[ + "autumn.h19@mathews.com" + ] + }, + { + "First Name":"Barry", + "Email":[ + "b.huff@haney.com" + ] + }, + { + "First Name":"Benjamin", + "Email":[ + "b.watson33@bell-beard.biz" + ] + }, + { + "First Name":"Calvin", + "Email":[ + "c.curtis12@brown.com" + ] + }, + { + "First Name":"Connor", + "Email":[ + "c.taylor@miller.org" + ] + }, + { + "First Name":"Deanna", + "Email":[ + "deanna.s54@cook.org" + ] + }, + { + "First Name":"Eduardo", + "Email":[ + "eduardorojas13@peterson-curry.com" + ] + }, + { + "First Name":"Harry", + "Email":[ + "harry.h5@beck.net" + ] + }, + { + "First Name":"Heather", + "Email":[ + "heatherwheeler@peterson-delgado.com" + ] + }, + { + "First Name":"Jason", + "Email":[ + "jasongriffin@wilkinson.com", + "jpeterson11@williams.com" + ] + }, + { + "First Name":"Jennifer", + "Email":[ + "jenniferw20@morrison-patton.com" + ] + }, + { + "First Name":"Jesse", + "Email":[ + "jessef88@stewart.com" + ] + }, + { + "First Name":"Joshua", + "Email":[ + "jhooper@bowers.com" + ] + }, + { + "First Name":"Kathy", + "Email":[ + "kathyb@le.org" + ] + }, + { + "First Name":"Kristen", + "Email":[ + "kwright@odonnell.com" + ] + }, + { + "First Name":"Laura", + "Email":[ + "lauras@hurley.com" + ] + }, + { + "First Name":"Lori", + "Email":[ + "l.stevens@lopez.com" + ] + }, + { + "First Name":"Luke", + "Email":[ + "luke.vang46@palmer.com" + ] + }, + { + "First Name":"Mary", + "Email":[ + "mknox45@fletcher-rodriguez.net" + ] + }, + { + "First Name":"Nicole", + "Email":[ + "nicole.jones66@dixon.org" + ] + }, + { + "First Name":"Patrick", + "Email":[ + "pshepherd13@white-bradford.info" + ] + }, + { + "First Name":"Rita", + "Email":[ + "ritab@powell.com" + ] + }, + { + "First Name":"Toni", + "Email":[ + "tevans46@thompson.net" + ] + }, + { + "First Name":"Traci", + "Email":[ + "thamilton76@smith.net" + ] + }, + { + "First Name":"Tyler", + "Email":[ + "t.gonzalez@washington.com" + ] + }, + { + "First Name":"Walter", + "Email":[ + "waltermanning@freeman.com" + ] + }, + { + "First Name":"Yvonne", + "Email":[ + "y.ho@johnson.info" + ] + } + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['First Name']) == expect_records \ No newline at end of file From ffcae141a0cbea87210981d4f1ace2eb37cae6ee Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Mon, 5 Jun 2023 18:45:38 +0530 Subject: [PATCH 094/620] Fix lint issues --- .../api/query/test_aggregation_functions.py | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/mathesar/tests/api/query/test_aggregation_functions.py b/mathesar/tests/api/query/test_aggregation_functions.py index 993a224f34..a5888c5baf 100644 --- a/mathesar/tests/api/query/test_aggregation_functions.py +++ b/mathesar/tests/api/query/test_aggregation_functions.py @@ -453,84 +453,84 @@ def test_Mathesar_URI_distinct_list_aggregation(library_ma_tables, get_uid, clie response = client.post('/api/db/v0/queries/', data=request_data) assert response.status_code == 201 query_id = response.json()['id'] - + expect_records = [ { - "Author Last Name":"Castillo", - "Website":[ + "Author Last Name": "Castillo", + "Website": [ "https://jennifercastillo.com" ] }, { - "Author Last Name":"Diaz", - "Website":[ + "Author Last Name": "Diaz", + "Website": [ "https://diaz.net" ] }, { - "Author Last Name":"Dunlap", - "Website":[ + "Author Last Name": "Dunlap", + "Website": [ "https://dunlap.com" ] }, { - "Author Last Name":"Edwards", - "Website":[ + "Author Last Name": "Edwards", + "Website": [ "https://catherineedwards.com", "https://edwards.info" ] }, { - "Author Last Name":"Evans", - "Website":[ + "Author Last Name": "Evans", + "Website": [ "https://bonnieevans.com" ] }, { - "Author Last Name":"Harris", - "Website":[ + "Author Last Name": "Harris", + "Website": [ "http://harris.info" ] }, { - "Author Last Name":"Herrera", - "Website":[ + "Author Last Name": "Herrera", + "Website": [ None ] }, { - "Author Last Name":"Jensen", - "Website":[ + "Author Last Name": "Jensen", + "Website": [ "http://hannahjensen.org" ] }, { - "Author Last Name":"Johnson", - "Website":[ + "Author Last Name": "Johnson", + "Website": [ "https://kimberlyjohnson.net" ] }, { - "Author Last Name":"Medina", - "Website":[ + "Author Last Name": "Medina", + "Website": [ None ] }, { - "Author Last Name":"Munoz", - "Website":[ + "Author Last Name": "Munoz", + "Website": [ "https://munoz.com" ] }, { - "Author Last Name":"Newman", - "Website":[ + "Author Last Name": "Newman", + "Website": [ None ] }, { - "Author Last Name":"Robinson", - "Website":[ + "Author Last Name": "Robinson", + "Website": [ "https://seanrobinson.com" ] } @@ -592,180 +592,180 @@ def test_Mathesar_Email_distinct_list_aggregation(library_ma_tables, get_uid, cl query_id = response.json()['id'] expect_records = [ { - "First Name":"Alexander", - "Email":[ + "First Name": "Alexander", + "Email": [ "alexander.phillips38@alvarez.com" ] }, { - "First Name":"Andrew", - "Email":[ + "First Name": "Andrew", + "Email": [ "a.vaughan@roy.com" ] }, { - "First Name":"Autumn", - "Email":[ + "First Name": "Autumn", + "Email": [ "autumn.h19@mathews.com" ] }, { - "First Name":"Barry", - "Email":[ + "First Name": "Barry", + "Email": [ "b.huff@haney.com" ] }, { - "First Name":"Benjamin", - "Email":[ + "First Name": "Benjamin", + "Email": [ "b.watson33@bell-beard.biz" ] }, { - "First Name":"Calvin", - "Email":[ + "First Name": "Calvin", + "Email": [ "c.curtis12@brown.com" ] }, { - "First Name":"Connor", - "Email":[ + "First Name": "Connor", + "Email": [ "c.taylor@miller.org" ] }, { - "First Name":"Deanna", - "Email":[ + "First Name": "Deanna", + "Email": [ "deanna.s54@cook.org" ] }, { - "First Name":"Eduardo", - "Email":[ + "First Name": "Eduardo", + "Email": [ "eduardorojas13@peterson-curry.com" ] }, { - "First Name":"Harry", - "Email":[ + "First Name": "Harry", + "Email": [ "harry.h5@beck.net" ] }, { - "First Name":"Heather", - "Email":[ + "First Name": "Heather", + "Email": [ "heatherwheeler@peterson-delgado.com" ] }, { - "First Name":"Jason", - "Email":[ + "First Name": "Jason", + "Email": [ "jasongriffin@wilkinson.com", "jpeterson11@williams.com" ] }, { - "First Name":"Jennifer", - "Email":[ + "First Name": "Jennifer", + "Email": [ "jenniferw20@morrison-patton.com" ] }, { - "First Name":"Jesse", - "Email":[ + "First Name": "Jesse", + "Email": [ "jessef88@stewart.com" ] }, { - "First Name":"Joshua", - "Email":[ + "First Name": "Joshua", + "Email": [ "jhooper@bowers.com" ] }, { - "First Name":"Kathy", - "Email":[ + "First Name": "Kathy", + "Email": [ "kathyb@le.org" ] }, { - "First Name":"Kristen", - "Email":[ + "First Name": "Kristen", + "Email": [ "kwright@odonnell.com" ] }, { - "First Name":"Laura", - "Email":[ + "First Name": "Laura", + "Email": [ "lauras@hurley.com" ] }, { - "First Name":"Lori", - "Email":[ + "First Name": "Lori", + "Email": [ "l.stevens@lopez.com" ] }, { - "First Name":"Luke", - "Email":[ + "First Name": "Luke", + "Email": [ "luke.vang46@palmer.com" ] }, { - "First Name":"Mary", - "Email":[ + "First Name": "Mary", + "Email": [ "mknox45@fletcher-rodriguez.net" ] }, { - "First Name":"Nicole", - "Email":[ + "First Name": "Nicole", + "Email": [ "nicole.jones66@dixon.org" ] }, { - "First Name":"Patrick", - "Email":[ + "First Name": "Patrick", + "Email": [ "pshepherd13@white-bradford.info" ] }, { - "First Name":"Rita", - "Email":[ + "First Name": "Rita", + "Email": [ "ritab@powell.com" ] }, { - "First Name":"Toni", - "Email":[ + "First Name": "Toni", + "Email": [ "tevans46@thompson.net" ] }, { - "First Name":"Traci", - "Email":[ + "First Name": "Traci", + "Email": [ "thamilton76@smith.net" ] }, { - "First Name":"Tyler", - "Email":[ + "First Name": "Tyler", + "Email": [ "t.gonzalez@washington.com" ] }, { - "First Name":"Walter", - "Email":[ + "First Name": "Walter", + "Email": [ "waltermanning@freeman.com" ] }, { - "First Name":"Yvonne", - "Email":[ + "First Name": "Yvonne", + "Email": [ "y.ho@johnson.info" ] } ] actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] - assert sorted(actual_records, key=lambda x: x['First Name']) == expect_records \ No newline at end of file + assert sorted(actual_records, key=lambda x: x['First Name']) == expect_records From f6bae6baafefcfed854785cbc71b39793f03f9f0 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Mon, 5 Jun 2023 23:23:51 +0800 Subject: [PATCH 095/620] use longer variable names --- db/sql/0_msar.sql | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 74ddb0d7b1..78c6071c4f 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -704,21 +704,6 @@ CREATE TYPE __msar.col_create_def AS ( -- Add columns to table ---------------------------------------------------------------------------- -CREATE OR REPLACE FUNCTION -msar.generate_column_name(tab_id oid, base_name text) returns text AS $$/* -TODO -*/ -SELECT base_name || (MAX(attnum) + 1) FROM pg_attribute WHERE attrelid=tab_id; -$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; - -CREATE OR REPLACE FUNCTION -msar.generate_column_name(tab_id oid, modifier integer) returns text AS $$/* -TODO -*/ -SELECT msar.generate_column_name(tab_id, 'Column '); -$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; - - CREATE OR REPLACE FUNCTION msar.build_type_text(typ_jsonb jsonb) RETURNS text AS $$/* @@ -782,7 +767,7 @@ WITH attnum_cte AS ( quote_ident('Column ' || (attnum_cte.m_attnum + ROW_NUMBER() OVER ())) ), msar.build_type_text(col_create_obj -> 'type'), - col_create_obj -> 'not_null', + col_create_obj ->> 'not_null', CASE WHEN raw_default THEN col_create_obj ->> 'default' @@ -797,7 +782,7 @@ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.process_col_dup_arr(tab_id oid, col_dup_arr jsonb, copy_con boolean, copy_default boolean) +msar.process_col_dup_arr(tab_id oid, col_dup_arr jsonb, copy_data boolean, copy_constraints boolean) RETURNS jsonb AS $$/* Create a column creation JSON array from a JSON array of column duplication defining JSON blobs. @@ -809,8 +794,8 @@ SELECT jsonb_agg( jsonb_build_object( 'name', col_dup_obj -> 'name', 'type', jsonb_build_object('id', atttypid, 'modifier', atttypmod), - 'not_null', CASE WHEN copy_con THEN attnotnull END, - 'default', CASE WHEN copy_con THEN pg_get_expr(adbin, tab_id) END + 'not_null', CASE WHEN copy_constraints THEN attnotnull END, + 'default', CASE WHEN copy_data THEN pg_get_expr(adbin, tab_id) END ) ) FROM @@ -885,12 +870,12 @@ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION -msar.duplicate_columns(tab_id oid, col_dup_arr jsonb, copy_con boolean, copy_default boolean) +msar.duplicate_columns(tab_id oid, col_dup_arr jsonb, copy_data boolean, copy_constraints boolean) RETURNS jsonb AS $$/* TODO */ WITH col_create_cte AS ( - SELECT msar.process_col_dup_arr(tab_id, col_dup_arr, copy_con, copy_default) col_defs + SELECT msar.process_col_dup_arr(tab_id, col_dup_arr, copy_data, copy_constraints) col_defs ) SELECT msar.add_columns(tab_id, col_create_cte.col_defs, true) FROM col_create_cte; $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; From fbe52ed0e68a585ee19a09c1d78bf90113c630b1 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 00:07:15 +0800 Subject: [PATCH 096/620] revert changes to focus branch (and PR) --- db/columns/operations/create.py | 80 ++++++++++++++------- db/tests/columns/operations/test_create.py | 82 +++++++++++++++------- db/tests/dependents/test_dependents.py | 4 +- mathesar/api/db/viewsets/columns.py | 29 +++++--- mathesar/tests/api/test_column_api.py | 8 +-- mathesar/tests/conftest.py | 9 ++- 6 files changed, 144 insertions(+), 68 deletions(-) diff --git a/db/columns/operations/create.py b/db/columns/operations/create.py index c7bba996b2..4a08b1ecdf 100644 --- a/db/columns/operations/create.py +++ b/db/columns/operations/create.py @@ -1,10 +1,9 @@ -import json from alembic.migration import MigrationContext from alembic.operations import Operations from sqlalchemy.ext import compiler from sqlalchemy.exc import DataError from sqlalchemy.schema import DDLElement -from psycopg.errors import InvalidTextRepresentation, InvalidParameterValue +from psycopg2.errors import InvalidTextRepresentation, InvalidParameterValue from db.columns.base import MathesarColumn from db.columns.defaults import DEFAULT, NAME, NULLABLE, TYPE @@ -14,7 +13,6 @@ get_column_attnum_from_name, get_column_default, get_column_name_from_attnum, ) from db.columns.utils import to_mathesar_column_with_engine -from db.connection import execute_msar_func_with_engine from db.constraints.operations.create import copy_constraint from db.constraints.operations.select import get_column_constraints from db.constraints import utils as constraint_utils @@ -26,33 +24,60 @@ def create_column(engine, table_oid, column_data): - column_name = (column_data.get(NAME) or '').strip() or None - column_type_id = column_data.get( - TYPE, column_data.get("type", PostgresType.CHARACTER_VARYING.id) - ) + # TODO reuse metadata + table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) + column_name = column_data.get(NAME, '').strip() + if column_name == '': + column_data[NAME] = gen_col_name(table) + column_type_id = column_data.get(TYPE, column_data.get("type")) column_type_options = column_data.get("type_options", {}) column_nullable = column_data.get(NULLABLE, True) default_value = column_data.get(DEFAULT, {}).get('value') - col_create_def = [ - { - "name": column_name, - "type": {"name": column_type_id, "options": column_type_options}, - "not_null": not column_nullable, - "default": default_value, - } - ] + prepared_default_value = str(default_value) if default_value is not None else None + column_type = get_db_type_enum_from_id(column_type_id) + column_type_class = None + if column_type is not None: + column_type_class = column_type.get_sa_class(engine) + if column_type_class is None: + # Requested type unknown or not supported. Falling back to CHARACTER_VARYING + column_type_class = PostgresType.CHARACTER_VARYING.get_sa_class(engine) + column_type_options = {} + # TODO reuse metadata + table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) + try: - curr = execute_msar_func_with_engine( - engine, 'add_columns', - table_oid, - json.dumps(col_create_def) + column = MathesarColumn( + column_data[NAME], column_type_class(**column_type_options), nullable=column_nullable, + server_default=prepared_default_value, ) - except InvalidTextRepresentation: - raise InvalidDefaultError - except InvalidParameterValue: - raise InvalidTypeOptionError - return curr.fetchone()[0][0] + except DataError as e: + if type(e.orig) == InvalidTextRepresentation: + raise InvalidTypeError + else: + raise e + + # TODO reuse metadata + table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) + try: + with engine.begin() as conn: + ctx = MigrationContext.configure(conn) + op = Operations(ctx) + op.add_column(table.name, column, schema=table.schema) + except DataError as e: + if type(e.orig) == InvalidTextRepresentation: + raise InvalidDefaultError + elif type(e.orig) == InvalidParameterValue: + raise InvalidTypeOptionError + else: + raise e + # TODO reuse metadata + reflected_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) + reflected_column = reflected_table.columns[column_data[NAME]] + return MathesarColumn.from_column( + reflected_column, + engine=engine + ) def bulk_create_mathesar_column(engine, table_oid, columns, schema): @@ -65,6 +90,13 @@ def bulk_create_mathesar_column(engine, table_oid, columns, schema): op.add_column(table.name, column, schema=schema) +def gen_col_name(table): + base_name = constants.COLUMN_NAME_TEMPLATE + col_num = len(table.c) + name = f'{base_name}{col_num}' + return name + + def _gen_col_name(table, column_name): num = 1 new_column_name = f"{column_name}_{num}" diff --git a/db/tests/columns/operations/test_create.py b/db/tests/columns/operations/test_create.py index 51697f0450..cd19f1e3b4 100644 --- a/db/tests/columns/operations/test_create.py +++ b/db/tests/columns/operations/test_create.py @@ -1,8 +1,7 @@ import pytest -from psycopg.errors import SyntaxError from sqlalchemy import INTEGER, Column, Table, MetaData, NUMERIC, UniqueConstraint -from db.columns.operations.create import create_column, duplicate_column +from db.columns.operations.create import create_column, duplicate_column, gen_col_name from db.columns.operations.select import get_column_attnum_from_name, get_column_default from db.tables.operations.select import get_oid_from_table, reflect_table_from_oid from db.constraints.operations.select import get_column_constraints @@ -83,9 +82,9 @@ def test_create_column(engine_with_schema, target_type): created_col = create_column(engine, table_oid, column_data) altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) assert len(altered_table.columns) == 2 - assert created_col['col_name'] == new_column_name - reflected_type = created_col['col_type'] - assert reflected_type == target_type.id + assert created_col.name == new_column_name + reflected_type = get_db_type_enum_from_class(created_col.type.__class__) + assert reflected_type == target_type @pytest.mark.parametrize("target_type", [PostgresType.NUMERIC]) @@ -109,8 +108,9 @@ def test_create_column_options(engine_with_schema, target_type): created_col = create_column(engine, table_oid, column_data) altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) assert len(altered_table.columns) == 2 - assert created_col['col_name'] == new_column_name - assert created_col['col_full_type'] == 'numeric(5,3)' + assert created_col.name == new_column_name + assert created_col.db_type == PostgresType.NUMERIC + assert created_col.type_options == {"precision": 5, "scale": 3} @pytest.mark.parametrize("target_type", [PostgresType.CHARACTER, PostgresType.CHARACTER_VARYING]) @@ -134,19 +134,16 @@ def test_create_column_length_options(engine_with_schema, target_type): created_col = create_column(engine, table_oid, column_data) altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) assert len(altered_table.columns) == 2 - assert created_col['col_name'] == new_column_name - assert created_col['col_full_type'] == target_type.id + '(5)' + assert created_col.name == new_column_name + assert created_col.db_type == target_type + assert created_col.type_options == {"length": 5} @pytest.mark.parametrize( - "type_options,output", - [ - ({"fields": "year"}, ' year'), - ({"precision": 3}, '(3)'), - ({"precision": 3, "fields": "second"}, ' second(3)'), - ] + "type_options", + [{"fields": "year"}, {"precision": 3}, {"precision": 3, "fields": "second"}] ) -def test_create_column_interval_options(engine_with_schema, type_options, output): +def test_create_column_interval_options(engine_with_schema, type_options): engine, schema = engine_with_schema table_name = "atableone" initial_column_name = "original_column" @@ -166,8 +163,9 @@ def test_create_column_interval_options(engine_with_schema, type_options, output created_col = create_column(engine, table_oid, column_data) altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) assert len(altered_table.columns) == 2 - assert created_col['col_name'] == new_column_name - assert created_col['col_full_type'] == PostgresType.INTERVAL.id + output + assert created_col.name == new_column_name + assert created_col.db_type == PostgresType.INTERVAL + assert created_col.type_options == type_options def test_create_column_bad_options(engine_with_schema): @@ -188,7 +186,7 @@ def test_create_column_bad_options(engine_with_schema): "type": target_type.id, "type_options": {"precision": 5, "scale": 3}, } - with pytest.raises(SyntaxError): + with pytest.raises(TypeError): create_column(engine, table_oid, column_data) @@ -341,8 +339,8 @@ def test_duplicate_column_default(engine_with_schema, copy_data, copy_constraint def test_create_column_accepts_column_data_without_name_attribute(engine_with_schema): engine, schema = engine_with_schema table_name = "atableone" - initial_column_name = f"{COLUMN_NAME_TEMPLATE}1" - expected_column_name = f"{COLUMN_NAME_TEMPLATE}2" + initial_column_name = f"{COLUMN_NAME_TEMPLATE}0" + expected_column_name = f"{COLUMN_NAME_TEMPLATE}1" table = Table( table_name, MetaData(bind=engine, schema=schema), @@ -354,14 +352,14 @@ def test_create_column_accepts_column_data_without_name_attribute(engine_with_sc created_col = create_column(engine, table_oid, column_data) altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) assert len(altered_table.columns) == 2 - assert created_col['col_name'] == expected_column_name + assert created_col.name == expected_column_name def test_create_column_accepts_column_data_with_name_as_empty_string(engine_with_schema): engine, schema = engine_with_schema table_name = "atableone" - initial_column_name = f"{COLUMN_NAME_TEMPLATE}1" - expected_column_name = f"{COLUMN_NAME_TEMPLATE}2" + initial_column_name = f"{COLUMN_NAME_TEMPLATE}0" + expected_column_name = f"{COLUMN_NAME_TEMPLATE}1" table = Table( table_name, MetaData(bind=engine, schema=schema), @@ -373,4 +371,38 @@ def test_create_column_accepts_column_data_with_name_as_empty_string(engine_with created_col = create_column(engine, table_oid, column_data) altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) assert len(altered_table.columns) == 2 - assert created_col['col_name'] == expected_column_name + assert created_col.name == expected_column_name + + +def test_generate_column_name(engine_with_schema): + engine, schema = engine_with_schema + name_set = { + 'Center', + 'Status', + 'Case Number', + 'Patent Number', + 'Application SN', + 'Title', + 'Patent Expiration Date', + '' + } + table_name = "atableone" + initial_column_name = "id" + table = Table( + table_name, + MetaData(bind=engine, schema=schema), + Column(initial_column_name, INTEGER), + ) + table.create() + table_oid = get_oid_from_table(table_name, schema, engine) + for name in name_set: + column_data = {"name": name, "type": "BOOLEAN"} + create_column(engine, table_oid, column_data) + altered_table = reflect_table_from_oid(table_oid, engine, metadata=get_empty_metadata()) + n = len(name_set) + 1 + # Expected column name should be 'Column n' + # where n is length of number of columns already in the table + expected_column_name = f"{COLUMN_NAME_TEMPLATE}{n}" + generated_column_name = gen_col_name(altered_table) + assert len(altered_table.columns) == n + assert generated_column_name == expected_column_name diff --git a/db/tests/dependents/test_dependents.py b/db/tests/dependents/test_dependents.py index 2c75ab26d0..27e54cde82 100644 --- a/db/tests/dependents/test_dependents.py +++ b/db/tests/dependents/test_dependents.py @@ -92,7 +92,7 @@ def test_self_reference(engine_with_schema, library_tables_oids): # remove when library_without_checkouts.sql is updated and includes self-reference case fk_column = create_column(engine, publishers_oid, {'name': 'Parent Publisher', 'type': PostgresType.INTEGER.id}) pk_column_attnum = get_column_attnum_from_name(publishers_oid, 'id', engine, metadata=get_empty_metadata()) - fk_constraint = ForeignKeyConstraint('Publishers_Publisher_fkey', publishers_oid, [fk_column['col_id']], publishers_oid, [pk_column_attnum], {}) + fk_constraint = ForeignKeyConstraint('Publishers_Publisher_fkey', publishers_oid, [fk_column.column_attnum], publishers_oid, [pk_column_attnum], {}) create_constraint(schema, engine, fk_constraint) publishers_oid = library_tables_oids['Publishers'] @@ -113,7 +113,7 @@ def test_circular_reference(engine_with_schema, library_tables_oids): # remove when library_without_checkouts.sql is updated and includes circular reference case fk_column = create_column(engine, publishers_oid, {'name': 'Top Publication', 'type': PostgresType.INTEGER.id}) publications_pk_column_attnum = get_column_attnum_from_name(publications_oid, 'id', engine, metadata=get_empty_metadata()) - fk_constraint = ForeignKeyConstraint('Publishers_Publications_fkey', publishers_oid, [fk_column['col_id']], publications_oid, [publications_pk_column_attnum], {}) + fk_constraint = ForeignKeyConstraint('Publishers_Publications_fkey', publishers_oid, [fk_column.column_attnum], publications_oid, [publications_pk_column_attnum], {}) create_constraint(schema, engine, fk_constraint) publishers_dependents_graph = get_dependents_graph(publishers_oid, engine, []) diff --git a/mathesar/api/db/viewsets/columns.py b/mathesar/api/db/viewsets/columns.py index 7234b2209f..bfcaeab406 100644 --- a/mathesar/api/db/viewsets/columns.py +++ b/mathesar/api/db/viewsets/columns.py @@ -1,6 +1,5 @@ import warnings -from psycopg.errors import DuplicateColumn -from psycopg2.errors import NotNullViolation, StringDataRightTruncation +from psycopg2.errors import DuplicateColumn, NotNullViolation, StringDataRightTruncation from rest_access_policy import AccessViewSetMixin from rest_framework import status, viewsets from rest_framework.decorators import action @@ -59,14 +58,17 @@ def create(self, request, table_pk=None): try: # TODO Refactor add_column to user serializer validated date instead of request data column = table.add_column(request.data) - except DuplicateColumn as e: - name = request.data['name'] - raise database_api_exceptions.DuplicateTableAPIException( - e, - message=f'Column {name} already exists', - field='name', - status_code=status.HTTP_400_BAD_REQUEST - ) + except ProgrammingError as e: + if type(e.orig) == DuplicateColumn: + name = request.data['name'] + raise database_api_exceptions.DuplicateTableAPIException( + e, + message=f'Column {name} already exists', + field='name', + status_code=status.HTTP_400_BAD_REQUEST + ) + else: + raise database_base_api_exceptions.ProgrammingAPIException(e) except TypeError as e: raise base_api_exceptions.TypeErrorAPIException( e, @@ -92,7 +94,12 @@ def create(self, request, table_pk=None): e, status_code=status.HTTP_400_BAD_REQUEST ) - column_attnum = column['col_id'] + column_attnum = get_column_attnum_from_name( + table.oid, + column.name, + table.schema._sa_engine, + metadata=get_cached_metadata(), + ) # The created column's Django model was automatically reflected. It can be reflected. dj_column = Column.objects.get( table=table, diff --git a/mathesar/tests/api/test_column_api.py b/mathesar/tests/api/test_column_api.py index 3fe7e8f82f..2d2d6c5971 100644 --- a/mathesar/tests/api/test_column_api.py +++ b/mathesar/tests/api/test_column_api.py @@ -333,7 +333,7 @@ def test_column_create_some_parameters(column_test_table, client): def test_column_create_no_name_parameter(column_test_table, client): db_type = PostgresType.BOOLEAN - num_columns = len(column_test_table.sa_columns) + 1 + num_columns = len(column_test_table.sa_columns) generated_name = f"{COLUMN_NAME_TEMPLATE}{num_columns}" data = { "type": db_type.id @@ -345,7 +345,7 @@ def test_column_create_no_name_parameter(column_test_table, client): new_columns_response = client.get( f"/api/db/v0/tables/{column_test_table.id}/columns/" ) - assert new_columns_response.json()["count"] == num_columns + assert new_columns_response.json()["count"] == num_columns + 1 actual_new_col = new_columns_response.json()["results"][-1] assert actual_new_col["name"] == generated_name assert actual_new_col["type"] == db_type.id @@ -354,7 +354,7 @@ def test_column_create_no_name_parameter(column_test_table, client): def test_column_create_name_parameter_empty(column_test_table, client): name = "" db_type = PostgresType.BOOLEAN - num_columns = len(column_test_table.sa_columns) + 1 + num_columns = len(column_test_table.sa_columns) generated_name = f"{COLUMN_NAME_TEMPLATE}{num_columns}" data = { "name": name, "type": db_type.id @@ -366,7 +366,7 @@ def test_column_create_name_parameter_empty(column_test_table, client): new_columns_response = client.get( f"/api/db/v0/tables/{column_test_table.id}/columns/" ) - assert new_columns_response.json()["count"] == num_columns + assert new_columns_response.json()["count"] == num_columns + 1 actual_new_col = new_columns_response.json()["results"][-1] assert actual_new_col["name"] == generated_name assert actual_new_col["type"] == db_type.id diff --git a/mathesar/tests/conftest.py b/mathesar/tests/conftest.py index 4b15cbac5e..8e42747a85 100644 --- a/mathesar/tests/conftest.py +++ b/mathesar/tests/conftest.py @@ -335,8 +335,13 @@ def _get_datafile_for_path(path): @pytest.fixture def create_column(): def _create_column(table, column_data): - column_dict = table.add_column(column_data) - attnum = column_dict['col_id'] + column = table.add_column(column_data) + attnum = get_column_attnum_from_name( + table.oid, + [column.name], + table.schema._sa_engine, + metadata=get_empty_metadata() + ) column = mathesar_model_column.current_objects.get_or_create(attnum=attnum, table=table) return column[0] return _create_column From 88aa94dd48e11974a91a847395c634171aaf953d Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 00:08:06 +0800 Subject: [PATCH 097/620] remove duplication functions to make PR smaller --- db/sql/0_msar.sql | 39 +-------------------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 78c6071c4f..c89cadaa60 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -781,31 +781,6 @@ SELECT array_agg(col_create_defs) FROM col_create_cte; $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; -CREATE OR REPLACE FUNCTION -msar.process_col_dup_arr(tab_id oid, col_dup_arr jsonb, copy_data boolean, copy_constraints boolean) - RETURNS jsonb AS $$/* -Create a column creation JSON array from a JSON array of column duplication defining JSON blobs. - -Args: - col_create_arr: A jsonb array defining a column duplication (must have "col_id" key. - "name", "data", and "constraints" keys optional). -*/ -SELECT jsonb_agg( - jsonb_build_object( - 'name', col_dup_obj -> 'name', - 'type', jsonb_build_object('id', atttypid, 'modifier', atttypmod), - 'not_null', CASE WHEN copy_constraints THEN attnotnull END, - 'default', CASE WHEN copy_data THEN pg_get_expr(adbin, tab_id) END - ) -) -FROM - (SELECT * FROM pg_attribute WHERE attrelid=tab_id) pg_attr - LEFT JOIN pg_attrdef ON (attrelid=adrelid AND attnum=adnum) - INNER JOIN jsonb_array_elements(col_dup_arr) col_dup_obj - ON attnum=(col_dup_obj -> 'col_id')::smallint; -$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; - - CREATE OR REPLACE FUNCTION __msar.add_columns(tab_name text, col_defs variadic __msar.col_create_def[]) RETURNS text AS $$/* Add the given columns to the given table. @@ -865,19 +840,7 @@ msar.add_columns(sch_name text, tab_name text, col_defs jsonb, raw_default boole RETURNS jsonb AS $$/* TODO */ -SELECT msar.add_columns(msar.get_relation_oid(sch_name, tab_name), col_defs); -$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; - - -CREATE OR REPLACE FUNCTION -msar.duplicate_columns(tab_id oid, col_dup_arr jsonb, copy_data boolean, copy_constraints boolean) - RETURNS jsonb AS $$/* -TODO -*/ -WITH col_create_cte AS ( - SELECT msar.process_col_dup_arr(tab_id, col_dup_arr, copy_data, copy_constraints) col_defs -) -SELECT msar.add_columns(tab_id, col_create_cte.col_defs, true) FROM col_create_cte; +SELECT msar.add_columns(msar.get_relation_oid(sch_name, tab_name), col_defs, raw_default); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; From 42cf09542024cd6817661c7ecfcc5675274d1251 Mon Sep 17 00:00:00 2001 From: Aritra8438 Date: Tue, 6 Jun 2023 00:20:36 +0530 Subject: [PATCH 098/620] Resolve merge conflicts and add test again. --- .../api/query/test_aggregation_functions.py | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) diff --git a/mathesar/tests/api/query/test_aggregation_functions.py b/mathesar/tests/api/query/test_aggregation_functions.py index a5888c5baf..5b75cb5914 100644 --- a/mathesar/tests/api/query/test_aggregation_functions.py +++ b/mathesar/tests/api/query/test_aggregation_functions.py @@ -1,6 +1,238 @@ display_option_origin = "display_option_origin" +def test_alias(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["id"]["id"], "alias": "id"}, + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + {"id": columns["Patron"]["id"], "alias": "Patron"}, + ], + "display_names": { + "Checkout Month": "Month", + "Count": "Number of Checkouts", + "Sum": "Sum of patron", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "id": { + display_option_origin: "id", + }, + "Patron": { + display_option_origin: "Patron", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "id", + "output_alias": "Count", + "function": "count", + }, + { + "input_alias": "Patron", + "output_alias": "Sum", + "function": "sum", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()["id"] + expect_repsonse_data = [ + { + 'alias': 'Checkout Month', + 'display_name': 'Month', + 'type': 'text', + 'type_options': None, + 'display_options': { + display_option_origin: "Checkout Time", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'Checkout Time', + }, { + 'alias': 'Count', + 'display_name': 'Number of Checkouts', + 'type': 'integer', + 'type_options': None, + 'display_options': { + display_option_origin: "id", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'id', + }, { + 'alias': 'Sum', + 'display_name': 'Sum of patron', + 'type': 'numeric', + 'type_options': None, + 'display_options': { + display_option_origin: "Patron", + }, + 'is_initial_column': False, + 'input_table_name': None, + 'input_table_id': None, + 'input_column_name': None, + 'input_alias': 'Patron', + } + ] + actual_response_data = client.get(f'/api/db/v0/queries/{query_id}/columns/').json() + assert sorted(actual_response_data, key=lambda x: x['alias']) == expect_repsonse_data + + +def test_count_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["id"]["id"], "alias": "id"}, + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + ], + "display_names": { + "Checkout Month": "Month", + "Count": "Number of Checkouts", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "id": { + display_option_origin: "id", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "id", + "output_alias": "Count", + "function": "count", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + {'Checkout Month': '2022-05', 'Count': 39}, + {'Checkout Month': '2022-06', 'Count': 26}, + {'Checkout Month': '2022-07', 'Count': 29}, + {'Checkout Month': '2022-08', 'Count': 10}, + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records + + +def test_sum_aggregation(library_ma_tables, get_uid, client): + _ = library_ma_tables + checkouts = { + t["name"]: t for t in client.get("/api/db/v0/tables/").json()["results"] + }["Checkouts"] + columns = { + c["name"]: c for c in checkouts["columns"] + } + request_data = { + "name": get_uid(), + "base_table": checkouts["id"], + "initial_columns": [ + {"id": columns["Checkout Time"]["id"], "alias": "Checkout Time"}, + {"id": columns["Patron"]["id"], "alias": "Patron"}, + ], + "display_names": { + "Checkout Month": "Month", + "Sum": "Sum of patron", + }, + "display_options": { + "Checkout Time": { + display_option_origin: "Checkout Time", + }, + "Patron": { + display_option_origin: "Patron", + }, + }, + "transformations": [ + { + "spec": { + "grouping_expressions": [ + { + "input_alias": "Checkout Time", + "output_alias": "Checkout Month", + "preproc": "truncate_to_month", + } + ], + "aggregation_expressions": [ + { + "input_alias": "Patron", + "output_alias": "Sum", + "function": "sum", + } + ] + }, + "type": "summarize", + } + ] + } + response = client.post('/api/db/v0/queries/', data=request_data) + assert response.status_code == 201 + query_id = response.json()['id'] + expect_records = [ + {'Checkout Month': '2022-05', 'Sum': 649}, + {'Checkout Month': '2022-06', 'Sum': 298}, + {'Checkout Month': '2022-07', 'Sum': 524}, + {'Checkout Month': '2022-08', 'Sum': 126}, + ] + actual_records = client.get(f'/api/db/v0/queries/{query_id}/records/').json()['results'] + assert sorted(actual_records, key=lambda x: x['Checkout Month']) == expect_records + + def test_Mathesar_money_distinct_list_aggregation(library_ma_tables, get_uid, client): _ = library_ma_tables items = { From e1a7990032a954c3d434a7cf861fa1de42b70274 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 14:03:50 +0800 Subject: [PATCH 099/620] pass args to pg_prove so you can control output --- db/sql/run_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/sql/run_tests.sh b/db/sql/run_tests.sh index eb6abf123c..7ef1a9dbd7 100755 --- a/db/sql/run_tests.sh +++ b/db/sql/run_tests.sh @@ -10,7 +10,7 @@ else fi psql -q -U mathesar -d postgres -f "$sql"/test_startup.sql -pg_prove --runtests -U mathesar -d mathesar_testing +pg_prove --runtests -U mathesar -d mathesar_testing "$@" exit_code=$? psql -q -U mathesar -d postgres -f "$sql"/test_shutdown.sql exit $exit_code From 7aca1928f1a001cec24f194fe5909c157eb17831 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 16:26:05 +0800 Subject: [PATCH 100/620] simplify output from column adding function --- db/sql/0_msar.sql | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index c89cadaa60..0d2601d334 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -811,7 +811,7 @@ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION msar.add_columns(tab_id oid, col_defs jsonb, raw_default boolean DEFAULT false) - RETURNS jsonb AS $$/* + RETURNS smallint[] AS $$/* TODO */ DECLARE @@ -819,15 +819,7 @@ DECLARE BEGIN col_create_defs := msar.process_col_create_arr(tab_id, col_defs, raw_default); PERFORM __msar.add_columns(__msar.get_relation_name(tab_id), variadic col_create_defs); - RETURN jsonb_agg( - jsonb_build_object( - 'tab_id', attrelid, - 'col_id', attnum, - 'col_name', attname, - 'col_type', format_type(atttypid, null), - 'col_full_type', format_type(atttypid, atttypmod) - ) - ) + RETURN array_agg(attnum) FROM (SELECT * FROM pg_attribute WHERE attrelid=tab_id) L INNER JOIN unnest(col_create_defs) R ON quote_ident(L.attname) = R.name_; @@ -837,7 +829,7 @@ $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION msar.add_columns(sch_name text, tab_name text, col_defs jsonb, raw_default boolean) - RETURNS jsonb AS $$/* + RETURNS smallint[] AS $$/* TODO */ SELECT msar.add_columns(msar.get_relation_oid(sch_name, tab_name), col_defs, raw_default); From 0827b56650369ff72f2d9322f87549ccd76221b1 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 16:58:05 +0800 Subject: [PATCH 101/620] simplify type building logic to ignore array dimension This is because Postgres doesn't enforce that anyway. --- db/sql/0_msar.sql | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 0d2601d334..989624092c 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -720,7 +720,7 @@ The input JSON should be of the form "precision": , "scale": "fields": , - "dimensions": + "array": } } */ @@ -736,15 +736,13 @@ SELECT COALESCE( '(' || topts.precision || ', ' || topts.scale || ')', '(' || topts.precision || ')', '' - ) || COALESCE ( - REPEAT('[]', topts.dimensions), - '' - ) + ) || CASE WHEN topts.array_ THEN '[]' ELSE '' END ) FROM - jsonb_to_record(typ_jsonb) AS typ(id oid, schema text, name text, modifier integer, options jsonb), + jsonb_to_record(typ_jsonb) + AS typ(id oid, schema text, name text, modifier integer, options jsonb), jsonb_to_record(typ_jsonb -> 'options') - AS topts(length integer, precision integer, scale integer, fields text, dimensions integer); + AS topts(length integer, precision integer, scale integer, fields text, array_ boolean); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; From 78770dfe8d6c2fbe6b6c32cfcd3a36fce767ab64 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 16:58:44 +0800 Subject: [PATCH 102/620] add initial column adding tests --- db/sql/test_0_msar.sql | 142 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/db/sql/test_0_msar.sql b/db/sql/test_0_msar.sql index def910411b..e189d9e9e9 100644 --- a/db/sql/test_0_msar.sql +++ b/db/sql/test_0_msar.sql @@ -141,3 +141,145 @@ BEGIN ); END; $$ LANGUAGE plpgsql; + + +-- msar.add_columns -------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION setup_add_columns() RETURNS SETOF TEXT AS $$ +BEGIN + CREATE TABLE add_col_testable (id serial primary key, col1 integer, col2 varchar); +END; +$$ LANGUAGE plpgsql; + + +-- TODO: Figure out a way to parameterize these +CREATE OR REPLACE FUNCTION test_add_columns_fullspec_text() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := $j$[ + {"name": "tcol", "type": {"name": "text"}, "not_null": true, "default": "my super default"} + ]$j$; +BEGIN + RETURN NEXT is( + msar.add_columns('add_col_testable'::regclass::oid, col_create_arr), '{4}'::smallint[] + ); + RETURN NEXT col_not_null('add_col_testable', 'tcol'); + RETURN NEXT col_type_is('add_col_testable', 'tcol', 'text'); + RETURN NEXT col_default_is('add_col_testable', 'tcol', 'my super default'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_minspec_text() RETURNS SETOF TEXT AS $f$ +/* +This tests the default settings. When not given, the defautl column should be nullable and have no +default value. The name should be "Column ", where is the attnum of the added column. +*/ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "text"}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_is_null('add_col_testable', 'Column 4'); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'text'); + RETURN NEXT col_hasnt_default('add_col_testable', 'Column 4'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_multi_default_name() RETURNS SETOF TEXT AS $f$ +/* +This tests the default settings. When not given, the defautl column should be nullable and have no +default value. The name should be "Column ", where is the attnum of the added column. +*/ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "text"}}, {"type": {"name": "numeric"}}]'; +BEGIN + RETURN NEXT is( + msar.add_columns('add_col_testable'::regclass::oid, col_create_arr), '{4, 5}'::smallint[] + ); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'text'); + RETURN NEXT col_type_is('add_col_testable', 'Column 5', 'numeric'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_numeric_def() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "numeric"}, "default": 3.14159}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'numeric'); + RETURN NEXT col_default_is('add_col_testable', 'Column 4', 3.14159); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_numeric_prec() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "numeric", "options": {"precision": 3}}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'numeric(3,0)'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_numeric_prec_scale() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "numeric", "options": {"precision": 3, "scale": 2}}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'numeric(3,2)'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_caps_numeric() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "NUMERIC"}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'numeric'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_varchar_length() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "varchar", "options": {"length": 128}}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'character varying(128)'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_interval_precision() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "interval", "options": {"precision": 6}}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'interval(6)'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_interval_fields() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "interval", "options": {"fields": "year"}}}]'; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'interval year'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_interval_fields_prec() RETURNS SETOF TEXT AS $f$ +DECLARE + col_create_arr jsonb := $j$ + [{"type": {"name": "interval", "options": {"fields": "second", "precision": 3}}}] + $j$; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'interval second(3)'); +END; +$f$ LANGUAGE plpgsql; From fbeb6087a4c749e7e5e0c2bfe4f78443c143b463 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 17:45:14 +0800 Subject: [PATCH 103/620] Add warning about raw defaults --- db/sql/0_msar.sql | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 989624092c..3fb7c46295 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -810,7 +810,12 @@ $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION msar.add_columns(tab_id oid, col_defs jsonb, raw_default boolean DEFAULT false) RETURNS smallint[] AS $$/* -TODO +Add columns to a table. + +Args: + tab_id: The OID of the table to which we'll add columns. + col_defs: a JSONB array defining columns to add. + raw_default: Whether to treat defaults as raw SQL. DANGER! */ DECLARE col_create_defs __msar.col_create_def[]; From b9d11640a68c4e3bc9ce4a5b568f04117d249905 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 17:45:42 +0800 Subject: [PATCH 104/620] add some tests to make sure the default sanitization is working --- db/sql/test_0_msar.sql | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/db/sql/test_0_msar.sql b/db/sql/test_0_msar.sql index e189d9e9e9..61af819a70 100644 --- a/db/sql/test_0_msar.sql +++ b/db/sql/test_0_msar.sql @@ -283,3 +283,34 @@ BEGIN RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'interval second(3)'); END; $f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_timestamp_raw_default() RETURNS SETOF TEXT AS $f$ +/* +This test will fail if the default is being sanitized, but will succeed if it's not. +*/ +DECLARE + col_create_arr jsonb := '[{"type": {"name": "timestamp"}, "default": "now()::timestamp"}]' +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr, raw_default => true); + RETURN NEXT col_type_is('add_col_testable', 'Column 4', 'timestamp without time zone'); + RETURN NEXT col_default_is('add_col_testable', 'Column 4', '(now())::timestamp without time zone'); +END; +$f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_timestamp_raw_default() RETURNS SETOF TEXT AS $f$ +/* +This test will succeed if the default is being sanitized, but will fail if it's not. + +It's important to check that we're careful with SQL submitted from python. +*/ +DECLARE + col_create_arr jsonb := $j$ + [{"type": {"name": "text"}, "default": "null; drop table add_col_testable"}] + $j$; +BEGIN + PERFORM msar.add_columns('add_col_testable'::regclass::oid, col_create_arr, raw_default => false); + RETURN NEXT has_table('add_col_testable'); +END; +$f$ LANGUAGE plpgsql; From 64e8cf78566c8ba2b5becfa86d56dd6f39a6f04b Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 23:08:06 +0800 Subject: [PATCH 105/620] improve docstrings for column adding functions --- db/sql/0_msar.sql | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 3fb7c46295..de0dec687e 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -755,6 +755,23 @@ Args: tab_id: The OID of the table where we'll create the columns col_create_arr: A jsonb array defining a column creation (must have "type" key; "name", "not_null", and "default" keys optional). + +The col_create_arr should have the form: +[ + { + "name": (optional), + "type": { + "name": , + "options": (optional), + }, + "not_null": (optional; default false), + "default": (optional) + }, + { + ... + } +] +For more info on the type.options object, see the msar.build_type_text function. */ WITH attnum_cte AS ( SELECT MAX(attnum) AS m_attnum FROM pg_attribute WHERE attrelid=tab_id @@ -814,7 +831,7 @@ Add columns to a table. Args: tab_id: The OID of the table to which we'll add columns. - col_defs: a JSONB array defining columns to add. + col_defs: a JSONB array defining columns to add. See msar.process_col_create_arr for details. raw_default: Whether to treat defaults as raw SQL. DANGER! */ DECLARE @@ -833,7 +850,13 @@ $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; CREATE OR REPLACE FUNCTION msar.add_columns(sch_name text, tab_name text, col_defs jsonb, raw_default boolean) RETURNS smallint[] AS $$/* -TODO +Add columns to a table. + +Args: + sch_name: unquoted schema name of the table to which we'll add columns. + tab_name: unquoted, unqualified name of the table to which we'll add columns. + col_defs: a JSONB array defining columns to add. See msar.process_col_create_arr for details. + raw_default: Whether to treat defaults as raw SQL. DANGER! */ SELECT msar.add_columns(msar.get_relation_oid(sch_name, tab_name), col_defs, raw_default); $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT; From eb88b8a71ab094fbf0424d1c105a8c5c92106989 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 23:10:38 +0800 Subject: [PATCH 106/620] add error handling tests --- db/sql/test_0_msar.sql | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/db/sql/test_0_msar.sql b/db/sql/test_0_msar.sql index 61af819a70..0201ba759b 100644 --- a/db/sql/test_0_msar.sql +++ b/db/sql/test_0_msar.sql @@ -314,3 +314,36 @@ BEGIN RETURN NEXT has_table('add_col_testable'); END; $f$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION test_add_columns_errors() RETURNS SETOF TEXT AS $f$ +BEGIN + RETURN NEXT throws_ok( + format( + 'SELECT msar.add_columns(tab_id => %s, col_defs => ''%s'');', + 'add_col_testable'::regclass::oid, + '[{"type": {"name": "taxt"}}]'::jsonb + ), + '42704', + 'type "taxt" does not exist' + ); + RETURN NEXT throws_ok( + format( + 'SELECT msar.add_columns(tab_id => %s, col_defs => ''%s'');', + 'add_col_testable'::regclass::oid, + '[{"type": {"name": "text", "options": {"length": 234}}}]'::jsonb + ), + '42601', + 'type modifier is not allowed for type "text"' + ); + RETURN NEXT throws_ok( + format( + 'SELECT msar.add_columns(tab_id => %s, col_defs => ''%s'');', + 'add_col_testable'::regclass::oid, + '[{"type": {"name": "numeric", "options": {"scale": 23, "precision": 3}}}]'::jsonb + ), + '22023', + 'NUMERIC scale 23 must be between 0 and precision 3' + ); +END; +$f$ LANGUAGE plpgsql; From 05873d9dfbe8d937ed924034ee7d76098115711e Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 6 Jun 2023 23:16:21 +0800 Subject: [PATCH 107/620] Drop function with changed signature to make update cleaner --- db/sql/0_msar.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index de0dec687e..4e03126ec7 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -152,6 +152,7 @@ END; $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; +DROP FUNCTION msar.get_relation_oid(text, text) CASCADE; CREATE OR REPLACE FUNCTION msar.get_relation_oid(sch_name text, rel_name text) RETURNS oid AS $$/* Return the OID for a given relation (e.g., table). From 4ce33aefae28811e2144f987f6eb9cd456335671 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Wed, 7 Jun 2023 13:14:53 +0800 Subject: [PATCH 108/620] fix bug preventing installation --- db/sql/0_msar.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/sql/0_msar.sql b/db/sql/0_msar.sql index 4e03126ec7..945d8b8b60 100644 --- a/db/sql/0_msar.sql +++ b/db/sql/0_msar.sql @@ -152,7 +152,7 @@ END; $$ LANGUAGE plpgsql RETURNS NULL ON NULL INPUT; -DROP FUNCTION msar.get_relation_oid(text, text) CASCADE; +DROP FUNCTION IF EXISTS msar.get_relation_oid(text, text) CASCADE; CREATE OR REPLACE FUNCTION msar.get_relation_oid(sch_name text, rel_name text) RETURNS oid AS $$/* Return the OID for a given relation (e.g., table). From 9f2c6065dcd01493a4dcc461aa5fba631ac469a3 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Wed, 7 Jun 2023 16:59:54 +0800 Subject: [PATCH 109/620] Update DEVELOPER_GUIDE.md --- DEVELOPER_GUIDE.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index cea7693a56..576400c895 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -19,12 +19,6 @@ Mathesar is built using: 1. Clone the repository and `cd` into it. -1. Copy the `.env.example` file to `.env` like so: - - ``` - cp .env.example .env - ``` - 1. From the repository's root directory, run: ``` From 4be137bc5ce4c136ae3156b870db8eb9bb483e05 Mon Sep 17 00:00:00 2001 From: Mukesh Date: Wed, 7 Jun 2023 13:23:55 +0400 Subject: [PATCH 110/620] Update DEVELOPER_GUIDE.md --- DEVELOPER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 576400c895..d810fbfde7 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -165,7 +165,7 @@ Hot module replacement for front end code does not work when the project is pres If you you see the following error after attempting to start Docker, then the port used by Postgres is already in use on your host machine. -> ERROR: for db Cannot start server db: driver failed programming external connectivity on endpoint mathesar_db (70c521f468cf2bd54014f089f0051ba28e2514667): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use. +> ERROR: for db Cannot start server db: driver failed programming external connectivity on endpoint mathesar_dev_db (70c521f468cf2bd54014f089f0051ba28e2514667): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use. 1. First stop Postgres on your host machine. From 140b8ae1ee6f77bc8cb388fc3459f1b1f0fcefdb Mon Sep 17 00:00:00 2001 From: IamEzio Date: Wed, 7 Jun 2023 20:44:39 +0530 Subject: [PATCH 111/620] created base and util files --- mathesar/imports/base.py | 36 ++++++++++++++++++++++++++++++ mathesar/imports/csv.py | 46 +++------------------------------------ mathesar/imports/json.py | 46 +++------------------------------------ mathesar/imports/utils.py | 21 ++++++++++++++++++ mathesar/utils/tables.py | 11 ++-------- 5 files changed, 65 insertions(+), 95 deletions(-) create mode 100644 mathesar/imports/base.py create mode 100644 mathesar/imports/utils.py diff --git a/mathesar/imports/base.py b/mathesar/imports/base.py new file mode 100644 index 0000000000..3059ec14b2 --- /dev/null +++ b/mathesar/imports/base.py @@ -0,0 +1,36 @@ +from mathesar.database.base import create_mathesar_engine +from mathesar.models.base import Table +from mathesar.imports.csv import create_db_table_from_csv_data_file +from mathesar.imports.json import create_db_table_from_json_data_file +from db.tables.operations.select import get_oid_from_table +from mathesar.errors import InvalidTableError + +ALLOWED_DELIMITERS = ",\t:|;" +SAMPLE_SIZE = 20000 +CHECK_ROWS = 10 + + +def create_table_from_data_file(data_file, name, schema, comment=None): + engine = create_mathesar_engine(schema.database.name) + if data_file.type == 'csv' or data_file.type == 'tsv': + db_table = create_db_table_from_csv_data_file( + data_file, name, schema, comment=comment + ) + elif data_file.type == 'json': + db_table = create_db_table_from_json_data_file( + data_file, name, schema, comment=comment + ) + else: + raise InvalidTableError + db_table_oid = get_oid_from_table(db_table.name, db_table.schema, engine) + # Using current_objects to create the table instead of objects. objects + # triggers re-reflection, which will cause a race condition to create the table + table = Table.current_objects.get( + oid=db_table_oid, + schema=schema, + ) + table.import_verified = False + table.save() + data_file.table_imported_to = table + data_file.save() + return table diff --git a/mathesar/imports/csv.py b/mathesar/imports/csv.py index 2329b7891b..16818dd5c9 100644 --- a/mathesar/imports/csv.py +++ b/mathesar/imports/csv.py @@ -2,15 +2,13 @@ import clevercsv as csv -from db.identifiers import truncate_if_necessary from db.tables.operations.alter import update_pk_sequence_to_latest from mathesar.database.base import create_mathesar_engine -from mathesar.models.base import Table from db.records.operations.insert import insert_records_from_csv from db.tables.operations.create import create_string_column_table -from db.tables.operations.select import get_oid_from_table from db.tables.operations.drop import drop_table from mathesar.errors import InvalidTableError +from mathesar.imports.utils import process_column_names from db.constants import ID, ID_ORIGINAL, COLUMN_NAME_TEMPLATE from psycopg2.errors import IntegrityError, DataError @@ -109,7 +107,7 @@ def get_sv_reader(file, header, dialect=None): return reader -def create_db_table_from_data_file(data_file, name, schema, comment=None): +def create_db_table_from_csv_data_file(data_file, name, schema, comment=None): db_name = schema.database.name engine = create_mathesar_engine(db_name) sv_filename = data_file.file.path @@ -119,7 +117,7 @@ def create_db_table_from_data_file(data_file, name, schema, comment=None): encoding = get_file_encoding(data_file.file) with open(sv_filename, 'rb') as sv_file: sv_reader = get_sv_reader(sv_file, header, dialect=dialect) - column_names = _process_column_names(sv_reader.fieldnames) + column_names = process_column_names(sv_reader.fieldnames) table = create_string_column_table( name=name, schema=schema.name, @@ -166,41 +164,3 @@ def create_db_table_from_data_file(data_file, name, schema, comment=None): ) reset_reflection(db_name=db_name) return table - - -def _process_column_names(column_names): - column_names = ( - column_name.strip() - for column_name - in column_names - ) - column_names = ( - truncate_if_necessary(column_name) - for column_name - in column_names - ) - column_names = ( - f"{COLUMN_NAME_TEMPLATE}{i}" if name == '' else name - for i, name - in enumerate(column_names) - ) - return list(column_names) - - -def create_table_from_csv(data_file, name, schema, comment=None): - engine = create_mathesar_engine(schema.database.name) - db_table = create_db_table_from_data_file( - data_file, name, schema, comment=comment - ) - db_table_oid = get_oid_from_table(db_table.name, db_table.schema, engine) - # Using current_objects to create the table instead of objects. objects - # triggers re-reflection, which will cause a race condition to create the table - table = Table.current_objects.get( - oid=db_table_oid, - schema=schema, - ) - table.import_verified = False - table.save() - data_file.table_imported_to = table - data_file.save() - return table diff --git a/mathesar/imports/json.py b/mathesar/imports/json.py index 5f75453afa..853edb0601 100644 --- a/mathesar/imports/json.py +++ b/mathesar/imports/json.py @@ -1,14 +1,12 @@ import json -from db.identifiers import truncate_if_necessary from db.tables.operations.alter import update_pk_sequence_to_latest from mathesar.database.base import create_mathesar_engine -from mathesar.models.base import Table from db.records.operations.insert import insert_records_from_json from db.tables.operations.create import create_string_column_table -from db.tables.operations.select import get_oid_from_table from db.tables.operations.drop import drop_table -from db.constants import ID, ID_ORIGINAL, COLUMN_NAME_TEMPLATE +from mathesar.imports.utils import process_column_names +from db.constants import ID, ID_ORIGINAL from psycopg2.errors import IntegrityError, DataError from mathesar.state import reset_reflection @@ -23,30 +21,11 @@ def get_column_names_from_json(data_file): return list(data.keys()) -def _process_column_names(column_names): - column_names = ( - column_name.strip() - for column_name - in column_names - ) - column_names = ( - truncate_if_necessary(column_name) - for column_name - in column_names - ) - column_names = ( - f"{COLUMN_NAME_TEMPLATE}{i}" if name == '' else name - for i, name - in enumerate(column_names) - ) - return list(column_names) - - def create_db_table_from_json_data_file(data_file, name, schema, comment=None): db_name = schema.database.name engine = create_mathesar_engine(db_name) json_filepath = data_file.file.path - column_names = _process_column_names( + column_names = process_column_names( get_column_names_from_json(data_file.file.path) ) table = create_string_column_table( @@ -83,22 +62,3 @@ def create_db_table_from_json_data_file(data_file, name, schema, comment=None): ) reset_reflection(db_name=db_name) return table - - -def create_table_from_json(data_file, name, schema, comment=None): - engine = create_mathesar_engine(schema.database.name) - db_table = create_db_table_from_json_data_file( - data_file, name, schema, comment=comment - ) - db_table_oid = get_oid_from_table( - db_table.name, db_table.schema, engine - ) - table = Table.current_objects.get( - oid=db_table_oid, - schema=schema, - ) - table.import_verified = False - table.save() - data_file.table_imported_to = table - data_file.save() - return table diff --git a/mathesar/imports/utils.py b/mathesar/imports/utils.py new file mode 100644 index 0000000000..a1d683dc9c --- /dev/null +++ b/mathesar/imports/utils.py @@ -0,0 +1,21 @@ +from db.identifiers import truncate_if_necessary +from db.constants import COLUMN_NAME_TEMPLATE + + +def process_column_names(column_names): + column_names = ( + column_name.strip() + for column_name + in column_names + ) + column_names = ( + truncate_if_necessary(column_name) + for column_name + in column_names + ) + column_names = ( + f"{COLUMN_NAME_TEMPLATE}{i}" if name == '' else name + for i, name + in enumerate(column_names) + ) + return list(column_names) diff --git a/mathesar/utils/tables.py b/mathesar/utils/tables.py index d7d7a36484..6aadd05347 100644 --- a/mathesar/utils/tables.py +++ b/mathesar/utils/tables.py @@ -4,9 +4,7 @@ from db.tables.operations.select import get_oid_from_table from db.tables.operations.infer_types import infer_table_column_types from mathesar.database.base import create_mathesar_engine -from mathesar.errors import InvalidTableError -from mathesar.imports.csv import create_table_from_csv -from mathesar.imports.json import create_table_from_json +from mathesar.imports.base import create_table_from_data_file from mathesar.models.base import Table from mathesar.state.django import reflect_columns_from_tables from mathesar.state import get_cached_metadata @@ -67,12 +65,7 @@ def gen_table_name(schema, data_files=None): def create_table_from_datafile(data_files, name, schema, comment=None): data_file = data_files[0] - if data_file.type == "json": - table = create_table_from_json(data_file, name, schema, comment=comment) - elif data_file.type == "csv" or data_file.type == "tsv": - table = create_table_from_csv(data_file, name, schema, comment=comment) - else: - raise InvalidTableError + table = create_table_from_data_file(data_file, name, schema, comment) return table From af41cbb8750def72615bef9b34bc3fd663b9d63a Mon Sep 17 00:00:00 2001 From: IamEzio Date: Wed, 7 Jun 2023 21:08:17 +0530 Subject: [PATCH 112/620] updated tests --- mathesar/tests/conftest.py | 4 ++-- mathesar/tests/imports/test_csv.py | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/mathesar/tests/conftest.py b/mathesar/tests/conftest.py index 09215d91c2..c63367499a 100644 --- a/mathesar/tests/conftest.py +++ b/mathesar/tests/conftest.py @@ -20,7 +20,7 @@ from db.schemas.utils import get_schema_oid_from_name import mathesar.tests.conftest -from mathesar.imports.csv import create_table_from_csv +from mathesar.imports.base import create_table_from_data_file from mathesar.models.base import Schema, Table, Database, DataFile from mathesar.models.base import Column as mathesar_model_column from mathesar.models.users import DatabaseRole, SchemaRole, User @@ -322,7 +322,7 @@ def create_table(create_schema): def _create_table(table_name, schema_name, csv_filepath): data_file = _get_datafile_for_path(csv_filepath) schema_model = create_schema(schema_name) - return create_table_from_csv(data_file, table_name, schema_model) + return create_table_from_data_file(data_file, table_name, schema_model) return _create_table diff --git a/mathesar/tests/imports/test_csv.py b/mathesar/tests/imports/test_csv.py index 44755c0a80..2b1220a5bb 100644 --- a/mathesar/tests/imports/test_csv.py +++ b/mathesar/tests/imports/test_csv.py @@ -5,7 +5,8 @@ from mathesar.models.base import DataFile, Schema from mathesar.errors import InvalidTableError -from mathesar.imports.csv import create_table_from_csv, get_sv_dialect, get_sv_reader +from mathesar.imports.base import create_table_from_data_file +from mathesar.imports.csv import get_sv_dialect, get_sv_reader from db.schemas.operations.create import create_schema from db.schemas.utils import get_schema_oid_from_name from db.constants import COLUMN_NAME_TEMPLATE @@ -63,7 +64,7 @@ def check_csv_upload(table, table_name, schema, num_records, row, cols): def test_csv_upload(data_file, schema): table_name = "NASA 1" - table = create_table_from_csv(data_file, table_name, schema) + table = create_table_from_data_file(data_file, table_name, schema) num_records = 1393 expected_row = ( @@ -92,7 +93,7 @@ def test_csv_upload(data_file, schema): def test_headerless_csv_upload(headerless_data_file, schema): table_name = "NASA no headers" - table = create_table_from_csv(headerless_data_file, table_name, schema) + table = create_table_from_data_file(headerless_data_file, table_name, schema) num_records = 1393 expected_row = ( @@ -114,7 +115,7 @@ def test_headerless_csv_upload(headerless_data_file, schema): def test_col_names_with_spaces_csv(col_names_with_spaces_data_file, schema): table_name = "Column names with spaces" - table = create_table_from_csv(col_names_with_spaces_data_file, table_name, schema) + table = create_table_from_data_file(col_names_with_spaces_data_file, table_name, schema) num_records = 2 expected_row = ( @@ -131,7 +132,7 @@ def test_col_names_with_spaces_csv(col_names_with_spaces_data_file, schema): def test_col_headers_empty_csv(col_headers_empty_data_file, schema): table_name = "Empty column header" - table = create_table_from_csv(col_headers_empty_data_file, table_name, schema) + table = create_table_from_data_file(col_headers_empty_data_file, table_name, schema) num_records = 2 expected_row = (1, "aa", "bb", "cc", "dd") @@ -145,18 +146,18 @@ def test_col_headers_empty_csv(col_headers_empty_data_file, schema): def test_csv_upload_with_duplicate_table_name(data_file, schema): table_name = "NASA 2" - table = create_table_from_csv(data_file, table_name, schema) + table = create_table_from_data_file(data_file, table_name, schema) assert table is not None assert table.name == table_name assert table.schema == schema assert table.sa_num_records() == 1393 with pytest.raises(DuplicateTable): - create_table_from_csv(data_file, table_name, schema) + create_table_from_data_file(data_file, table_name, schema) def test_csv_upload_table_imported_to(data_file, schema): - table = create_table_from_csv(data_file, "NASA", schema) + table = create_table_from_data_file(data_file, "NASA", schema) data_file.refresh_from_db() assert data_file.table_imported_to == table From a62e85082be5ce191e06d65df08bddabce052f6b Mon Sep 17 00:00:00 2001 From: IamEzio Date: Wed, 7 Jun 2023 23:37:59 +0530 Subject: [PATCH 113/620] split long methods --- mathesar/imports/csv.py | 64 +++++++++++++++++----------------------- mathesar/imports/json.py | 43 ++++++++++++--------------- 2 files changed, 46 insertions(+), 61 deletions(-) diff --git a/mathesar/imports/csv.py b/mathesar/imports/csv.py index 16818dd5c9..1bb93a4e0c 100644 --- a/mathesar/imports/csv.py +++ b/mathesar/imports/csv.py @@ -107,6 +107,31 @@ def get_sv_reader(file, header, dialect=None): return reader +def insert_data_from_csv_data_file(name, schema, column_names, engine, comment, data_file): + dialect = csv.dialect.SimpleDialect(data_file.delimiter, data_file.quotechar, + data_file.escapechar) + encoding = get_file_encoding(data_file.file) + table = create_string_column_table( + name=name, + schema=schema.name, + column_names=column_names, + engine=engine, + comment=comment, + ) + insert_records_from_csv( + table, + engine, + data_file.file.path, + column_names, + data_file.header, + delimiter=dialect.delimiter, + escape=dialect.escapechar, + quote=dialect.quotechar, + encoding=encoding + ) + return table + + def create_db_table_from_csv_data_file(data_file, name, schema, comment=None): db_name = schema.database.name engine = create_mathesar_engine(db_name) @@ -114,29 +139,11 @@ def create_db_table_from_csv_data_file(data_file, name, schema, comment=None): header = data_file.header dialect = csv.dialect.SimpleDialect(data_file.delimiter, data_file.quotechar, data_file.escapechar) - encoding = get_file_encoding(data_file.file) with open(sv_filename, 'rb') as sv_file: sv_reader = get_sv_reader(sv_file, header, dialect=dialect) column_names = process_column_names(sv_reader.fieldnames) - table = create_string_column_table( - name=name, - schema=schema.name, - column_names=column_names, - engine=engine, - comment=comment, - ) try: - insert_records_from_csv( - table, - engine, - sv_filename, - column_names, - header, - delimiter=dialect.delimiter, - escape=dialect.escapechar, - quote=dialect.quotechar, - encoding=encoding - ) + table = insert_data_from_csv_data_file(name, schema, column_names, engine, comment, data_file) update_pk_sequence_to_latest(engine, table) except (IntegrityError, DataError): drop_table(name=name, schema=schema.name, engine=engine) @@ -144,23 +151,6 @@ def create_db_table_from_csv_data_file(data_file, name, schema, comment=None): column_name if column_name != ID else ID_ORIGINAL for column_name in column_names ] - table = create_string_column_table( - name=name, - schema=schema.name, - column_names=column_names_alt, - engine=engine, - comment=comment, - ) - insert_records_from_csv( - table, - engine, - sv_filename, - column_names_alt, - header, - delimiter=dialect.delimiter, - escape=dialect.escapechar, - quote=dialect.quotechar, - encoding=encoding - ) + insert_data_from_csv_data_file(name, schema, column_names_alt, engine, comment, data_file) reset_reflection(db_name=db_name) return table diff --git a/mathesar/imports/json.py b/mathesar/imports/json.py index 853edb0601..3e670bace7 100644 --- a/mathesar/imports/json.py +++ b/mathesar/imports/json.py @@ -21,13 +21,7 @@ def get_column_names_from_json(data_file): return list(data.keys()) -def create_db_table_from_json_data_file(data_file, name, schema, comment=None): - db_name = schema.database.name - engine = create_mathesar_engine(db_name) - json_filepath = data_file.file.path - column_names = process_column_names( - get_column_names_from_json(data_file.file.path) - ) +def insert_data_from_json_data_file(name, schema, column_names, engine, comment, json_filepath): table = create_string_column_table( name=name, schema=schema.name, @@ -35,12 +29,23 @@ def create_db_table_from_json_data_file(data_file, name, schema, comment=None): engine=engine, comment=comment, ) + insert_records_from_json( + table, + engine, + json_filepath + ) + return table + + +def create_db_table_from_json_data_file(data_file, name, schema, comment=None): + db_name = schema.database.name + engine = create_mathesar_engine(db_name) + json_filepath = data_file.file.path + column_names = process_column_names( + get_column_names_from_json(json_filepath) + ) try: - insert_records_from_json( - table, - engine, - json_filepath - ) + table = insert_data_from_json_data_file(name, schema, column_names, engine, comment, json_filepath) update_pk_sequence_to_latest(engine, table) except (IntegrityError, DataError): drop_table(name=name, schema=schema.name, engine=engine) @@ -48,17 +53,7 @@ def create_db_table_from_json_data_file(data_file, name, schema, comment=None): fieldname if fieldname != ID else ID_ORIGINAL for fieldname in column_names ] - table = create_string_column_table( - name=name, - schema=schema.name, - column_names=column_names_alt, - engine=engine, - comment=comment, - ) - insert_records_from_json( - table, - engine, - json_filepath - ) + table = insert_data_from_json_data_file(name, schema, column_names_alt, engine, comment, json_filepath) + reset_reflection(db_name=db_name) return table From 85c2660ed63238f8e3eb3e4e7719eee35ef761c5 Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Wed, 7 Jun 2023 14:15:52 -0400 Subject: [PATCH 114/620] Reorganize summarization functions on front end --- mathesar_ui/src/api/types/queries.ts | 13 ++++- .../src/stores/abstract-types/index.ts | 1 + .../operations/summarization.ts | 58 +++++++++++++++++++ .../src/stores/abstract-types/types.ts | 30 +++++++++- .../QuerySummarizationTransformationModel.ts | 7 ++- .../summarization/Aggregation.svelte | 33 ++--------- .../src/systems/data-explorer/utils.ts | 6 ++ 7 files changed, 117 insertions(+), 31 deletions(-) create mode 100644 mathesar_ui/src/stores/abstract-types/operations/summarization.ts diff --git a/mathesar_ui/src/api/types/queries.ts b/mathesar_ui/src/api/types/queries.ts index ca2c34ef7e..7ef1c5d2a0 100644 --- a/mathesar_ui/src/api/types/queries.ts +++ b/mathesar_ui/src/api/types/queries.ts @@ -28,6 +28,17 @@ export interface QueryInstanceFilterTransformation { spec: FilterCondition; } +// This is defined as a value instead of a type because we have a need to +// iterate over it. +export const querySummarizationFunctionIds = [ + 'distinct_aggregate_to_array', + 'count', + 'sum', +] as const; + +export type QuerySummarizationFunctionId = + typeof querySummarizationFunctionIds[number]; + export interface QueryInstanceSummarizationTransformation { type: 'summarize'; spec: { @@ -40,7 +51,7 @@ export interface QueryInstanceSummarizationTransformation { aggregation_expressions?: { input_alias: string; output_alias: string; - function: 'distinct_aggregate_to_array' | 'count' | 'sum'; + function: QuerySummarizationFunctionId; }[]; }; } diff --git a/mathesar_ui/src/stores/abstract-types/index.ts b/mathesar_ui/src/stores/abstract-types/index.ts index 29b482c272..36478a84f1 100644 --- a/mathesar_ui/src/stores/abstract-types/index.ts +++ b/mathesar_ui/src/stores/abstract-types/index.ts @@ -13,3 +13,4 @@ export { getLimitedFilterInformationById, } from './operations/filtering'; export { getPreprocFunctionsForAbstractType } from './operations/preprocFunctions'; +export { getSummarizationFunctionsForAbstractType } from './operations/summarization'; diff --git a/mathesar_ui/src/stores/abstract-types/operations/summarization.ts b/mathesar_ui/src/stores/abstract-types/operations/summarization.ts new file mode 100644 index 0000000000..4730b6b0e1 --- /dev/null +++ b/mathesar_ui/src/stores/abstract-types/operations/summarization.ts @@ -0,0 +1,58 @@ +import { querySummarizationFunctionIds } from '@mathesar/api/types/queries'; +import { abstractTypeCategory } from '../constants'; +import type { + AbstractTypeCategoryIdentifier, + AbstractTypeSummarizationFunction, + AbstractTypeSummarizationFunctionsResponse, + AbstractTypeSummarizationFunctionsResponseValue, +} from '../types'; + +function mapAllInputTypesToOneOutputType( + returnType: AbstractTypeCategoryIdentifier, +): AbstractTypeSummarizationFunctionsResponseValue['inputOutputTypeMap'] { + return Object.fromEntries( + Object.values(abstractTypeCategory).map((t) => [t, returnType]), + ); +} + +const functionsResponse: AbstractTypeSummarizationFunctionsResponse = { + distinct_aggregate_to_array: { + label: 'List', + inputOutputTypeMap: mapAllInputTypesToOneOutputType( + abstractTypeCategory.Array, + ), + }, + count: { + label: 'Count', + inputOutputTypeMap: mapAllInputTypesToOneOutputType( + abstractTypeCategory.Number, + ), + }, + sum: { + label: 'Sum', + inputOutputTypeMap: { + [abstractTypeCategory.Number]: abstractTypeCategory.Number, + [abstractTypeCategory.Money]: abstractTypeCategory.Money, + [abstractTypeCategory.Duration]: abstractTypeCategory.Duration, + }, + }, +}; + +export function getSummarizationFunctionsForAbstractType( + categoryIdentifier: AbstractTypeCategoryIdentifier, +): AbstractTypeSummarizationFunction[] { + const functions: AbstractTypeSummarizationFunction[] = []; + for (const id of querySummarizationFunctionIds) { + const { label, inputOutputTypeMap } = functionsResponse[id]; + const outputType = inputOutputTypeMap[categoryIdentifier]; + if (outputType) { + functions.push({ + id, + label, + inputType: categoryIdentifier, + outputType, + }); + } + } + return functions; +} diff --git a/mathesar_ui/src/stores/abstract-types/types.ts b/mathesar_ui/src/stores/abstract-types/types.ts index 9d9d78aa65..7bd3a69b23 100644 --- a/mathesar_ui/src/stores/abstract-types/types.ts +++ b/mathesar_ui/src/stores/abstract-types/types.ts @@ -4,10 +4,11 @@ import type { FormValues, IconProps, } from '@mathesar-component-library/types'; -import type { CellDataType } from '@mathesar/components/cell-fabric/data-types/typeDefinitions'; import type { DbType } from '@mathesar/AppTypes'; +import type { QuerySummarizationFunctionId } from '@mathesar/api/types/queries'; import type { Column } from '@mathesar/api/types/tables/columns'; import type { States } from '@mathesar/api/utils/requestUtils'; +import type { CellDataType } from '@mathesar/components/cell-fabric/data-types/typeDefinitions'; import type { abstractTypeCategory } from './constants'; type AbstractTypeCategoryKeys = keyof typeof abstractTypeCategory; @@ -141,3 +142,30 @@ export type AbstractTypePreprocFunctionDefinitionMap = Map< AbstractTypeCategoryIdentifier, AbstractTypePreprocFunctionDefinition[] >; + +export interface AbstractTypeSummarizationFunctionsResponseValue { + label: string; + /** + * - Keys are abstract types to which this summarization function applies. + * - Values are the abstract types that the summarization function returns. + */ + inputOutputTypeMap: Partial< + Record + >; +} + +export type AbstractTypeSummarizationFunctionsResponse = Record< + QuerySummarizationFunctionId, + AbstractTypeSummarizationFunctionsResponseValue +>; + +/** + * A summarization function for a _specific_ abstract type, showing the return + * value for that type. + */ +export interface AbstractTypeSummarizationFunction { + id: QuerySummarizationFunctionId; + label: AbstractTypeSummarizationFunctionsResponseValue['label']; + inputType: AbstractTypeCategoryIdentifier; + outputType: AbstractTypeCategoryIdentifier; +} diff --git a/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts b/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts index b0edc22de5..47617faf06 100644 --- a/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts +++ b/mathesar_ui/src/systems/data-explorer/QuerySummarizationTransformationModel.ts @@ -1,10 +1,13 @@ -import type { QueryInstanceSummarizationTransformation } from '@mathesar/api/types/queries'; import { ImmutableMap } from '@mathesar-component-library'; +import type { + QueryInstanceSummarizationTransformation, + QuerySummarizationFunctionId, +} from '@mathesar/api/types/queries'; export interface QuerySummarizationAggregationEntry { inputAlias: string; outputAlias: string; - function: 'distinct_aggregate_to_array' | 'count' | 'sum'; + function: QuerySummarizationFunctionId; } export interface QuerySummarizationGroupingEntry { diff --git a/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte b/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte index 7b5fb5e38d..3ae1cf8ad6 100644 --- a/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte +++ b/mathesar_ui/src/systems/data-explorer/input-sidebar/transformations-pane/summarization/Aggregation.svelte @@ -1,6 +1,7 @@
@@ -51,10 +30,10 @@ {/if} as